示例#1
0
                    $states = array(array($state_index_id, 'unknown', 0, 0, 3), array($state_index_id, 'ready', 1, 1, 0), array($state_index_id, 'failed', 1, 2, 2), array($state_index_id, 'online', 1, 3, 1), array($state_index_id, 'offline', 1, 4, 2), array($state_index_id, 'degraded', 1, 6, 2), array($state_index_id, 'verifying', 1, 7, 1), array($state_index_id, 'resynching', 1, 15, 1), array($state_index_id, 'regenerating', 1, 16, 1), array($state_index_id, 'failedRedundancy', 1, 18, 2), array($state_index_id, 'rebuilding', 1, 24, 1), array($state_index_id, 'formatting', 1, 26, 1), array($state_index_id, 'reconstructing', 1, 32, 1), array($state_index_id, 'initializing', 1, 35, 1), array($state_index_id, 'backgroundInit', 1, 36, 1), array($state_index_id, 'permanentlyDegraded', 1, 52, 2));
                } elseif ($state_name == 'batteryState') {
                    $states = array(array($state_index_id, 'ready', 0, 1, 0), array($state_index_id, 'failed', 1, 2, 2), array($state_index_id, 'degraded', 1, 6, 2), array($state_index_id, 'reconditioning', 1, 7, 1), array($state_index_id, 'high', 1, 9, 1), array($state_index_id, 'low', 1, 10, 1), array($state_index_id, 'charging', 1, 12, 1), array($state_index_id, 'missing', 1, 21, 2), array($state_index_id, 'learning', 1, 36, 1));
                }
                foreach ($states as $value) {
                    $insert = array('state_index_id' => $value[0], 'state_descr' => $value[1], 'state_draw_graph' => $value[2], 'state_value' => $value[3], 'state_generic_value' => $value[4]);
                    dbInsert($insert, 'state_translations');
                }
            }
            foreach ($temp as $index => $entry) {
                if (strpos($index, '54.') === false) {
                    //Because Dell is buggy
                    if ($state_name == 'intrusionStatus') {
                        $descr = $tablevalue[3];
                    } elseif ($state_name == 'batteryState') {
                        $descr = str_replace('"', "", snmp_get($device, "batteryConnectionControllerName." . $index . "", "-Ovqn", $tablevalue[4])) . ' - ' . $temp[$index][$tablevalue[3]];
                    } elseif ($state_name == 'arrayDiskState') {
                        $descr = str_replace('"', "", snmp_get($device, "arrayDiskEnclosureConnectionEnclosureName." . $index . "", "-Ovqn", $tablevalue[4])) . ' - ' . $temp[$index][$tablevalue[3]];
                    } else {
                        $descr = clean($temp[$index][$tablevalue[3]]);
                        // Use clean as virtualDiskDeviceName is user defined
                    }
                    //Discover Sensors
                    discover_sensor($valid['sensor'], 'state', $device, $cur_oid . $index, $index, $state_name, $descr, '1', '1', null, null, null, null, $temp[$index][$tablevalue[2]], 'snmp', $index);
                    //Create Sensor To State Index
                    create_sensor_to_state_index($device, $state_name, $index);
                }
            }
        }
    }
}
示例#2
0
/**
 * Helper function to improve readability
 * Can't use mib based polling, because the snmp implentation and mibs are terrible
 *
 * @param (device) array - device array
 * @param (sensor) array(id, oid, type, descr, descr_oid, min, max, divisor)
 */
