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

# .1.3.6.1.4.1.232.11.1.3.0  1
# .1.3.6.1.4.1.232.11.2.14.1.1.5.0  "2009.05.18"
# .1.3.6.1.4.1.232.2.2.2.1.0  "GB8851CPPH


def proliant_general_scan_function(oid):
    return (
        "8072.3.2.10" in oid(".1.3.6.1.2.1.1.2.0")
        or "232.9.4.10" in oid(".1.3.6.1.2.1.1.2.0")
        or (
            ".1.3.6.1.4.1.311.1.1.3.1.2" in oid(".1.3.6.1.2.1.1.2.0")
            and oid(".1.3.6.1.4.1.232.11.1.3.0")
        )
    )


def inventory_proliant_general(info):
    if info and len(info[0]) > 1 and info[0][0]:
        yield None, {}


def check_proliant_general(_no_item, _no_params, info):
    if not info:
        return

    map_states = {
        "1": (3, "unknown"),
        "2": (0, "OK"),
        "3": (1, "degraded"),
        "4": (2, "failed"),
    }

    status, firmware, serial_number = info[0]
    state, state_readable = map_states.get(status, (3, "unhandled[%s]" % status))
    return state, "Status: %s, Firmware: %s, S/N: %s" % (state_readable, firmware, serial_number)


check_info["hp_proliant"] = {
    "inventory_function": inventory_proliant_general,
    "check_function": check_proliant_general,
    "service_description": "General Status",
    "snmp_info": (
        ".1.3.6.1.4.1.232",
        [
            "11.1.3.0",  # CPQHOST-MIB::cpqHoMibCondition
            "11.2.14.1.1.5.0",  # cpqHoFwVerVersion
            "2.2.2.1.0",  # CPQSINFO-MIB::cpqSiSysSerialNum
        ],
    ),
    "snmp_scan_function": proliant_general_scan_function,
}
