#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (C) 2019 tribe29 GmbH - License: GNU General Public License v2
# This file is part of Checkmk (https://checkmk.com). It is subject to the terms and
# conditions defined in the file COPYING, which is part of this source code package.

# 7 mode
# <<<netapp_api_systemtime:sep(9)>>>
# name 76123    123

# Cluster mode
# <<<netapp_api_systemtime:sep(9)>>>
# node1 76123   123123
# node2 7612311 123123

NetappApiTimeEntry = collections.namedtuple(  # pylint: disable=collections-namedtuple-call
    "NetappApiTimeEntry",
    [
        "agent_time",
        "system_time",
    ],
)


def parse_netapp_api_systemtime(info):
    parsed = {}
    for line in info:
        try:
            item, agent_time, system_time = line
            parsed[item] = NetappApiTimeEntry(int(agent_time), int(system_time))
        except ValueError:
            pass
    return parsed


@get_parsed_item_data
def check_netapp_api_systemtime(item, params, entry):
    yield check_levels(
        entry.system_time,
        None,
        None,
        infoname="System time",
        human_readable_func=get_timestamp_human_readable,
    )
    yield check_levels(
        entry.agent_time - entry.system_time,
        "time_difference",
        params.get("levels", (None, None)),
        infoname="Time difference",
        human_readable_func=get_age_human_readable,
    )


check_info["netapp_api_systemtime"] = {
    "parse_function": parse_netapp_api_systemtime,
    "inventory_function": discover(),
    "check_function": check_netapp_api_systemtime,
    "service_description": "Systemtime %s",
    "group": "netapp_systemtime",
    "has_perfdata": True,
}
