From c1c26bf83195adcefc7d3ae0c4ba56f850b4f21e Mon Sep 17 00:00:00 2001 From: mchasteen Date: Wed, 25 Feb 2015 15:54:37 -0700 Subject: [PATCH 1/5] Added new sensor - Battery Charge. Added discover and polling for APC UPSes. --- html/includes/graphs/device/charge.inc.php | 9 ++++++ html/includes/graphs/sensor/charge.inc.php | 29 +++++++++++++++++++ html/pages/device/health.inc.php | 3 ++ html/pages/device/health/charge.inc.php | 9 ++++++ html/pages/device/overview.inc.php | 1 + .../device/overview/sensors/charge.inc.php | 10 +++++++ html/pages/health.inc.php | 2 ++ html/pages/health/charge.inc.php | 9 ++++++ includes/defaults.inc.php | 1 + includes/definitions.inc.php | 3 ++ includes/discovery/charge.inc.php | 16 ++++++++++ includes/discovery/charge/apc.inc.php | 29 +++++++++++++++++++ includes/discovery/sensors.inc.php | 1 + includes/polling/sensors.inc.php | 3 +- 14 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 html/includes/graphs/device/charge.inc.php create mode 100644 html/includes/graphs/sensor/charge.inc.php create mode 100644 html/pages/device/health/charge.inc.php create mode 100644 html/pages/device/overview/sensors/charge.inc.php create mode 100644 html/pages/health/charge.inc.php create mode 100755 includes/discovery/charge.inc.php create mode 100644 includes/discovery/charge/apc.inc.php diff --git a/html/includes/graphs/device/charge.inc.php b/html/includes/graphs/device/charge.inc.php new file mode 100644 index 000000000..237803fa8 --- /dev/null +++ b/html/includes/graphs/device/charge.inc.php @@ -0,0 +1,9 @@ + diff --git a/html/includes/graphs/sensor/charge.inc.php b/html/includes/graphs/sensor/charge.inc.php new file mode 100644 index 000000000..153d435dd --- /dev/null +++ b/html/includes/graphs/sensor/charge.inc.php @@ -0,0 +1,29 @@ + diff --git a/html/pages/device/health.inc.php b/html/pages/device/health.inc.php index c204c51e4..eab0ca1ea 100644 --- a/html/pages/device/health.inc.php +++ b/html/pages/device/health.inc.php @@ -5,6 +5,7 @@ $diskio = dbFetchCell("select count(*) from ucd_diskio WHERE device_id = ? $mempools = dbFetchCell("select count(*) from mempools WHERE device_id = ?", array($device['device_id'])); $processor = dbFetchCell("select count(*) from processors WHERE device_id = ?", array($device['device_id'])); +$charge = dbFetchCell("select count(*) from sensors WHERE sensor_class='charge' AND device_id = ?", array($device['device_id'])); $temperatures = dbFetchCell("select count(*) from sensors WHERE sensor_class='temperature' AND device_id = ?", array($device['device_id'])); $humidity = dbFetchCell("select count(*) from sensors WHERE sensor_class='humidity' AND device_id = ?", array($device['device_id'])); $fans = dbFetchCell("select count(*) from sensors WHERE sensor_class='fanspeed' AND device_id = ?", array($device['device_id'])); @@ -20,6 +21,7 @@ if ($processor) { $datas[] = 'processor'; } if ($mempools) { $datas[] = 'mempool'; } if ($storage) { $datas[] = 'storage'; } if ($diskio) { $datas[] = 'diskio'; } +if ($charge) { $datas[] = 'charge'; } if ($temperatures) { $datas[] = 'temperature'; } if ($humidity) { $datas[] = 'humidity'; } if ($fans) { $datas[] = 'fanspeed'; } @@ -30,6 +32,7 @@ if ($power) { $datas[] = 'power'; } if ($dBm) { $datas[] = 'dbm'; } $type_text['overview'] = "Overview"; +$type_text['charge'] = "Battery Charge"; $type_text['temperature'] = "Temperature"; $type_text['humidity'] = "Humidity"; $type_text['mempool'] = "Memory"; diff --git a/html/pages/device/health/charge.inc.php b/html/pages/device/health/charge.inc.php new file mode 100644 index 000000000..7282247bf --- /dev/null +++ b/html/pages/device/health/charge.inc.php @@ -0,0 +1,9 @@ + diff --git a/html/pages/device/overview.inc.php b/html/pages/device/overview.inc.php index 214367f94..0cf9ea045 100644 --- a/html/pages/device/overview.inc.php +++ b/html/pages/device/overview.inc.php @@ -39,6 +39,7 @@ include("overview/storage.inc.php"); if(is_array($entity_state['group']['c6kxbar'])) { include("overview/c6kxbar.inc.php"); } include("overview/toner.inc.php"); +include("overview/sensors/charge.inc.php"); include("overview/sensors/temperatures.inc.php"); include("overview/sensors/humidity.inc.php"); include("overview/sensors/fanspeeds.inc.php"); diff --git a/html/pages/device/overview/sensors/charge.inc.php b/html/pages/device/overview/sensors/charge.inc.php new file mode 100644 index 000000000..bf4097749 --- /dev/null +++ b/html/pages/device/overview/sensors/charge.inc.php @@ -0,0 +1,10 @@ + diff --git a/html/pages/health.inc.php b/html/pages/health.inc.php index cd4663a67..50e1c1b58 100644 --- a/html/pages/health.inc.php +++ b/html/pages/health.inc.php @@ -2,6 +2,7 @@ $datas = array('mempool','processor','storage'); if ($used_sensors['temperature']) $datas[] = 'temperature'; +if ($used_sensors['charge']) $datas[] = 'charge'; if ($used_sensors['humidity']) $datas[] = 'humidity'; if ($used_sensors['fanspeed']) $datas[] = 'fanspeed'; if ($used_sensors['voltage']) $datas[] = 'voltage'; @@ -13,6 +14,7 @@ if ($used_sensors['dBm']) $datas[] = 'dBm'; // FIXME generalize -> static-config ? $type_text['overview'] = "Overview"; $type_text['temperature'] = "Temperature"; +$type_text['charge'] = "Battery Charge"; $type_text['humidity'] = "Humidity"; $type_text['mempool'] = "Memory"; $type_text['storage'] = "Disk Usage"; diff --git a/html/pages/health/charge.inc.php b/html/pages/health/charge.inc.php new file mode 100644 index 000000000..867b50f9e --- /dev/null +++ b/html/pages/health/charge.inc.php @@ -0,0 +1,9 @@ + diff --git a/includes/defaults.inc.php b/includes/defaults.inc.php index b2b386788..c05677ffb 100644 --- a/includes/defaults.inc.php +++ b/includes/defaults.inc.php @@ -563,6 +563,7 @@ $config['discovery_modules']['libvirt-vminfo'] = 1; $config['discovery_modules']['toner'] = 1; $config['discovery_modules']['ucd-diskio'] = 1; $config['discovery_modules']['services'] = 1; +$config['discovery_modules']['charge'] = 1; $config['modules_compat']['rfc1628']['liebert'] = 1; $config['modules_compat']['rfc1628']['netmanplus'] = 1; diff --git a/includes/definitions.inc.php b/includes/definitions.inc.php index 4e279358d..bb202a28e 100644 --- a/includes/definitions.inc.php +++ b/includes/definitions.inc.php @@ -1102,6 +1102,9 @@ $config['graph_types']['device']['storage']['descr'] = 'Filesystem Usage'; $config['graph_types']['device']['temperature']['section'] = 'system'; $config['graph_types']['device']['temperature']['order'] = '0'; $config['graph_types']['device']['temperature']['descr'] = 'temperature'; +$config['graph_types']['device']['charge']['section'] = 'system'; +$config['graph_types']['device']['charge']['order'] = '0'; +$config['graph_types']['device']['charge']['descr'] = 'Battery Charge'; $config['graph_types']['device']['ucd_cpu']['section'] = 'system'; $config['graph_types']['device']['ucd_cpu']['order'] = '0'; $config['graph_types']['device']['ucd_cpu']['descr'] = 'Detailed Processor Usage'; diff --git a/includes/discovery/charge.inc.php b/includes/discovery/charge.inc.php new file mode 100755 index 000000000..cd51da188 --- /dev/null +++ b/includes/discovery/charge.inc.php @@ -0,0 +1,16 @@ + diff --git a/includes/discovery/charge/apc.inc.php b/includes/discovery/charge/apc.inc.php new file mode 100644 index 000000000..85e7443d7 --- /dev/null +++ b/includes/discovery/charge/apc.inc.php @@ -0,0 +1,29 @@ + diff --git a/includes/discovery/sensors.inc.php b/includes/discovery/sensors.inc.php index e2cd160b8..dcde6cb06 100644 --- a/includes/discovery/sensors.inc.php +++ b/includes/discovery/sensors.inc.php @@ -17,5 +17,6 @@ include("includes/discovery/frequencies.inc.php"); include("includes/discovery/current.inc.php"); include("includes/discovery/power.inc.php"); include("includes/discovery/fanspeeds.inc.php"); +include("includes/discovery/charge.inc.php"); ?> diff --git a/includes/polling/sensors.inc.php b/includes/polling/sensors.inc.php index 0fc8a5ae8..0979f8c3f 100644 --- a/includes/polling/sensors.inc.php +++ b/includes/polling/sensors.inc.php @@ -20,7 +20,8 @@ $supported_sensors = array('current' => 'A', 'power' => 'W', 'voltage' => 'V', 'temperature' => 'C', - 'dbm' => 'dBm'); + 'dbm' => 'dBm', + 'charge' => '%'); foreach ($supported_sensors as $sensor_type => $sensor_unit) { From 5de5d9c251a6197eb7125466940e9c614795b901 Mon Sep 17 00:00:00 2001 From: mchasteen Date: Wed, 25 Feb 2015 16:59:08 -0700 Subject: [PATCH 2/5] Added support for non-high precision APC UPS devices. Tested with APC UPS 8000XL. --- includes/discovery/charge/apc.inc.php | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/includes/discovery/charge/apc.inc.php b/includes/discovery/charge/apc.inc.php index 85e7443d7..dce0c298e 100644 --- a/includes/discovery/charge/apc.inc.php +++ b/includes/discovery/charge/apc.inc.php @@ -5,9 +5,10 @@ if ($device['os'] == "apc") $oids = snmp_get($device, "1.3.6.1.4.1.318.1.1.1.2.3.1.0", "-OsqnU", ""); if ($debug) { echo($oids."\n"); } + // Try High-Precision First if ($oids) { - echo("APC UPS Battery Charge"); + echo("APC UPS Battery Charge High Precision"); $type = "apc"; list($oid,$current) = explode(' ',$oids); @@ -22,8 +23,29 @@ if ($device['os'] == "apc") $descr = "Battery Charge"; discover_sensor($valid['sensor'], 'charge', $device, $current_oid, $index, $sensorType, $descr, $precision, '1', $lowlimit, $warnlimit, NULL, $limit , $current_val); - } + } else { // Try to just get capacity + $oids = snmp_get($device, "1.3.6.1.4.1.318.1.1.1.2.2.1.0", "-OsqnU", ""); + if ($debug) { echo($oids."\n"); } + if ($oids) + { + echo("APC UPS Battery Charge"); + $type = "apc"; + list($oid,$current) = explode(' ',$oids); + + $precision = 1; + $sensorType = "apc"; + $current_oid = "1.3.6.1.4.1.318.1.1.1.2.2.1.0"; + $index = 0; + $current_val = $current; + $limit = 100; + $lowlimit = 0; + $warnlimit = 10; + $descr = "Battery Charge"; + + discover_sensor($valid['sensor'], 'charge', $device, $current_oid, $index, $sensorType, $descr, $precision, '1', $lowlimit, $warnlimit, NULL, $limit , $current_val); + } + } } ?> From 4c4e1400440c24f1954bec82f8ba99b0b4efa05e Mon Sep 17 00:00:00 2001 From: mchasteen Date: Fri, 13 Feb 2015 09:48:44 -0700 Subject: [PATCH 3/5] I agree to the conditions of the Contributor Agreement contained in doc/General/Contributing.md. --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 0af7e6432..8b1055196 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -13,6 +13,7 @@ Contributors to LibreNMS: - Søren Friis Rosiak (rosiak) - Mike Rostermund (saaldjormike) - Nicolas Armando (nicearma) +- Micah Chasteen (mchasteen) [1]: http://observium.org/ "Observium web site" From fdf902116e9a08ae6b0e6af8d1fc4d6ecd72519b Mon Sep 17 00:00:00 2001 From: laf Date: Thu, 26 Feb 2015 19:38:47 +0000 Subject: [PATCH 4/5] Updaetd page formatting --- includes/discovery/charge/apc.inc.php | 82 ++++++++++++++------------- 1 file changed, 42 insertions(+), 40 deletions(-) diff --git a/includes/discovery/charge/apc.inc.php b/includes/discovery/charge/apc.inc.php index dce0c298e..48cea1117 100644 --- a/includes/discovery/charge/apc.inc.php +++ b/includes/discovery/charge/apc.inc.php @@ -1,51 +1,53 @@ From a0701fbd25b628bf39def8cb4dbce56a7db081d7 Mon Sep 17 00:00:00 2001 From: laf Date: Thu, 26 Feb 2015 19:48:54 +0000 Subject: [PATCH 5/5] Fixing scrutinizer issue --- includes/discovery/charge/apc.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/discovery/charge/apc.inc.php b/includes/discovery/charge/apc.inc.php index 48cea1117..9ad62bbaf 100644 --- a/includes/discovery/charge/apc.inc.php +++ b/includes/discovery/charge/apc.inc.php @@ -7,7 +7,7 @@ if ($device['os'] == "apc") { } // Try High-Precision First - if ($oids) { + if (!empty($oids)) { echo("APC UPS Battery Charge High Precision"); $type = "apc"; list($oid,$current) = explode(' ',$oids); @@ -30,7 +30,7 @@ if ($device['os'] == "apc") { echo($oids."\n"); } - if ($oids) { + if (!empty($oids)) { echo("APC UPS Battery Charge"); $type = "apc"; list($oid,$current) = explode(' ',$oids);