PageRenderTime 55ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/includes/discovery/current.inc.php

https://github.com/observernms/core
PHP | 228 lines | 193 code | 30 blank | 5 comment | 38 complexity | 5bee8064c097049afbf4f9634a098849 MD5 | raw file
Possible License(s): GPL-3.0, GPL-2.0
  1. <?php
  2. $id = $device['device_id'];
  3. $hostname = $device['hostname'];
  4. $community = $device['community'];
  5. $snmpver = $device['snmpver'];
  6. $port = $device['port'];
  7. $valid_current = array();
  8. echo("Current : ");
  9. ## APC PDU
  10. if ($device['os'] == "apc")
  11. {
  12. $oids = snmp_walk($device, ".1.3.6.1.4.1.318.1.1.12.2.3.1.1.2", "-OsqnU", "");
  13. if ($debug) { echo($oids."\n"); }
  14. $oids = trim($oids);
  15. if ($oids) echo("APC ");
  16. $type = "apc";
  17. $precision = "10";
  18. foreach(explode("\n", $oids) as $data)
  19. {
  20. $data = trim($data);
  21. if ($data)
  22. {
  23. list($oid,$kind) = explode(" ", $data);
  24. $split_oid = explode('.',$oid);
  25. $index = $split_oid[count($split_oid)-1];
  26. $current_oid = "1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.".$index;
  27. $phase_oid = "1.3.6.1.4.1.318.1.1.12.2.3.1.1.4.".$index;
  28. $limit_oid = "1.3.6.1.4.1.318.1.1.12.2.2.1.1.4.".$index;
  29. $lowlimit_oid = "1.3.6.1.4.1.318.1.1.12.2.2.1.1.2.".$index;
  30. $warnlimit_oid = "1.3.6.1.4.1.318.1.1.12.2.2.1.1.3.".$index;
  31. $phase = snmp_get($device, $phase_oid, "-Oqv", "");
  32. $current = snmp_get($device, $current_oid, "-Oqv", "") / $precision;
  33. $limit = snmp_get($device, $limit_oid, "-Oqv", ""); # No / $precision here! Nice, APC!
  34. $lowlimit = snmp_get($device, $lowlimit_oid, "-Oqv", ""); # No / $precision here! Nice, APC!
  35. $warnlimit = snmp_get($device, $warnlimit_oid, "-Oqv", ""); # No / $precision here! Nice, APC!
  36. $descr = "Phase $phase";
  37. echo discover_current($valid_current,$device, $current_oid, $index, $type, $descr, $precision, $lowlimit, $warnlimit, $limit, $current);
  38. }
  39. }
  40. }
  41. ## MGE UPS
  42. if ($device['os'] == "mgeups")
  43. {
  44. echo("MGE ");
  45. $oids = trim(snmp_walk($device, "1.3.6.1.4.1.705.1.7.1", "-OsqnU"));
  46. if ($debug) { echo($oids."\n"); }
  47. list($unused,$numPhase) = explode(' ',$oids);
  48. for($i = 1; $i <= $numPhase;$i++)
  49. {
  50. $current_oid = ".1.3.6.1.4.1.705.1.7.2.1.5.$i";
  51. $descr = "Output"; if ($numPhase > 1) $descr .= " Phase $i";
  52. $current = snmp_get($device, $current_oid, "-Oqv");
  53. if (!$current)
  54. {
  55. $current_oid .= ".0";
  56. $current = snmp_get($device, $current_oid, "-Oqv");
  57. }
  58. $current /= 10;
  59. $type = "mge-ups";
  60. $precision = 10;
  61. $index = $i;
  62. $warnlimit = NULL;
  63. $lowlimit = 0;
  64. $limit = NULL;
  65. echo discover_current($valid_current,$device, $current_oid, $index, $type, $descr, $precision, $lowlimit, $warnlimit, $limit, $current);
  66. }
  67. $oids = trim(snmp_walk($device, "1.3.6.1.4.1.705.1.6.1", "-OsqnU"));
  68. if ($debug) { echo($oids."\n"); }
  69. list($unused,$numPhase) = explode(' ',$oids);
  70. for($i = 1; $i <= $numPhase;$i++)
  71. {
  72. $current_oid = ".1.3.6.1.4.1.705.1.6.2.1.6.$i";
  73. $descr = "Input"; if ($numPhase > 1) $descr .= " Phase $i";
  74. $current = snmp_get($device, $current_oid, "-Oqv");
  75. if (!$current)
  76. {
  77. $current_oid .= ".0";
  78. $current = snmp_get($device, $current_oid, "-Oqv");
  79. }
  80. $current /= 10;
  81. $type = "mge-ups";
  82. $precision = 10;
  83. $index = 100+$i;
  84. $warnlimit = NULL;
  85. $lowlimit = 0;
  86. $limit = NULL;
  87. echo discover_current($valid_current,$device, $current_oid, $index, $type, $descr, $precision, $lowlimit, $warnlimit, $limit, $current);
  88. }
  89. }
  90. ## Riello UPS
  91. if ($device['os'] == "netmanplus")
  92. {
  93. echo("NetMan Plus ");
  94. $oids = snmp_walk($device, "1.3.6.1.2.1.33.1.2.6", "-Osqn", "UPS-MIB");
  95. if ($debug) { echo($oids."\n"); }
  96. $oids = trim($oids);
  97. foreach(explode("\n", $oids) as $data)
  98. {
  99. $data = trim($data);
  100. if ($data)
  101. {
  102. list($oid,$descr) = explode(" ", $data,2);
  103. $split_oid = explode('.',$oid);
  104. $current_id = $split_oid[count($split_oid)-1];
  105. $current_oid = "1.3.6.1.2.1.33.1.2.6.$current_id";
  106. $precision = 10;
  107. $current = snmp_get($device, $current_oid, "-O vq") / $precision;
  108. #$current = trim(shell_exec($config['snmpget'] . " -O qv -$snmpver -c $community $hostname:$port $current_oid")) / $precision;
  109. $descr = "Battery" . (count(explode("\n",$oids)) == 1 ? '' : ' ' . ($current_id+1));
  110. $type = "netmanplus";
  111. $index = 500+$current_id;
  112. discover_current($valid_current,$device, $current_oid, $index, $type, $descr, $precision, NULL, NULL, NULL, $current);
  113. }
  114. }
  115. $oids = trim(snmp_walk($device, "1.3.6.1.2.1.33.1.4.3.0", "-OsqnU"));
  116. if ($debug) { echo($oids."\n"); }
  117. list($unused,$numPhase) = explode(' ',$oids);
  118. for($i = 1; $i <= $numPhase;$i++)
  119. {
  120. $current_oid = ".1.3.6.1.2.1.33.1.4.4.1.3.$i";
  121. $descr = "Output"; if ($numPhase > 1) $descr .= " Phase $i";
  122. $current = snmp_get($device, $current_oid, "-Oqv");
  123. $type = "netmanplus";
  124. $precision = 1;
  125. $index = $i;
  126. echo discover_current($valid_current,$device, $current_oid, $index, $type, $descr, $precision, NULL, NULL, NULL, $current);
  127. }
  128. $oids = trim(snmp_walk($device, "1.3.6.1.2.1.33.1.3.2.0", "-OsqnU"));
  129. if ($debug) { echo($oids."\n"); }
  130. list($unused,$numPhase) = explode(' ',$oids);
  131. for($i = 1; $i <= $numPhase;$i++)
  132. {
  133. $current_oid = "1.3.6.1.2.1.33.1.3.3.1.4.$i";
  134. $descr = "Input"; if ($numPhase > 1) $descr .= " Phase $i";
  135. $current = snmp_get($device, $current_oid, "-Oqv");
  136. $type = "netmanplus";
  137. $precision = 1;
  138. $index = 100+$i;
  139. echo discover_current($valid_current,$device, $current_oid, $index, $type, $descr, $precision, NULL, NULL, NULL, $current);
  140. }
  141. $oids = trim(snmp_walk($device, "1.3.6.1.2.1.33.1.5.2.0", "-OsqnU"));
  142. if ($debug) { echo($oids."\n"); }
  143. list($unused,$numPhase) = explode(' ',$oids);
  144. for($i = 1; $i <= $numPhase;$i++)
  145. {
  146. $current_oid = "1.3.6.1.2.1.33.1.5.3.1.3.$i";
  147. $descr = "Bypass"; if ($numPhase > 1) $descr .= " Phase $i";
  148. $current = snmp_get($device, $current_oid, "-Oqv");
  149. $type = "netmanplus";
  150. $precision = 1;
  151. $index = 200+$i;
  152. echo discover_current($valid_current,$device, $current_oid, $index, $type, $descr, $precision, NULL, NULL, NULL, $current);
  153. }
  154. }
  155. if ($device['os'] == "gamatronicups") {
  156. for($i = 1; $i <= 3 ;$i++) {
  157. $current_oid = "GAMATRONIC-MIB::gamatronicLTD.5.4.1.1.3.$i";
  158. $descr = "Input Phase $i";
  159. $current = snmp_get($device, $current_oid, "-Oqv");
  160. $type = "gamatronicups";
  161. $precision = 1;
  162. $index = $i;
  163. $lowlimit = 0;
  164. $warnlimit = NULL;
  165. $limit = NULL;
  166. echo discover_current($valid_current,$device, $current_oid, $index, $type, $descr, $precision, $lowlimit, $warnlimit, $limit, $current);
  167. }
  168. for($i = 1; $i <= 3 ;$i++) {
  169. $current_oid = "GAMATRONIC-MIB::gamatronicLTD.5.5.1.1.3.$i";
  170. $descr = "Output Phase $i";
  171. $current = snmp_get($device, $current_oid, "-Oqv");
  172. $type = "gamatronicups";
  173. $precision = 1;
  174. $index = 100+$i;
  175. $lowlimit = 0;
  176. $warnlimit = NULL;
  177. $limit = NULL;
  178. echo discover_current($valid_current,$device, $current_oid, $index, $type, $descr, $precision, $lowlimit, $warnlimit, $limit, $current);
  179. }
  180. }
  181. ## Delete removed sensors
  182. if($debug) { print_r($valid_current); }
  183. $sql = "SELECT * FROM current WHERE device_id = '".$device['device_id']."'";
  184. if ($query = mysql_query($sql))
  185. {
  186. while ($test_current = mysql_fetch_array($query))
  187. {
  188. $index = $test_current['current_index'];
  189. $type = $test_current['current_type'];
  190. if($debug) { echo("$type -> $index\n"); }
  191. if(!$valid_current[$type][$index]) {
  192. echo("-");
  193. mysql_query("DELETE FROM `current` WHERE current_id = '" . $test_current['current_id'] . "'");
  194. }
  195. }
  196. }
  197. unset($valid_current); echo("\n");
  198. ?>