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

# NOTE: Careful when replacing the *-import below with a more specific import. This can cause
# problems because it might remove variables from the check-context which are necessary for
# resolving legacy discovery results such as [("SUMMARY", "diskstat_default_levels")]. Furthermore,
# it might also remove variables needed for accessing discovery rulesets.
from cmk.base.check_legacy_includes.temperature import *  # pylint: disable=wildcard-import,unused-wildcard-import

factory_settings["brocade_mlx_temperature_default_levels"] = {"levels": (105, 110)}


def parse_brocade_mlx_temp(info):
    parsed = {}
    for temp_descr, temp_value in info:
        if temp_value and temp_value != "0":
            item = (
                temp_descr.replace("temperature", "")
                .replace("module", "Module")
                .replace("sensor", "Sensor")
                .replace(",", "")
                .strip()
            )
            parsed[item] = float(temp_value) * 0.5
    return parsed


def inventory_brocade_mlx_temp(parsed):
    for item in parsed:
        yield item, {}


def check_brocade_mlx_temp(item, params, parsed):
    if item in parsed:
        return check_temperature(parsed[item], params, "brocade_mlx_temp_%s" % item)
    elif "Module" in item and not "Sensor" in item:
        # item discovered in 1.2.6 had the sensor-id stripped and module id replaced
        # so it's impossible to look by that name
        return 3, "check had an incompatible change, please re-discover this host"


check_info["brocade_mlx_temp"] = {
    "parse_function": parse_brocade_mlx_temp,
    "check_function": check_brocade_mlx_temp,
    "inventory_function": inventory_brocade_mlx_temp,
    "service_description": "Temperature %s",
    "snmp_info": (".1.3.6.1.4.1.1991.1.1.2.13.1.1", [3, 4]),  # descr, temperature
    "snmp_scan_function": lambda oid: oid(".1.3.6.1.2.1.1.2.0").startswith(".1.3.6.1.4.1.1991.1."),
    "has_perfdata": True,
    "default_levels_variable": "brocade_mlx_temperature_default_levels",
    "group": "temperature",
}
