1<?php 2/* 3 * LibreNMS 4 * 5 * Copyright (c) 2016 Søren Friis Rosiak <sorenrosiak@gmail.com> 6 * This program is free software: you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License as published by the 8 * Free Software Foundation, either version 3 of the License, or (at your 9 * option) any later version. Please see LICENSE.txt at the top level of 10 * the source code distribution for details. 11 */ 12 13$tables = [ 14 // One could add more entrys from deviceGroup, but this will do as a start 15 ['processorDeviceStatusTable', '.1.3.6.1.4.1.674.10892.1.1100.32.1.5.', 'processorDeviceStatusStatus', 'processorDeviceStatusLocationName', 'MIB-Dell-10892'], 16 ['memoryDeviceTable', '.1.3.6.1.4.1.674.10892.1.1100.50.1.5.', 'memoryDeviceStatus', 'memoryDeviceLocationName', 'MIB-Dell-10892'], 17 ['powerSupplyTable', '.1.3.6.1.4.1.674.10892.1.600.12.1.5.', 'powerSupplyStatus', 'powerSupplyLocationName', 'MIB-Dell-10892'], 18 ['intrusionTable', '.1.3.6.1.4.1.674.10892.1.300.70.1.5.', 'intrusionStatus', 'Intrusion', 'MIB-Dell-10892'], 19 ['controllerTable', '.1.3.6.1.4.1.674.10893.1.20.130.1.1.5.', 'controllerState', 'controllerName', 'StorageManagement-MIB', 'dell'], 20 ['arrayDiskTable', '.1.3.6.1.4.1.674.10893.1.20.130.4.1.4.', 'arrayDiskState', 'arrayDiskName', 'StorageManagement-MIB', 'dell'], 21 ['virtualDiskTable', '.1.3.6.1.4.1.674.10893.1.20.140.1.1.4.', 'virtualDiskState', 'virtualDiskDeviceName', 'StorageManagement-MIB', 'dell'], 22 ['batteryTable', '.1.3.6.1.4.1.674.10893.1.20.130.15.1.4.', 'batteryState', 'batteryName', 'StorageManagement-MIB', 'dell'], 23]; 24 25foreach ($tables as $tablevalue) { 26 $temp = snmpwalk_cache_multi_oid($device, $tablevalue[0], [], $tablevalue[4]); 27 $cur_oid = $tablevalue[1]; 28 29 if (is_array($temp)) { 30 //Create State Index 31 $state_name = 'dell.' . $tablevalue[2]; 32 if ($state_name == 'dell.processorDeviceStatusStatus' || $state_name == 'dell.memoryDeviceStatus' || $state_name == 'dell.powerSupplyStatus' || $state_name == 'dell.intrusionStatus') { 33 $states = [ 34 ['value' => 1, 'generic' => 3, 'graph' => 0, 'descr' => 'other'], 35 ['value' => 2, 'generic' => 3, 'graph' => 0, 'descr' => 'unknown'], 36 ['value' => 3, 'generic' => 0, 'graph' => 0, 'descr' => 'ok'], 37 ['value' => 4, 'generic' => 1, 'graph' => 0, 'descr' => 'nonCritical'], 38 ['value' => 5, 'generic' => 2, 'graph' => 0, 'descr' => 'critical'], 39 ['value' => 6, 'generic' => 2, 'graph' => 0, 'descr' => 'nonRecoverable'], 40 ]; 41 } elseif ($state_name == 'dell.controllerState') { 42 $states = [ 43 ['value' => 1, 'generic' => 0, 'graph' => 0, 'descr' => 'ready'], 44 ['value' => 2, 'generic' => 2, 'graph' => 0, 'descr' => 'failed'], 45 ['value' => 3, 'generic' => 0, 'graph' => 0, 'descr' => 'online'], 46 ['value' => 4, 'generic' => 1, 'graph' => 0, 'descr' => 'offline'], 47 ['value' => 6, 'generic' => 2, 'graph' => 0, 'descr' => 'degraded'], 48 ]; 49 } elseif ($state_name == 'dell.arrayDiskState') { 50 $states = [ 51 ['value' => 1, 'generic' => 0, 'graph' => 0, 'descr' => 'ready'], 52 ['value' => 2, 'generic' => 2, 'graph' => 0, 'descr' => 'failed'], 53 ['value' => 3, 'generic' => 0, 'graph' => 0, 'descr' => 'online'], 54 ['value' => 4, 'generic' => 2, 'graph' => 0, 'descr' => 'offline'], 55 ['value' => 5, 'generic' => 2, 'graph' => 0, 'descr' => 'degraded'], 56 ['value' => 6, 'generic' => 1, 'graph' => 0, 'descr' => 'recovering'], 57 ['value' => 7, 'generic' => 1, 'graph' => 0, 'descr' => 'removed'], 58 ['value' => 8, 'generic' => 3, 'graph' => 0, 'descr' => 'non-raid'], 59 ['value' => 9, 'generic' => 1, 'graph' => 0, 'descr' => 'notReady'], 60 ['value' => 10, 'generic' => 1, 'graph' => 0, 'descr' => 'resynching'], 61 ['value' => 11, 'generic' => 1, 'graph' => 0, 'descr' => 'replacing'], 62 ['value' => 12, 'generic' => 1, 'graph' => 0, 'descr' => 'spinningDown'], 63 ['value' => 13, 'generic' => 1, 'graph' => 0, 'descr' => 'rebuild'], 64 ['value' => 14, 'generic' => 1, 'graph' => 0, 'descr' => 'noMedia'], 65 ['value' => 15, 'generic' => 1, 'graph' => 0, 'descr' => 'formatting'], 66 ['value' => 16, 'generic' => 1, 'graph' => 0, 'descr' => 'diagnostics'], 67 ['value' => 17, 'generic' => 2, 'graph' => 0, 'descr' => 'predictiveFailure'], 68 ['value' => 18, 'generic' => 1, 'graph' => 0, 'descr' => 'initializing'], 69 ['value' => 19, 'generic' => 1, 'graph' => 0, 'descr' => 'foreign'], 70 ['value' => 20, 'generic' => 1, 'graph' => 0, 'descr' => 'clear'], 71 ['value' => 21, 'generic' => 2, 'graph' => 0, 'descr' => 'unsupported'], 72 ['value' => 22, 'generic' => 2, 'graph' => 0, 'descr' => 'incompatible'], 73 ['value' => 23, 'generic' => 2, 'graph' => 0, 'descr' => 'readOnly'], 74 ]; 75 } elseif ($state_name == 'dell.virtualDiskState') { 76 $states = [ 77 ['value' => 0, 'generic' => 3, 'graph' => 0, 'descr' => 'unknown'], 78 ['value' => 1, 'generic' => 0, 'graph' => 1, 'descr' => 'ready'], 79 ['value' => 2, 'generic' => 2, 'graph' => 1, 'descr' => 'failed'], 80 ['value' => 3, 'generic' => 1, 'graph' => 1, 'descr' => 'online'], 81 ['value' => 4, 'generic' => 2, 'graph' => 1, 'descr' => 'offline'], 82 ['value' => 6, 'generic' => 2, 'graph' => 1, 'descr' => 'degraded'], 83 ['value' => 7, 'generic' => 1, 'graph' => 1, 'descr' => 'verifying'], 84 ['value' => 15, 'generic' => 1, 'graph' => 1, 'descr' => 'resynching'], 85 ['value' => 16, 'generic' => 1, 'graph' => 1, 'descr' => 'regenerating'], 86 ['value' => 18, 'generic' => 2, 'graph' => 1, 'descr' => 'failedRedundancy'], 87 ['value' => 24, 'generic' => 1, 'graph' => 1, 'descr' => 'rebuilding'], 88 ['value' => 26, 'generic' => 1, 'graph' => 1, 'descr' => 'formatting'], 89 ['value' => 32, 'generic' => 1, 'graph' => 1, 'descr' => 'reconstructing'], 90 ['value' => 35, 'generic' => 1, 'graph' => 1, 'descr' => 'initializing'], 91 ['value' => 36, 'generic' => 1, 'graph' => 1, 'descr' => 'backgroundInit'], 92 ['value' => 52, 'generic' => 2, 'graph' => 1, 'descr' => 'permanentlyDegraded'], 93 ]; 94 } elseif ($state_name == 'dell.batteryState') { 95 $states = [ 96 ['value' => 1, 'generic' => 0, 'graph' => 0, 'descr' => 'ready'], 97 ['value' => 2, 'generic' => 2, 'graph' => 1, 'descr' => 'failed'], 98 ['value' => 6, 'generic' => 2, 'graph' => 1, 'descr' => 'degraded'], 99 ['value' => 7, 'generic' => 1, 'graph' => 1, 'descr' => 'reconditioning'], 100 ['value' => 9, 'generic' => 1, 'graph' => 1, 'descr' => 'high'], 101 ['value' => 10, 'generic' => 1, 'graph' => 1, 'descr' => 'low'], 102 ['value' => 12, 'generic' => 1, 'graph' => 1, 'descr' => 'charging'], 103 ['value' => 21, 'generic' => 2, 'graph' => 1, 'descr' => 'missing'], 104 ['value' => 36, 'generic' => 1, 'graph' => 1, 'descr' => 'learning'], 105 ]; 106 } 107 create_state_index($state_name, $states); 108 109 foreach ($temp as $index => $entry) { 110 if (strpos($index, '54.') === false) { //Because Dell is buggy 111 if ($state_name == 'dell.intrusionStatus') { 112 $descr = $tablevalue[3]; 113 } elseif ($state_name == 'dell.batteryState') { 114 $descr = str_replace('"', '', snmp_get($device, 'batteryConnectionControllerName.' . $index . '', '-Ovqn', $tablevalue[4])) . ' - ' . $temp[$index][$tablevalue[3]]; 115 } elseif ($state_name == 'dell.arrayDiskState') { 116 $descr = str_replace('"', '', snmp_get($device, 'arrayDiskEnclosureConnectionEnclosureName.' . $index . '', '-Ovqn', $tablevalue[4])) . ' - ' . $temp[$index][$tablevalue[3]]; 117 } else { 118 $descr = strip_tags($temp[$index][$tablevalue[3]]); // Use clean as virtualDiskDeviceName is user defined 119 } 120 //Discover Sensors 121 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); 122 123 //Create Sensor To State Index 124 create_sensor_to_state_index($device, $state_name, $index); 125 } 126 } 127 } 128} 129