#!/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.

apc_power_default_levels = (20, 1)  # warning / critical *below* those levels (Watt)


def inventory_apc_power(info):
    for line in info:
        value = int(line[1])
        if value not in [0, -1]:
            yield line[0], "apc_power_default_levels"


def check_apc_power(item, params, info):
    warn, crit = params
    for line in info:
        if line[0] == item:
            power = int(line[1])
            perfdata = [("power", power, warn, crit, 0)]
            infotext = "current power: %d W, warn/crit at and below %d/%d W" % (power, warn, crit)

            if power != -1 and power < crit:
                return (2, infotext, perfdata)
            elif power != -1 and power < warn:
                return (1, infotext, perfdata)
            return (0, infotext, perfdata)

    return (3, "Phase %s not found in SNMP output" % item)


check_info["apc_symmetra_power"] = {
    "check_function": check_apc_power,
    "inventory_function": inventory_apc_power,
    "service_description": "Power phase %s",
    "has_perfdata": True,
    "group": "apc_power",
    "snmp_info": (
        ".1.3.6.1.4.1.318.1.1.1.9.3.3.1",
        [
            "2.1",  # PowerNet-MIB::upsPhaseOutputPhaseIndex
            "7.1",  # PowerNet-MIB::upsPhaseOutputLoad
        ],
    ),
    "snmp_scan_function": lambda oid: oid(".1.3.6.1.2.1.1.2.0").startswith(".1.3.6.1.4.1.318.1.3"),
}
