Observium_CE/includes/discovery/sensors/viptela-hardware.inc.php

174 lines
9.2 KiB
PHP

<?php
/**
* Observium
*
* This file is part of Observium.
*
* @package observium
* @subpackage discovery
* @copyright (C) Adam Armstrong
*
*
*/
// VIPTELA-HARDWARE::hardwareEnvironmentStatus.temperatureSensors."DRAM".0 = INTEGER: oK(0)
// VIPTELA-HARDWARE::hardwareEnvironmentStatus.temperatureSensors."Board".0 = INTEGER: oK(0)
// VIPTELA-HARDWARE::hardwareEnvironmentStatus.temperatureSensors."Board".1 = INTEGER: oK(0)
// VIPTELA-HARDWARE::hardwareEnvironmentStatus.temperatureSensors."Board".2 = INTEGER: oK(0)
// VIPTELA-HARDWARE::hardwareEnvironmentStatus.temperatureSensors."Board".3 = INTEGER: oK(0)
// VIPTELA-HARDWARE::hardwareEnvironmentStatus.temperatureSensors."CPU junction".0 = INTEGER: oK(0)
// VIPTELA-HARDWARE::hardwareEnvironmentStatus.fans."Tray 0 fan".0 = INTEGER: oK(0)
// VIPTELA-HARDWARE::hardwareEnvironmentStatus.fans."Tray 0 fan".1 = INTEGER: oK(0)
// VIPTELA-HARDWARE::hardwareEnvironmentStatus.pEM."Power supply".0 = INTEGER: oK(0)
// VIPTELA-HARDWARE::hardwareEnvironmentStatus.pEM."Power supply".1 = INTEGER: oK(0)
// VIPTELA-HARDWARE::hardwareEnvironmentStatus.pIM."Interface module".0 = INTEGER: oK(0)
// VIPTELA-HARDWARE::hardwareEnvironmentStatus.uSB."External USB controller".0 = INTEGER: down(1)
// VIPTELA-HARDWARE::hardwareEnvironmentStatus.lED."Status LED".0 = INTEGER: oK(0)
// VIPTELA-HARDWARE::hardwareEnvironmentStatus.lED."System LED".0 = INTEGER: oK(0)
// VIPTELA-HARDWARE::hardwareEnvironmentMeasurement.temperatureSensors."DRAM".0 = STRING: 35 degrees C/96 degrees F
// VIPTELA-HARDWARE::hardwareEnvironmentMeasurement.temperatureSensors."Board".0 = STRING: 34 degrees C/93 degrees F
// VIPTELA-HARDWARE::hardwareEnvironmentMeasurement.temperatureSensors."Board".1 = STRING: 37 degrees C/99 degrees F
// VIPTELA-HARDWARE::hardwareEnvironmentMeasurement.temperatureSensors."Board".2 = STRING: 35 degrees C/95 degrees F
// VIPTELA-HARDWARE::hardwareEnvironmentMeasurement.temperatureSensors."Board".3 = STRING: 36 degrees C/96 degrees F
// VIPTELA-HARDWARE::hardwareEnvironmentMeasurement.temperatureSensors."CPU junction".0 = STRING: 52 degrees C/126 degrees F
// VIPTELA-HARDWARE::hardwareEnvironmentMeasurement.fans."Tray 0 fan".0 = STRING: Spinning at 5160 RPM
// VIPTELA-HARDWARE::hardwareEnvironmentMeasurement.fans."Tray 0 fan".1 = STRING: Spinning at 5040 RPM
// VIPTELA-HARDWARE::hardwareEnvironmentMeasurement.pEM."Power supply".0 = STRING: Powered On: yes; Fault: no
// VIPTELA-HARDWARE::hardwareEnvironmentMeasurement.pEM."Power supply".1 = STRING: Powered On: yes; Fault: no
// VIPTELA-HARDWARE::hardwareEnvironmentMeasurement.pIM."Interface module".0 = STRING: Present: yes; Powered On: yes; Fault: no
// VIPTELA-HARDWARE::hardwareEnvironmentMeasurement.uSB."External USB controller".0 = STRING: In reset
// VIPTELA-HARDWARE::hardwareEnvironmentMeasurement.lED."Status LED".0 = STRING: Green
// VIPTELA-HARDWARE::hardwareEnvironmentMeasurement.lED."System LED".0 = STRING: Green
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsFanSpeedNormal.board.0 = Gauge32: 64
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsFanSpeedNormal.board.1 = Gauge32: 64
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsFanSpeedNormal.board.2 = Gauge32: 64
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsFanSpeedNormal.board.3 = Gauge32: 64
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsFanSpeedNormal.cPU-Junction.0 = Gauge32: 79
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsFanSpeedNormal.dRAM.0 = Gauge32: 64
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsYellowAlarmNormal.board.0 = Gauge32: 65
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsYellowAlarmNormal.board.1 = Gauge32: 65
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsYellowAlarmNormal.board.2 = Gauge32: 65
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsYellowAlarmNormal.board.3 = Gauge32: 65
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsYellowAlarmNormal.cPU-Junction.0 = Gauge32: 80
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsYellowAlarmNormal.dRAM.0 = Gauge32: 65
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsYellowAlarmBadFan.board.0 = Gauge32: 60
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsYellowAlarmBadFan.board.1 = Gauge32: 60
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsYellowAlarmBadFan.board.2 = Gauge32: 60
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsYellowAlarmBadFan.board.3 = Gauge32: 60
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsYellowAlarmBadFan.cPU-Junction.0 = Gauge32: 75
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsYellowAlarmBadFan.dRAM.0 = Gauge32: 60
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsRedAlarmNormal.board.0 = Gauge32: 80
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsRedAlarmNormal.board.1 = Gauge32: 80
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsRedAlarmNormal.board.2 = Gauge32: 80
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsRedAlarmNormal.board.3 = Gauge32: 80
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsRedAlarmNormal.cPU-Junction.0 = Gauge32: 95
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsRedAlarmNormal.dRAM.0 = Gauge32: 80
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsRedAlarmBadFan.board.0 = Gauge32: 75
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsRedAlarmBadFan.board.1 = Gauge32: 75
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsRedAlarmBadFan.board.2 = Gauge32: 75
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsRedAlarmBadFan.board.3 = Gauge32: 75
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsRedAlarmBadFan.cPU-Junction.0 = Gauge32: 90
// VIPTELA-HARDWARE::hardwareTemperatureThresholdsRedAlarmBadFan.dRAM.0 = Gauge32: 75
$oids = snmpwalk_cache_oid($device, "hardwareEnvironmentTable", [], "VIPTELA-HARDWARE");
$oids_limits = snmpwalk_cache_oid($device, "hardwareTemperatureThresholdsTable", [], "VIPTELA-HARDWARE");
print_debug_vars($oids);
print_debug_vars($oids_limits);
foreach ($oids as $named_index => $entry) {
[$hw_class, $hw_item, $hw_index] = explode('.', $named_index, 3);
// Convert to numeric index
$index = '.' . snmp_string_to_oid($hw_item) . '.' . $hw_index;
// SYNTAX INTEGER {temperatureSensors(0),fans(1),pEM(2),pIM(3),uSB(4),lED(5),nIM(6)}
switch ($hw_class) {
case 'temperatureSensors':
$index = '0' . $index;
$descr = $hw_item;
if ($descr === 'Board') {
$descr .= ' ' . $hw_index;
}
$oid_name = 'hardwareEnvironmentMeasurement';
$oid_num = '.1.3.6.1.4.1.41916.3.1.2.1.5.' . $index;
$scale = 1;
$value = $entry[$oid_name];
// Detect limits
$hw_index = strtolower(str_replace(' ', '-', $hw_item)) . '.' . $hw_index;
$limits = [];
foreach ($oids_limits as $limit_index => $limit_entry) {
$limit_index = strtolower($limit_index);
if ($hw_index == $limit_index) {
$limits['limit_high'] = $limit_entry['hardwareTemperatureThresholdsRedAlarmNormal'];
$limits['limit_high_warn'] = $limit_entry['hardwareTemperatureThresholdsYellowAlarmNormal'];
break;
}
}
discover_sensor_ng($device, 'temperature', $mib, $oid_name, $oid_num, $index, $descr, $scale, $value, $limits);
break;
case 'fans':
$index = '1' . $index;
$descr = $hw_item . ' ' . $hw_index;
$oid_name = 'hardwareEnvironmentMeasurement';
$oid_num = '.1.3.6.1.4.1.41916.3.1.2.1.5.' . $index;
$scale = 1;
$value = $entry[$oid_name];
discover_sensor_ng($device, 'fanspeed', $mib, $oid_name, $oid_num, $index, $descr, $scale, $value);
break;
case 'pEM':
$index = '2' . $index;
$descr = $hw_item . ' ' . $hw_index;
$oid_name = 'hardwareEnvironmentStatus';
$oid_num = '.1.3.6.1.4.1.41916.3.1.2.1.4.' . $index;
$type = 'hardwareEnvironmentStatus';
$value = $entry[$oid_name];
discover_status_ng($device, $mib, $oid_name, $oid_num, $index, $type, $descr, $value, ['entPhysicalClass' => 'powerSupply']);
break;
case 'pIM':
$index = '3' . $index;
$descr = $hw_item;
$oid_name = 'hardwareEnvironmentStatus';
$oid_num = '.1.3.6.1.4.1.41916.3.1.2.1.4.' . $index;
$type = 'hardwareEnvironmentStatus';
$value = $entry[$oid_name];
discover_status_ng($device, $mib, $oid_name, $oid_num, $index, $type, $descr, $value, ['entPhysicalClass' => 'other']);
break;
case 'uSB':
$index = '4' . $index;
break;
case 'lED':
$index = '5' . $index;
$descr = $hw_item;
$oid_name = 'hardwareEnvironmentStatus';
$oid_num = '.1.3.6.1.4.1.41916.3.1.2.1.4.' . $index;
$type = 'hardwareEnvironmentStatus';
$value = $entry[$oid_name];
discover_status_ng($device, $mib, $oid_name, $oid_num, $index, $type, $descr, $value, ['entPhysicalClass' => 'device']);
break;
case 'nIM':
$index = '6' . $index;
break;
}
}
unset($oids, $oids_limits, $index);
// EOF