#!/usr/bin/python
# -*- encoding: utf-8; py-indent-offset: 4 -*-
factory_settings["avocent_temp_default_levels"] = {"levels": (50, 60)}


def parse_avocent_sensors(info):
    parsed = {}
    if info[0][0]:
        parsed["Temperature CPU"] = int(info[0][0])
    if info[0][1]:
        parsed["Temperature Board"] = int(info[0][1])
    if info[0][1]:
        parsed["Voltage PSU1"] = float(info[0][2])/100
    if info[0][2]:
        parsed["Voltage PSU2"] = float(info[0][3])/100
    return parsed


def inventory_avocent_sensors(parsed):
    for item in parsed:
        if "Temperature" in item: 
            yield item, {} 

def check_avocent_sensors(item, params, parsed):
    if item in parsed:
        return check_temperature(parsed[item], params, item) 


check_info['avocent_sensors'] = {
    'default_levels_variable': 'avocent_temp_default_levels',
    'parse_function' : parse_avocent_sensors,
    'inventory_function': inventory_avocent_sensors,
    'check_function': check_avocent_sensors,
    'service_description': '%s',
    'has_perfdata': True,
    'snmp_info': (
        ".1.3.6.1.4.1.10418.26.2.7",
        [
            "1",  #acsSensorsInternalCurrentCPUTemperature
            "6",  #acsSensorsInternalCurrentBoardTemperature
            "17", #acsSensorsVoltagePowerSupply1
            "18", #acsSensorsVoltagePowerSupply2
        ]),
    'includes': ['temperature.include'],
    'group': 'temperature',
    'snmp_scan_function': lambda oid: oid(".1.3.6.1.2.1.1.1.0").startswith("Avocent"),
}


def inventory_avocent_sensors_voltage(parsed):
    for item in parsed:
        if "Voltage" in item:
            yield item, {}

def check_avocent_sensors_voltage(item, params, parsed):
    sensor_value = parsed[item]
    perf = [("voltage", sensor_value)]
    infotext = "Voltage is %.1f V" % sensor_value
    if params:
        min_warn = params['levels_lower'][0]
        min_crit = params['levels_lower'][1]
        max_warn = params['levels'][0]
        max_crit = params['levels'][1]
    else:
        min_warn = 1
        min_crit = 2
        max_warn = 20
        max_crit = 25
    levelstext_lower = " (warn/crit below %s/%s)" % (min_warn, min_crit)
    levelstext_upper = " (warn/crit at %s/%s)" % (max_warn, max_crit)
    levelstext = ""
    if sensor_value >= max_crit:
        state = 2
        levelstext = levelstext_upper
    elif sensor_value < min_crit:
        state = 2
        levelstext = levelstext_lower
    elif sensor_value < min_warn:
        state = 1
        levelstext = levelstext_lower
    elif sensor_value >= max_warn:
        state = 1
        levelstext = levelstext_upper
    else:
        state = 0
    if state:
        infotext += levelstext
    return state, infotext, perf


check_info['avocent_sensors.voltage'] = {
    'inventory_function': inventory_avocent_sensors_voltage,
    'check_function': check_avocent_sensors_voltage,
    'service_description': '%s',
    'has_perfdata': True,
    'group': 'voltage',
}