function avtech_add_sensor($device, $sensor)
{
    global $valid;
    // set the id, must be unique
    if (isset($sensor['id'])) {
        $id = $sensor['id'];
    } else {
        d_echo('Error: No id set for this sensor' . "\n");
        return false;
    }
    d_echo('Sensor id: ' . $id . "\n");
    // set the sensor oid
    if ($sensor['oid']) {
        $oid = $sensor['oid'];
    } else {
        d_echo('Error: No oid set for this sensor' . "\n");
        return false;
    }
    d_echo('Sensor oid: ' . $oid . "\n");
    // get the sensor value
    $value = snmp_get($device, $oid, '-OvQ');
    // if the sensor doesn't exist abort
    if ($value === false || $type == 'temperature' && $value == 0) {
        //issue unfortunately some non-existant sensors return 0
        d_echo('Error: sensor returned no data, skipping' . "\n");
        return false;
    }
    d_echo('Sensor value: ' . $value . "\n");
    // get the type
    $type = $sensor['type'] ? $sensor['type'] : 'temperature';
    d_echo('Sensor type: ' . $type . "\n");
    $type_name = $device['os'];
    if ($type == 'switch') {
        // set up state sensor
        $type_name .= ucfirst($type);
        $type = 'state';
        $state_index_id = create_state_index($type_name);
        //Create State Translation
        if (isset($state_index_id)) {
            $states = array(array($state_index_id, 'Off', 1, 0, -1), array($state_index_id, 'On', 1, 1, 0));
            foreach ($states as $value) {
                $insert = array('state_index_id' => $value[0], 'state_descr' => $value[1], 'state_draw_graph' => $value[2], 'state_value' => $value[3], 'state_generic_value' => $value[4]);
                dbInsert($insert, 'state_translations');
            }
        }
    }
    // set the description
    if ($sensor['descr_oid']) {
        $descr = trim(snmp_get($device, $sensor['descr_oid'], '-OvQ'), '"');
    } elseif ($sensor['descr']) {
        $descr = $sensor['descr'];
    } else {
        d_echo('Error: No description set for this sensor' . "\n");
        return false;
    }
    d_echo('Sensor description: ' . $descr . "\n");
    // set divisor
    if ($sensor['divisor']) {
        $divisor = $sensor['divisor'];
    } elseif ($type == 'temperature') {
        $divisor = 100;
    } else {
        $divisor = 1;
    }
    d_echo('Sensor divisor: ' . $divisor . "\n");
    // set min for alarm
    if ($sensor['min_oid']) {
        $min = snmp_get($device, $sensor['min_oid'], '-OvQ') / $divisor;
    } else {
        $min = null;
    }
    d_echo('Sensor alarm min: ' . $min . "\n");
    // set max for alarm
    if ($sensor['max_oid']) {
        $max = snmp_get($device, $sensor['max_oid'], '-OvQ') / $divisor;
    } else {
        $max = null;
    }
    d_echo('Sensor alarm max: ' . $max . "\n");
    // add the sensor
    discover_sensor($valid['sensor'], $type, $device, $oid, $id, $type_name, $descr, $divisor, '1', $min, null, null, $max, $value / $divisor);
    if ($type == 'state') {
        create_sensor_to_state_index($device, $type_name, $id);
    }
    return true;
}
示例#3
0
            case "9":
                $descr = "MPG2 codec";
                break;
            case "10":
                $descr = "WVC1 codec";
                break;
            case "11":
                $descr = "MPG4 codec";
                break;
            case "12":
                $descr = "MJPG codec";
                break;
            case "13":
                $descr = "WMV9 codec";
                break;
        }
        $value = snmp_get($device, $oid . $codec, '-Oqv');
        if (!empty($value)) {
            $state_index_id = create_state_index($state);
            if ($state_index_id) {
                $states = array(array($state_index_id, 'enabled', 1, 2, 0), array($state_index_id, 'disabled', 1, 3, 2));
            }
            foreach ($states as $value) {
                $insert = array('state_index_id' => $value[0], 'state_descr' => $value[1], 'state_draw_graph' => $value[2], 'state_value' => $value[3], 'state_generic_value' => $value[4]);
                dbInsert($insert, 'state_translations');
            }
        }
        discover_sensor($valid['sensor'], 'state', $device, $oid . $codec, $codec, $state, $descr, '1', '1', null, null, null, null, $value, 'snmp', $codec);
        create_sensor_to_state_index($device, $state, $codec);
    }
}
示例#4
0
    $psu_oid = '.1.3.6.1.4.1.232.22.2.5.1.1.1.16';
    $psu_state_name = 'hpblmos_psustate';
    $psu_state_descr = 'PSU ';
    $psu_state_oid = '.1.3.6.1.4.1.232.22.2.5.1.1.1.17.';
    $psus = trim(snmp_walk($device, $psu_oid, '-Osqn'));
    foreach (explode("\n", $psus) as $psu) {
        $psu = trim($psu);
        if ($psu) {
            list($oid, $presence) = explode(' ', $psu, 2);
            if ($presence != 2) {
                $split_oid = explode('.', $oid);
                $current_id = $split_oid[count($split_oid) - 1];
                $current_oid = $psu_state_oid . $current_id;
                $descr = $psu_state_descr . $current_id;
                $state = snmp_get($device, $current_oid, '-Oqv');
                if (!empty($state)) {
                    $state_index_id = create_state_index($psu_state_name);
                    if ($state_index_id) {
                        $states = array(array($state_index_id, 'other', 0, 1, 3), array($state_index_id, 'ok', 1, 2, 0), array($state_index_id, 'degraded', 1, 3, 1), array($state_index_id, 'failed', 1, 4, 2));
                        foreach ($states as $value) {
                            $insert = array('state_index_id' => $value[0], 'state_descr' => $value[1], 'state_draw_graph' => $value[2], 'state_value' => $value[3], 'state_generic_value' => $value[4]);
                            dbInsert($insert, 'state_translations');
                        }
                    }
                }
                discover_sensor($valid['sensor'], 'state', $device, $current_oid, $current_id, $psu_state_name, $descr, '1', '1', null, null, null, null, $state, 'snmp', $current_id);
                create_sensor_to_state_index($device, $psu_state_name, $current_id);
            }
        }
    }
}
示例#5
0
    }
    d_echo("QNAP HDD SMART\n");
    for ($i = 1; $i <= $total_disks; $i++) {
        $state = str_replace('"', '', snmp_get($device, $smart_oid . $i, '-Oqv'));
        $smart_name = 'qnap_hdd_smart_' . $i;
        $smart_descr = 'HDD ' . $i . ' SMART';
        switch ($state) {
            case 'Normal':
                $state = 1;
                break;
            case '--':
                $state = 0;
                break;
            case 'Warning':
                $state = 2;
                break;
        }
        if (is_numeric($state)) {
            $state_index_id = create_state_index($smart_name);
            if ($state_index_id !== null) {
                $states = array(array($state_index_id, 'normal', 1, 1, 0), array($state_index_id, 'no disk', 0, 0, 1), array($state_index_id, 'warning', 2, 2, 2));
                foreach ($states as $value) {
                    $insert = array('state_index_id' => $value[0], 'state_descr' => $value[1], 'state_draw_graph' => $value[2], 'state_value' => $value[3], 'state_generic_value' => $value[4]);
                    dbInsert($insert, 'state_translations');
                }
            }
            discover_sensor($valid['sensor'], 'state', $device, $smart_oid . $i, 1, $smart_name, $smart_descr, '1', '1', null, null, null, null, $state, 'snmp', 1);
            create_sensor_to_state_index($device, $smart_name, 1);
        }
    }
}