Commit version 24.12.13800

This commit is contained in:
2025-01-06 17:35:06 -05:00
parent b7f6a79c2c
commit 55d9218816
6133 changed files with 4239740 additions and 1374287 deletions

View File

@ -5,44 +5,36 @@
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
* @package observium
* @subpackage poller
* @copyright (C) Adam Armstrong
*
*/
global $agent_sensors;
if ($agent_data['areca']['hw'] != '')
{
foreach (explode("\n", $agent_data['areca']['hw']) as $line)
{
list($key,$content) = explode(':', $line, 2);
$areca[trim($key)] = trim($content);
}
if ($agent_data['areca']['hw'] != '') {
foreach (explode("\n", $agent_data['areca']['hw']) as $line) {
[$key, $content] = explode(':', $line, 2);
$areca[trim($key)] = trim($content);
}
foreach ($areca as $key => $value)
{
if ($key == "Battery Status")
{
$value = str_replace('%','',$value);
discover_sensor('capacity', $device, '', 0, 'areca', "Areca Battery Status", 1, $value, array(), 'agent');
$agent_sensors['capacity']['areca'][0] = array('description' => "Areca Battery Status", 'current' => $value, 'index' => 0);
foreach ($areca as $key => $value) {
if ($key == "Battery Status") {
$value = str_replace('%', '', $value);
discover_sensor('capacity', $device, '', 0, 'areca', "Areca Battery Status", 1, $value, [], 'agent');
$agent_sensors['capacity']['areca'][0] = ['description' => "Areca Battery Status", 'current' => $value, 'index' => 0];
} elseif ($key == "Fan#1 Speed (RPM)") {
// Currently doesn't handle more than one fan (but I know of no Areca controllers with >1 fan)
// Could be done with a regex like below.
discover_sensor('fanspeed', $device, '', 1, 'areca', "Areca Fan #1", 1, $value, [], 'agent');
$agent_sensors['fanspeed']['areca'][1] = ['description' => "Areca Fan #1", 'current' => $value, 'index' => 1];
} elseif (preg_match("/^HDD\ .*\ Temp\./", $key)) {
// Temperature value. Currently not handled as this can be retrieved over SNMP, unlike fan and battery status (for SATA controllers).
}
}
elseif ($key == "Fan#1 Speed (RPM)")
{
// Currently doesn't handle more than one fan (but I know of no Areca controllers with >1 fan)
// Could be done with a regex like below.
discover_sensor('fanspeed', $device, '', 1, 'areca', "Areca Fan #1", 1, $value, array(), 'agent');
$agent_sensors['fanspeed']['areca'][1] = array('description' => "Areca Fan #1", 'current' => $value, 'index' => 1);
}
elseif (preg_match("/^HDD\ .*\ Temp\./", $key))
{
// Temperature value. Currently not handled as this can be retrieved over SNMP, unlike fan and battery status (for SATA controllers).
}
}
unset($areca);
unset($areca);
}
// EOF

View File

@ -5,9 +5,9 @@
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
* @package observium
* @subpackage poller
* @copyright (C) Adam Armstrong
*
*/
@ -16,47 +16,44 @@ unset($agent_data['diskstat']);
$timestamp = 'N';
echo 'diskstats ';
print_cli_data("Diskstats");
foreach (explode("\n", $diskstat) as $line)
{
if (is_numeric($line))
{
// timestamp
//$timestamp = $line;
} else {
$data = preg_split('/\\s+/', $line);
foreach (explode("\n", $diskstat) as $line) {
if (is_numeric($line)) {
// timestamp
//$timestamp = $line;
} else {
$data = preg_split('/\\s+/', $line);
if (count($data) == 15)
{
$disk_name = $data[3];
$readcount = $data[4];
$readcount_merged = $data[5];
$readcount_sectors = $data[6];
$time_reading = $data[7];
$writecount = $data[8];
$writecount_merged = $data[9];
$writecount_sectors = $data[10];
$time_writing = $data[11];
$pending_ios = $data[12];
$time_io = $data[13];
$time_wio = $data[14];
if (count($data) == 15) {
$disk_name = $data[3];
$readcount = $data[4];
$readcount_merged = $data[5];
$readcount_sectors = $data[6];
$time_reading = $data[7];
$writecount = $data[8];
$writecount_merged = $data[9];
$writecount_sectors = $data[10];
$time_writing = $data[11];
$pending_ios = $data[12];
$time_io = $data[13];
$time_wio = $data[14];
rrdtool_update_ng($device, 'diskstat', array(
'readcount' => $readcount,
'readcount_merged' => $readcount_merged,
'readcount_sectors' => $readcount_sectors,
'time_reading' => $time_reading,
'writecount' => $writecount,
'writecount_merged' => $writecount_merged,
'writecount_sectors' => $writecount_sectors,
'time_writing' => $time_writing,
'pending_ios' => $pending_ios,
'time_io' => $time_io,
'time_wio' => $time_wio,
), $disk_name);
rrdtool_update_ng($device, 'diskstat', [
'readcount' => $readcount,
'readcount_merged' => $readcount_merged,
'readcount_sectors' => $readcount_sectors,
'time_reading' => $time_reading,
'writecount' => $writecount,
'writecount_merged' => $writecount_merged,
'writecount_sectors' => $writecount_sectors,
'time_writing' => $time_writing,
'pending_ios' => $pending_ios,
'time_io' => $time_io,
'time_wio' => $time_wio,
], $disk_name);
}
}
}
}
unset($data, $diskstats);

View File

@ -5,19 +5,18 @@
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
* @package observium
* @subpackage poller
* @copyright (C) Adam Armstrong
*
*/
$distro = $agent_data['distro'];
unset($agent_data['distro']);
foreach (explode("\n", $distro) as $line)
{
list($field,$contents) = explode("=", $line, 2);
$agent_data['distro'][$field] = trim($contents);
foreach (explode("\n", $distro) as $line) {
[$field, $contents] = explode("=", $line, 2);
$agent_data['distro'][$field] = trim($contents);
}
unset($distro);

View File

@ -5,19 +5,18 @@
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
* @package observium
* @subpackage poller
* @copyright (C) Adam Armstrong
*
*/
$dmi = $agent_data['dmi'];
unset($agent_data['dmi']);
foreach (explode("\n",$dmi) as $line)
{
list($field,$contents) = explode("=",$line,2);
$agent_data['dmi'][$field] = trim($contents);
foreach (explode("\n", $dmi) as $line) {
[$field, $contents] = explode("=", $line, 2);
$agent_data['dmi'][$field] = trim($contents);
}
unset($dmi);

View File

@ -5,9 +5,9 @@
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
* @package observium
* @subpackage poller
* @copyright (C) Adam Armstrong
*
*/
@ -24,60 +24,46 @@
// mc0: csrow0: ch0: 4 Corrected Errors
// mc0: csrow0: ch1: 0 Corrected Errors
if ($agent_data['edac'] != '')
{
echo('EDAC ');
if ($agent_data['edac'] != '') {
echo('EDAC ');
foreach (explode("\n",$agent_data['edac']) as $line)
{
list($mc,$data) = explode(': ',$line,2);
// mc0: 0 Uncorrected Errors with no DIMM info
if (preg_match("/^(.*) Uncorrected Errors with no DIMM info$/", $data, $matches))
{
$edac[$mc]['row']['unknown']['all']['ue'] = $matches[1];
}
// mc0: 0 Corrected Errors with no DIMM info
elseif (preg_match("/^(.*) Corrected Errors with no DIMM info$/", $data, $matches))
{
$edac[$mc]['row']['unknown']['all']['ce'] = $matches[1];
}
// mc0: csrow0: 0 Uncorrected Errors
elseif (preg_match("/^csrow(.*): (.*) Uncorrected Errors$/", $data, $matches))
{
$edac[$mc]['row'][$matches[1]]['all']['ue'] = $matches[2];
}
// mc0: csrow0: CPU#0Channel#1_DIMM#0: 0 Corrected Errors
elseif (preg_match("/^csrow(.*): (.*): (.*) Corrected Errors$/", $data, $matches))
{
$edac[$mc]['row'][$matches[1]][$matches[2]]['ce'] = $matches[3];
$edac_name[$mc]['rowname'][$matches[1]][$matches[2]] = $matches[2];
}
}
set_dev_attrib($device, 'edac_rownames', serialize($edac_name));
$graphs['edac_errors'] = TRUE;
foreach ($edac as $mc => $data)
{
foreach ($data['row'] as $row => $channels)
{
foreach ($channels as $channel => $errors)
{
foreach (array('ce','ue') as $errortype)
{
if (isset($errors[$errortype]))
{
$row_id = ($row === 'unknown' ? 'unknown' : "csrow$row"); // Yes, ===, otherwise PHP thinks unknown means 0.
rrdtool_update_ng($device, 'edac-errors', array('errors' => $errors[$errortype]), "$mc-$row_id-$channel-$errortype");
}
foreach (explode("\n", $agent_data['edac']) as $line) {
[$mc, $data] = explode(': ', $line, 2);
// mc0: 0 Uncorrected Errors with no DIMM info
if (preg_match("/^(.*) Uncorrected Errors with no DIMM info$/", $data, $matches)) {
$edac[$mc]['row']['unknown']['all']['ue'] = $matches[1];
} // mc0: 0 Corrected Errors with no DIMM info
elseif (preg_match("/^(.*) Corrected Errors with no DIMM info$/", $data, $matches)) {
$edac[$mc]['row']['unknown']['all']['ce'] = $matches[1];
} // mc0: csrow0: 0 Uncorrected Errors
elseif (preg_match("/^csrow(.*): (.*) Uncorrected Errors$/", $data, $matches)) {
$edac[$mc]['row'][$matches[1]]['all']['ue'] = $matches[2];
} // mc0: csrow0: CPU#0Channel#1_DIMM#0: 0 Corrected Errors
elseif (preg_match("/^csrow(.*): (.*): (.*) Corrected Errors$/", $data, $matches)) {
$edac[$mc]['row'][$matches[1]][$matches[2]]['ce'] = $matches[3];
$edac_name[$mc]['rowname'][$matches[1]][$matches[2]] = $matches[2];
}
}
set_dev_attrib($device, 'edac_rownames', serialize($edac_name));
$graphs['edac_errors'] = TRUE;
foreach ($edac as $mc => $data) {
foreach ($data['row'] as $row => $channels) {
foreach ($channels as $channel => $errors) {
foreach (['ce', 'ue'] as $errortype) {
if (isset($errors[$errortype])) {
$row_id = ($row === 'unknown' ? 'unknown' : "csrow$row"); // Yes, ===, otherwise PHP thinks unknown means 0.
rrdtool_update_ng($device, 'edac-errors', ['errors' => $errors[$errortype]], "$mc-$row_id-$channel-$errortype");
}
}
}
}
}
}
}
} else {
// No more EDAC app; remove row names from DB
del_dev_attrib($device, 'edac_rownames');
// No more EDAC app; remove row names from DB
del_dev_attrib($device, 'edac_rownames');
}
unset($edac, $edac_name);

View File

@ -1,5 +1,4 @@
<?php
/**
* Observium
*
@ -7,50 +6,45 @@
*
* @package observium
* @subpackage poller
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
* @copyright (C) Adam Armstrong
*
*/
global $agent_sensors;
if ($agent_data['array'] != '|')
{
$items = explode("\n", $agent_data['hdarray']);
echo "hdarray: " . print_r($items);
if (count($items))
{
foreach ($items as $item)
{
list($param, $status) = explode('=', $item, 2);
$itemcount++; // Note this is not best index
switch ($status)
{
case 'Ok':
$istatus = 1;
break;
case 'Non-Critical':
// Warn
$istatus = 2;
break;
default:
// Fail
$istatus = 0;
}
echo "Status: $status istatus: $istatus";
if ($param == 'Controller Status')
{
discover_status($device, '', $itemcount, 'unix-agent-state', $param, $istatus, array('entPhysicalClass' => 'controller'), 'agent');
$agent_sensors['state']['unix-agent-state'][$itemcount] = array('description' => $param, 'current' => $istatus, 'index' => $itemcount);
}
elseif (preg_match('/^Drive \d/', $param))
{
discover_status($device, '', $itemcount, 'unix-agent-state', $param, $istatus, array('entPhysicalClass' => 'storage'), 'agent');
$agent_sensors['state']['unix-agent-state'][$itemcount] = array('description' => $param, 'current' => $istatus, 'index' => $itemcount);
}
if ($agent_data['array'] !== '|') {
$items = explode("\n", $agent_data['hdarray']);
if (OBS_DEBUG) {
echo "hdarray: " . print_r($items);
}
if (safe_count($items)) {
foreach ($items as $item) {
[ $param, $status ] = explode('=', $item, 2);
$itemcount++; // Note this is not best index
switch ($status) {
case 'Ok':
$istatus = 1;
break;
case 'Non-Critical':
// Warn
$istatus = 2;
break;
default:
// Fail
$istatus = 0;
}
echo "Status: $status istatus: $istatus";
if ($param == 'Controller Status') {
discover_status($device, '', $itemcount, 'unix-agent-state', $param, $istatus, ['entPhysicalClass' => 'controller'], 'agent');
$agent_sensors['state']['unix-agent-state'][$itemcount] = ['description' => $param, 'current' => $istatus, 'index' => $itemcount];
} elseif (preg_match('/^Drive \S/', $param)) {
discover_status($device, '', $itemcount, 'unix-agent-state', $param, $istatus, ['entPhysicalClass' => 'storage'], 'agent');
$agent_sensors['state']['unix-agent-state'][$itemcount] = ['description' => $param, 'current' => $istatus, 'index' => $itemcount];
}
}
echo PHP_EOL;
}
echo PHP_EOL;
}
}
// EOF

View File

@ -5,36 +5,33 @@
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
* @package observium
* @subpackage poller
* @copyright (C) Adam Armstrong
*
*/
global $agent_sensors;
if ($agent_data['hddtemp'] != '|')
{
if ($agent_data['hddtemp'] != '|') {
$agent_data['hddtemp'] = str_replace("\x10\x80", '', $agent_data['hddtemp']);
$agent_data['hddtemp'] = str_replace("\x10\x80", '', $agent_data['hddtemp']);
$disks = explode('||',trim($agent_data['hddtemp'],'|'));
$disks = explode('||', trim($agent_data['hddtemp'], '|'));
if (count($disks))
{
echo "hddtemp: ";
foreach ($disks as $disk)
{
list($blockdevice, $descr, $value, $unit) = explode('|', $disk, 4);
# FIXME: should not use diskcount as index; drive serial preferred but hddtemp does not supply it.
# Device name itself is just as useless as the actual position however.
# In case of change in index, please provide an rrd-rename upgrade-script.
++$diskcount;
discover_sensor('temperature', $device, '', $diskcount, 'hddtemp', "$blockdevice: $descr", 1, $value, array(), 'agent');
$agent_sensors['temperature']['hddtemp'][$diskcount] = array('description' => "$blockdevice: $descr", 'current' => $value, 'index' => $diskcount);
if (count($disks)) {
echo "hddtemp: ";
foreach ($disks as $disk) {
[$blockdevice, $descr, $value, $unit] = explode('|', $disk, 4);
# FIXME: should not use diskcount as index; drive serial preferred but hddtemp does not supply it.
# Device name itself is just as useless as the actual position however.
# In case of change in index, please provide an rrd-rename upgrade-script.
++$diskcount;
discover_sensor('temperature', $device, '', $diskcount, 'hddtemp', "$blockdevice: $descr", 1, $value, [], 'agent');
$agent_sensors['temperature']['hddtemp'][$diskcount] = ['description' => "$blockdevice: $descr", 'current' => $value, 'index' => $diskcount];
}
echo "\n";
}
echo "\n";
}
}
// EOF

View File

@ -5,21 +5,20 @@
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
* @package observium
* @subpackage poller
* @copyright (C) Adam Armstrong
*
*/
global $agent_sensors;
if ($agent_data['ipmitool']['sensor'] != '|')
{
echo "IPMI: ";
if ($agent_data['ipmitool']['sensor'] != '|') {
echo "IPMI: ";
// Parse function returns array, don't overwrite this array, other agent modules could also have filled this out, so merge!
// I'm not sure about having this code here. We should pass this array to a function that puts it in the right place and merges.
$agent_sensors = array_merge_recursive($agent_sensors,parse_ipmitool_sensor($device, $agent_data['ipmitool']['sensor'], 'agent'));
// Parse function returns array, don't overwrite this array, other agent modules could also have filled this out, so merge!
// I'm not sure about having this code here. We should pass this array to a function that puts it in the right place and merges.
$agent_sensors = array_merge_recursive($agent_sensors, parse_ipmitool_sensor($device, $agent_data['ipmitool']['sensor'], 'agent'));
}
// EOF

View File

@ -5,26 +5,25 @@
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
* @package observium
* @subpackage poller
* @copyright (C) Adam Armstrong
*
*/
$ksm = $agent_data['ksm'];
unset($agent_data['ksm']);
foreach (explode("\n",$ksm) as $line)
{
list($field,$contents) = explode("=",$line,2);
$agent_data['ksm'][$field] = trim($contents);
foreach (explode("\n", $ksm) as $line) {
[$field, $contents] = explode("=", $line, 2);
$agent_data['ksm'][$field] = trim($contents);
}
rrdtool_update_ng($device, 'ksm-pages', array(
rrdtool_update_ng($device, 'ksm-pages', [
'pagesShared' => $agent_data['ksm']['pages_shared'],
'pagesSharing' => $agent_data['ksm']['pages_sharing'],
'pagesUnshared' => $agent_data['ksm']['pages_unshared'],
));
]);
$graphs['ksm_pages'] = TRUE;

View File

@ -5,213 +5,185 @@
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
* @package observium
* @subpackage poller
* @copyright (C) Adam Armstrong
*
*/
global $agent_sensors;
if ($agent_data['lmsensors'] != '|')
{
$array = preg_split("/\n/", $agent_data['lmsensors'], -1, PREG_SPLIT_NO_EMPTY);
$sensors_array = [];
if ($agent_data['lmsensors'] != '|') {
$array = preg_split("/\n/", $agent_data['lmsensors'], -1, PREG_SPLIT_NO_EMPTY);
$sensors_array = [];
// i5k_amb-isa-0000
// power_meter-acpi-0
$pattern_module = '/^[a-z][a-z\-\_\d]+$/';
// Adapter: ISA adapter
// Adapter: Virtual device
$pattern_adapter = '/^Adapter:\ +(?<adapter>.+)$/';
// Ch. 0 DIMM 0: +98.5°C (low = +127.5°C, high = +127.5°C)
// Core 0: +49.0°C (high = +80.0°C, crit = +100.0°C)
// fan5: 0 RPM (min = 712 RPM) ALARM
// temp4: -128.0°C (high = +85.0°C, hyst = +80.0°C) sensor = Intel PECI
// Core 0: +50.0°C (high = +80.0°C, crit = +100.0°C)
$pattern_sensor = '/^(?<descr>[^:]+):\s+(?<value>[+\-]?\d[\d\.]*)\s*(?<unit>\S+)(?<additional>.*)$/';
$pattern_limits = '/\((?<limits>.+?)\)/';
// intrusion0: OK
// beep_enable: disabled
$pattern_status = '/^(?<descr>[^:]+):\s+(?<status>[a-zA-Z]+)$/';
// i5k_amb-isa-0000
// power_meter-acpi-0
$pattern_module = '/^[a-z][a-z\-\_\d]+$/';
// Adapter: ISA adapter
// Adapter: Virtual device
$pattern_adapter = '/^Adapter:\ +(?<adapter>.+)$/';
// Ch. 0 DIMM 0: +98.5°C (low = +127.5°C, high = +127.5°C)
// Core 0: +49.0°C (high = +80.0°C, crit = +100.0°C)
// fan5: 0 RPM (min = 712 RPM) ALARM
// temp4: -128.0°C (high = +85.0°C, hyst = +80.0°C) sensor = Intel PECI
// Core 0: +50.0°C (high = +80.0°C, crit = +100.0°C)
$pattern_sensor = '/^(?<descr>[^:]+):\s+(?<value>[+\-]?\d[\d\.]*)\s*(?<unit>\S+)(?<additional>.*)$/';
$pattern_limits = '/\((?<limits>.+?)\)/';
// intrusion0: OK
// beep_enable: disabled
$pattern_status = '/^(?<descr>[^:]+):\s+(?<status>[a-zA-Z]+)$/';
$module = '';
$adapter = '';
foreach ($array as $line)
{
// Set module name
if (preg_match($pattern_module, $line))
{
$module = $line;
}
// Set adapter name
if (preg_match($pattern_adapter, $line, $matches))
{
$adapter = $matches['adapter'];
}
// Reset module and adapter after empty line
if (trim($line) == '')
{
$module = '';
$adapter = '';
}
$sensor = ['scale' => 1];
if (preg_match($pattern_sensor, $line, $matches))
{
// Numeric sensors
$unit = preg_replace('/[^a-zA-Z]/', '', $matches['unit']);
$sensor['descr'] = trim($matches['descr']); // Used as Index
if (strlen($module) && strlen($adapter))
{
// Append rename rrd, since description changed
$sensor['rename_rrd'] = 'lmsensors-'.$sensor['descr'];
$sensor['descr'] .= ' (' . $module . ')';
}
$sensor['current'] = preg_replace('/[^0-9\.\-]/', '', $matches['value']);
switch ($unit)
{
case "F":
$sensor['class'] = "temperature";
$sensor['unit'] = 'F';
break;
case "C":
$sensor['class'] = "temperature";
break;
case "RPM":
$sensor['class'] = "fanspeed";
break;
case "V":
$sensor['class'] = "voltage";
break;
case "W":
$sensor['class'] = "power";
break;
}
// Limits
if (isset($matches['additional']) && preg_match($pattern_limits, $matches['additional'], $limits))
{
// low = +127.5°C, high = +127.5°C
foreach (explode(',', $limits['limits']) as $limit)
{
// low = +127.5°C
list($param, $value) = explode('=', $limit);
$param = trim($param);
switch($param)
{
case "low":
case "high":
case "crit":
case "warn":
case "hyst":
$sensor[$param] = preg_replace('/[^0-9\.\-]/', '', $value);
break;
}
$module = '';
$adapter = '';
foreach ($array as $line) {
// Set module name
if (preg_match($pattern_module, $line)) {
$module = $line;
}
}
}
elseif (preg_match($pattern_status, $line, $matches))
{
// Named status
$sensor['descr'] = trim($matches['descr']);
$sensor['status'] = trim($matches['status']);
} else {
// Skip other lines
continue;
}
$sensors_array[$sensor['descr']] = $sensor;
}
foreach ($sensors_array as $key => $sensor)
{
$options = [];
if (isset($sensor['status']))
{
// Statuses
switch (strtolower($sensor['status']))
{
case 'ok':
$istatus = 1;
$type = 'unix-agent-state';
break;
case 'disabled':
$istatus = 1;
$type = 'unix-agent-enable';
break;
case 'enabled':
$istatus = 0;
$type = 'unix-agent-enable';
break;
case 'non-critical':
// Warn
$istatus = 2;
$type = 'unix-agent-state';
break;
default:
// Fail
$istatus = 0;
$type = 'unix-agent-state';
}
discover_status($device, '', $key, $type, $sensor['descr'], $istatus, array('entPhysicalClass' => 'other'), 'agent');
$agent_sensors['state'][$type][$key] = array('description' => $sensor['descr'], 'current' => $istatus, 'index' => $key);
// Statuses End
} else {
// Sensors
if (isset($sensor['crit']))
{
// high = +80.0°C, crit = +100.0°C
$options['limit_high'] = $sensor['crit'];
if (isset($sensor['high']))
{
$options['limit_high_warn'] = $sensor['high'];
// Set adapter name
if (preg_match($pattern_adapter, $line, $matches)) {
$adapter = $matches['adapter'];
}
}
elseif (isset($sensor['high']))
{
// high = +85.0°C, hyst = +80.0°C
$options['limit_high'] = $sensor['high'];
if (isset($sensor['hyst']))
{
$options['limit_high_warn'] = $sensor['hyst'];
// Reset module and adapter after empty line
if (trim($line) == '') {
$module = '';
$adapter = '';
}
}
elseif (isset($sensor['max']))
{
// min = +2.70 V, max = +3.30 V
$options['limit_high'] = $sensor['max'];
}
if (isset($sensor['low']) && $sensor['low'] != $sensor['high'])
{
// low = +127.5°C, high = +127.5°C
$options['limit_low'] = $sensor['low'];
}
elseif (isset($sensor['min']))
{
// min = +2.70 V, max = +3.30 V
$options['limit_low'] = $sensor['min'];
}
$sensor = ['scale' => 1];
if (preg_match($pattern_sensor, $line, $matches)) {
// Numeric sensors
$unit = preg_replace('/[^a-zA-Z]/', '', $matches['unit']);
$sensor['descr'] = trim($matches['descr']); // Used as Index
if (strlen($module) && strlen($adapter)) {
// Append rename rrd, since description changed
$sensor['rename_rrd'] = 'lmsensors-' . $sensor['descr'];
$sensor['descr'] .= ' (' . $module . ')';
}
$agent_sensors[$sensor['class']]['lmsensors'][$key] = array('description' => $sensor['descr'], 'current' => $sensor['current'], 'index' => $key);
if (isset($sensor['unit']))
{
$options['sensor_unit'] = $sensor['unit'];
$agent_sensors[$sensor['class']]['lmsensors'][$key]['unit'] = $sensor['unit'];
}
if (isset($sensor['rename_rrd']))
{
$options['rename_rrd'] = $sensor['rename_rrd'];
$agent_sensors[$sensor['class']]['lmsensors'][$key]['rename_rrd'] = $sensor['rename_rrd'];
}
discover_sensor($sensor['class'], $device, '', $key, 'lmsensors', $sensor['descr'], $sensor['scale'], $sensor['current'], $options, 'agent');
$sensor['current'] = preg_replace('/[^0-9\.\-]/', '', $matches['value']);
switch ($unit) {
case "F":
$sensor['class'] = "temperature";
$sensor['unit'] = 'F';
break;
case "C":
$sensor['class'] = "temperature";
break;
case "RPM":
$sensor['class'] = "fanspeed";
break;
case "V":
$sensor['class'] = "voltage";
break;
case "W":
$sensor['class'] = "power";
break;
}
// Limits
if (isset($matches['additional']) && preg_match($pattern_limits, $matches['additional'], $limits)) {
// low = +127.5°C, high = +127.5°C
foreach (explode(',', $limits['limits']) as $limit) {
// low = +127.5°C
[$param, $value] = explode('=', $limit);
$param = trim($param);
switch ($param) {
case "low":
case "high":
case "crit":
case "warn":
case "hyst":
$sensor[$param] = preg_replace('/[^0-9\.\-]/', '', $value);
break;
}
}
}
} elseif (preg_match($pattern_status, $line, $matches)) {
// Named status
$sensor['descr'] = trim($matches['descr']);
$sensor['status'] = trim($matches['status']);
} else {
// Skip other lines
continue;
}
$sensors_array[$sensor['descr']] = $sensor;
}
}
#print_r($sensors_array);
unset($sensor, $sensors_array);
foreach ($sensors_array as $key => $sensor) {
$options = [];
if (isset($sensor['status'])) {
// Statuses
switch (strtolower($sensor['status'])) {
case 'ok':
$istatus = 1;
$type = 'unix-agent-state';
break;
case 'disabled':
$istatus = 1;
$type = 'unix-agent-enable';
break;
case 'enabled':
$istatus = 0;
$type = 'unix-agent-enable';
break;
case 'non-critical':
// Warn
$istatus = 2;
$type = 'unix-agent-state';
break;
default:
// Fail
$istatus = 0;
$type = 'unix-agent-state';
}
discover_status($device, '', $key, $type, $sensor['descr'], $istatus, ['entPhysicalClass' => 'other'], 'agent');
$agent_sensors['state'][$type][$key] = ['description' => $sensor['descr'], 'current' => $istatus, 'index' => $key];
// Statuses End
} else {
// Sensors
if (isset($sensor['crit'])) {
// high = +80.0°C, crit = +100.0°C
$options['limit_high'] = $sensor['crit'];
if (isset($sensor['high'])) {
$options['limit_high_warn'] = $sensor['high'];
}
} elseif (isset($sensor['high'])) {
// high = +85.0°C, hyst = +80.0°C
$options['limit_high'] = $sensor['high'];
if (isset($sensor['hyst'])) {
$options['limit_high_warn'] = $sensor['hyst'];
}
} elseif (isset($sensor['max'])) {
// min = +2.70 V, max = +3.30 V
$options['limit_high'] = $sensor['max'];
}
if (isset($sensor['low']) && $sensor['low'] != $sensor['high']) {
// low = +127.5°C, high = +127.5°C
$options['limit_low'] = $sensor['low'];
} elseif (isset($sensor['min'])) {
// min = +2.70 V, max = +3.30 V
$options['limit_low'] = $sensor['min'];
}
$agent_sensors[$sensor['class']]['lmsensors'][$key] = ['description' => $sensor['descr'], 'current' => $sensor['current'], 'index' => $key];
if (isset($sensor['unit'])) {
$options['sensor_unit'] = $sensor['unit'];
$agent_sensors[$sensor['class']]['lmsensors'][$key]['unit'] = $sensor['unit'];
}
if (isset($sensor['rename_rrd'])) {
$options['rename_rrd'] = $sensor['rename_rrd'];
$agent_sensors[$sensor['class']]['lmsensors'][$key]['rename_rrd'] = $sensor['rename_rrd'];
}
discover_sensor($sensor['class'], $device, '', $key, 'lmsensors', $sensor['descr'], $sensor['scale'], $sensor['current'], $options, 'agent');
}
}
#print_r($sensors_array);
unset($sensor, $sensors_array);
}
// EOF

View File

@ -5,139 +5,140 @@
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
* @package observium
* @subpackage poller
* @copyright (C) Adam Armstrong
*
*/
// Init to avoid PHP warnings
$plugins = array();
$plugins_ds = array();
$plugins = [];
$plugins_ds = [];
// Plugins
if (!empty($agent_data['munin']))
{
echo("Munin Plugins:");
if (OBS_DEBUG) { print_vars($agent_data['munin']); }
// Build cache of plugins we already know about
foreach (dbFetchRows('SELECT * FROM `munin_plugins` WHERE `device_id` = ?', array($device['device_id'])) as $plugin)
{
$plugins[$plugin['mplug_type']] = $plugin;
}
// Build cache of plugin datasources we already know about
foreach (dbFetchRows('SELECT * FROM `munin_plugins_ds` AS D, `munin_plugins` AS P WHERE P.`mplug_id` = D.`mplug_id` AND P.`device_id` = ?', array($device['device_id'])) as $plugin_ds)
{
$plugins_ds[$plugin_ds['mplug_id']][$plugin_ds['ds_name']] = $plugin_ds;
}
$old_plugins_rrd_dir = $host_rrd . "/plugins";
$plugins_rrd_dir = $host_rrd . "/munin";
if (!is_dir($plugins_rrd_dir)) { mkdir($plugins_rrd_dir); echo("Created directory : $plugins_rrd_dir\n"); }
$plugin = array();
foreach ($agent_data['munin'] AS $plugin_type => $plugin_data)
{
$plugin = array();
echo("\nPlugin: $plugin_type");
$plugin_rrd = "munin/".$plugin_type;
$plugin_uniq = $plugin_type."_";
if (OBS_DEBUG > 1) { echo("\n[$plugin_data]\n"); }
foreach (explode("\n", $plugin_data) as $line)
{
list($key, $value) = explode(" ", $line, 2);
if (preg_match("/^graph_/", $key))
{
list(,$key) = explode("_", $key);
$plugin['graph'][$key] = $value;
} else {
list($metric,$key) = explode(".", $key);
$plugin['values'][$metric][$key] = $value;
}
if (!empty($agent_data['munin'])) {
echo("Munin Plugins:");
if (OBS_DEBUG) {
print_vars($agent_data['munin']);
}
if (!is_array($plugin['values']['multigraph']))
{
if (is_array($plugins[$plugin_type]))
{
$mplug_id = $plugins[$plugin_type]['mplug_id'];
// FIXME - check and update
} else {
$insert = array('device_id' => $device['device_id'], 'mplug_type' => $plugin_type,
'mplug_instance' => ($instance == NULL ? array('NULL') : $instance),
'mplug_category' => ($plugin['graph']['category'] == NULL ? 'general' : strtolower($plugin['graph']['category'])),
'mplug_title' => ($plugin['graph']['title'] == NULL ? array('NULL') : $plugin['graph']['title']),
'mplug_vlabel' => ($plugin['graph']['vlabel'] == NULL ? array('NULL') : $plugin['graph']['vlabel']),
'mplug_args' => ($plugin['graph']['args'] == NULL ? array('NULL') : $plugin['graph']['args']),
'mplug_info' => ($plugin['graph']['info'] == NULL ? array('NULL') : $plugin['graph']['info']),
);
$mplug_id = dbInsert($insert, 'munin_plugins');
}
// Build cache of plugins we already know about
if ($mplug_id)
{
echo(" ID: $mplug_id");
foreach (dbFetchRows('SELECT * FROM `munin_plugins` WHERE `device_id` = ?', [$device['device_id']]) as $plugin) {
$plugins[$plugin['mplug_type']] = $plugin;
}
foreach ($plugin['values'] as $name => $data)
{
if (strlen($name)) {
echo(" $name");
if (empty($data['type'])) { $data['type'] = "GAUGE"; }
if (empty($data['graph'])) { $data['graph'] = "yes"; }
if (empty($data['label'])) { $data['label'] = $name; }
if (empty($data['draw'])) { $data['draw'] = "LINE1.5"; }
// Build cache of plugin datasources we already know about
foreach (dbFetchRows('SELECT * FROM `munin_plugins_ds` AS D, `munin_plugins` AS P WHERE P.`mplug_id` = D.`mplug_id` AND P.`device_id` = ?', [$device['device_id']]) as $plugin_ds) {
$plugins_ds[$plugin_ds['mplug_id']][$plugin_ds['ds_name']] = $plugin_ds;
}
$cmd = " DS:val:".$data['type'].":600:0:U ";
$ds_uniq = $mplug_id."_".$name;
$filename = $plugin_rrd."_".$name.".rrd";
rrdtool_create($device, $filename, $cmd);
rrdtool_update($device, $filename,"N:".$data['value']);
$old_plugins_rrd_dir = $host_rrd . "/plugins";
$plugins_rrd_dir = $host_rrd . "/munin";
if (!is_dir($plugins_rrd_dir)) {
mkdir($plugins_rrd_dir);
echo("Created directory : $plugins_rrd_dir\n");
}
$plugin = [];
foreach ($agent_data['munin'] as $plugin_type => $plugin_data) {
$plugin = [];
if (empty($plugins_ds[$mplug_id][$name]))
{
$insert = array('mplug_id' => $mplug_id, 'ds_name' => $name,
'ds_type' => $data['type'], 'ds_label' => $data['label'],
'ds_cdef' => $data['cdef'], 'ds_draw' => $data['draw'],
'ds_info' => $data['info'], 'ds_extinfo' => $data['extinfo'],
'ds_min' => $data['min'], 'ds_max' => $data['max'],
'ds_graph' => $data['graph'], 'ds_negative' => $data['negative'],
'ds_warning' => $data['warning'], 'ds_critical' => $data['critical'],
'ds_colour' => $data['colour'], 'ds_sum' => $data['sum'],
'ds_stack' => $data['stack'], 'ds_line' => $data['line'],
);
$ds_id = dbInsert($insert, 'munin_plugins_ds');
} else {
// FIXME - check and update.
unset ($plugins_ds[$mplug_id][$name]);
}
}
unset ($plugins[$plugin_type]);
echo("\nPlugin: $plugin_type");
$plugin_rrd = "munin/" . $plugin_type;
$plugin_uniq = $plugin_type . "_";
if (OBS_DEBUG > 1) {
echo("\n[$plugin_data]\n");
}
foreach (explode("\n", $plugin_data) as $line) {
[$key, $value] = explode(" ", $line, 2);
if (preg_match("/^graph_/", $key)) {
[, $key] = explode("_", $key);
$plugin['graph'][$key] = $value;
} else {
[$metric, $key] = explode(".", $key);
$plugin['values'][$metric][$key] = $value;
}
}
if (!is_array($plugin['values']['multigraph'])) {
if (is_array($plugins[$plugin_type])) {
$mplug_id = $plugins[$plugin_type]['mplug_id'];
// FIXME - check and update
} else {
$insert = ['device_id' => $device['device_id'], 'mplug_type' => $plugin_type,
'mplug_instance' => ($instance == NULL ? ['NULL'] : $instance),
'mplug_category' => ($plugin['graph']['category'] == NULL ? 'general' : strtolower($plugin['graph']['category'])),
'mplug_title' => ($plugin['graph']['title'] == NULL ? ['NULL'] : $plugin['graph']['title']),
'mplug_vlabel' => ($plugin['graph']['vlabel'] == NULL ? ['NULL'] : $plugin['graph']['vlabel']),
'mplug_args' => ($plugin['graph']['args'] == NULL ? ['NULL'] : $plugin['graph']['args']),
'mplug_info' => ($plugin['graph']['info'] == NULL ? ['NULL'] : $plugin['graph']['info']),
];
$mplug_id = dbInsert($insert, 'munin_plugins');
}
if ($mplug_id) {
echo(" ID: $mplug_id");
foreach ($plugin['values'] as $name => $data) {
if (strlen($name)) {
echo(" $name");
if (empty($data['type'])) {
$data['type'] = "GAUGE";
}
if (empty($data['graph'])) {
$data['graph'] = "yes";
}
if (empty($data['label'])) {
$data['label'] = $name;
}
if (empty($data['draw'])) {
$data['draw'] = "LINE1.5";
}
$cmd = " DS:val:" . $data['type'] . ":600:0:U ";
$ds_uniq = $mplug_id . "_" . $name;
$filename = $plugin_rrd . "_" . $name . ".rrd";
rrdtool_create($device, $filename, $cmd);
rrdtool_update($device, $filename, "N:" . $data['value']);
if (empty($plugins_ds[$mplug_id][$name])) {
$insert = ['mplug_id' => $mplug_id, 'ds_name' => $name,
'ds_type' => $data['type'], 'ds_label' => $data['label'],
'ds_cdef' => $data['cdef'], 'ds_draw' => $data['draw'],
'ds_info' => $data['info'], 'ds_extinfo' => $data['extinfo'],
'ds_min' => $data['min'], 'ds_max' => $data['max'],
'ds_graph' => $data['graph'], 'ds_negative' => $data['negative'],
'ds_warning' => $data['warning'], 'ds_critical' => $data['critical'],
'ds_colour' => $data['colour'], 'ds_sum' => $data['sum'],
'ds_stack' => $data['stack'], 'ds_line' => $data['line'],
];
$ds_id = dbInsert($insert, 'munin_plugins_ds');
} else {
// FIXME - check and update.
unset ($plugins_ds[$mplug_id][$name]);
}
}
unset ($plugins[$plugin_type]);
}
} else {
echo("No ID!\n");
}
}
} else {
echo("No ID!\n");
}
}
}
}
foreach ($plugins as $plugin)
{
dbDelete('munin_plugins', "`mplug_id` = ?", array($plugin['mplug_id']));
echo("plug- ");
foreach ($plugins as $plugin) {
dbDelete('munin_plugins', "`mplug_id` = ?", [$plugin['mplug_id']]);
echo("plug- ");
}
foreach ($plugins_ds as $plugin)
{
foreach ($plugin as $plugin_ds)
{
dbDelete('munin_plugins_ds', "`mplug_ds_id` = ?", array($plugin_ds['mplug_ds_id']));
echo("ds- ");
}
foreach ($plugins_ds as $plugin) {
foreach ($plugin as $plugin_ds) {
dbDelete('munin_plugins_ds', "`mplug_ds_id` = ?", [$plugin_ds['mplug_ds_id']]);
echo("ds- ");
}
}
// EOF

View File

@ -4,70 +4,67 @@
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2022 Observium Limited
* @package observium
* @subpackage poller
* @copyright (C) Adam Armstrong
*
*/
global $agent_sensors;
if (!safe_empty($agent_data['nvidia']['smi'])) {
$invalid = [ '[Not Supported]', 'N/A', '[N/A]' ];
$nvidia = parse_csv($agent_data['nvidia']['smi']);
if (safe_count($nvidia)) {
if (!safe_empty($agent_data['nvidia']['smi']) &&
$nvidia = parse_csv($agent_data['nvidia']['smi'])) {
$invalid = [ '[Not Supported]', 'N/A', '[N/A]' ];
print_cli_heading("nvidia-smi", 3);
foreach ($nvidia as $card) {
$descr_card = "Nvidia Card ".($card['index']+1).": ".$card['name'];
print_cli_heading($descr_card, 4);
$descr_card = "Nvidia Card " . ((int)$card['index'] + 1) . ": " . $card['name'];
print_cli_heading($descr_card, 4);
if (!in_array($card['temperature.gpu'], $invalid)) {
$index = 'temperature.gpu.'.$card['index'];
$descr = $descr_card;
discover_sensor('temperature', $device, '', $index, 'nvidia-smi', $descr, 1, $card['temperature.gpu'], [ 'limit_high' => 100 ], 'agent');
$agent_sensors['temperature']['nvidia-smi'][$index] = [ 'description' => $descr, 'current' => $card['temperature.gpu'], 'index' => $index ];
print_cli_data("temperature.gpu", $card['temperature.gpu']."C");
if (!in_array($card['temperature.gpu'], $invalid)) {
$index = 'temperature.gpu.' . $card['index'];
$descr = $descr_card;
discover_sensor('temperature', $device, '', $index, 'nvidia-smi', $descr, 1, $card['temperature.gpu'], ['limit_high' => 100], 'agent');
$agent_sensors['temperature']['nvidia-smi'][$index] = ['description' => $descr, 'current' => $card['temperature.gpu'], 'index' => $index];
print_cli_data("temperature.gpu", $card['temperature.gpu'] . "C");
}
}
if (!in_array($card['power.draw [W]'], $invalid)) {
$index = 'power.draw.'.$card['index'];
$descr = $descr_card;
discover_sensor('power', $device, '', $index, 'nvidia-smi', $descr, 1, $card['power.draw [W]'], [], 'agent');
$agent_sensors['power']['nvidia-smi'][$index] = [ 'description' => $descr, 'current' => $card['power.draw [W]'], 'index' => $index ];
print_cli_data("power.draw", $card['power.draw [W]']."W");
}
if (!in_array($card['power.draw [W]'], $invalid)) {
$index = 'power.draw.' . $card['index'];
$descr = $descr_card;
discover_sensor('power', $device, '', $index, 'nvidia-smi', $descr, 1, $card['power.draw [W]'], [], 'agent');
$agent_sensors['power']['nvidia-smi'][$index] = ['description' => $descr, 'current' => $card['power.draw [W]'], 'index' => $index];
print_cli_data("power.draw", $card['power.draw [W]'] . "W");
}
if (!in_array($card['fan.speed [%]'], $invalid)) {
$index = 'fan.speed.'.$card['index'];
$descr = $descr_card . " Fan Load";
discover_sensor('load', $device, '', $index, 'nvidia-smi', $descr, 1, $card['fan.speed [%]'], [ 'limit_high' => 100, 'limit_low' => 0 ], 'agent');
$agent_sensors['load']['nvidia-smi'][$index] = [ 'description' => $descr, 'current' => $card['fan.speed [%]'], 'index' => $index ];
print_cli_data("fan.speed", $card['fan.speed [%]']."");
}
if (!in_array($card['fan.speed [%]'], $invalid)) {
$index = 'fan.speed.' . $card['index'];
$descr = $descr_card . " Fan Load";
discover_sensor('load', $device, '', $index, 'nvidia-smi', $descr, 1, $card['fan.speed [%]'], ['limit_high' => 100, 'limit_low' => 0], 'agent');
$agent_sensors['load']['nvidia-smi'][$index] = ['description' => $descr, 'current' => $card['fan.speed [%]'], 'index' => $index];
print_cli_data("fan.speed", $card['fan.speed [%]'] . "");
}
if (!in_array($card['utilization.gpu [%]'], $invalid)) {
$index = 'utilization.gpu.'.$card['index'];
$descr = $descr_card . " GPU Load";
discover_sensor('load', $device, '', $index, 'nvidia-smi', $descr, 1, $card['utilization.gpu [%]'], [ 'limit_high' => 100, 'limit_low' => 0 ], 'agent');
$agent_sensors['load']['nvidia-smi'][$index] = [ 'description' => $descr, 'current' => $card['utilization.gpu [%]'], 'index' => $index ];
print_cli_data("utilization.gpu", $card['utilization.gpu [%]']."");
}
if (!in_array($card['utilization.gpu [%]'], $invalid)) {
$index = 'utilization.gpu.' . $card['index'];
$descr = $descr_card . " GPU Load";
discover_sensor('load', $device, '', $index, 'nvidia-smi', $descr, 1, $card['utilization.gpu [%]'], ['limit_high' => 100, 'limit_low' => 0], 'agent');
$agent_sensors['load']['nvidia-smi'][$index] = ['description' => $descr, 'current' => $card['utilization.gpu [%]'], 'index' => $index];
print_cli_data("utilization.gpu", $card['utilization.gpu [%]'] . "");
}
if (!in_array($card['utilization.memory [%]'], $invalid)) {
$index = 'utilization.memory.'.$card['index'];
$descr = $descr_card . " Memory Load";
discover_sensor('load', $device, '', $index, 'nvidia-smi', $descr, 1, $card['utilization.memory [%]'], [ 'limit_high' => 100, 'limit_low' => 0 ], 'agent');
$agent_sensors['load']['nvidia-smi'][$index] = [ 'description' => $descr, 'current' => $card['utilization.memory [%]'], 'index' => $index ];
print_cli_data("utilization.memory", $card['utilization.memory [%]']."");
}
if (!in_array($card['utilization.memory [%]'], $invalid)) {
$index = 'utilization.memory.' . $card['index'];
$descr = $descr_card . " Memory Load";
discover_sensor('load', $device, '', $index, 'nvidia-smi', $descr, 1, $card['utilization.memory [%]'], ['limit_high' => 100, 'limit_low' => 0], 'agent');
$agent_sensors['load']['nvidia-smi'][$index] = ['description' => $descr, 'current' => $card['utilization.memory [%]'], 'index' => $index];
print_cli_data("utilization.memory", $card['utilization.memory [%]'] . "");
}
}
echo "\n";
}
}
// EOF

View File

@ -4,9 +4,9 @@
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2022 Observium Limited
* @package observium
* @subpackage poller
* @copyright (C) Adam Armstrong
*
*/
@ -16,139 +16,147 @@ $pkgs_db_id = [];
// RPM
if (!safe_empty($agent_data['rpm'])) {
echo("\nRPM Packages: ");
// Build array of existing packages
$manager = "rpm";
echo("\nRPM Packages: ");
// Build array of existing packages
$manager = "rpm";
foreach (dbFetchRows("SELECT * FROM `packages` WHERE `device_id` = ?", [ $device['device_id'] ]) as $pkg_db) {
$pkgs_db[$pkg_db['manager']][$pkg_db['name']][$pkg_db['arch']][$pkg_db['version']][$pkg_db['build']]['id'] = $pkg_db['pkg_id'];
$pkgs_db[$pkg_db['manager']][$pkg_db['name']][$pkg_db['arch']][$pkg_db['version']][$pkg_db['build']]['status'] = $pkg_db['status'];
$pkgs_db[$pkg_db['manager']][$pkg_db['name']][$pkg_db['arch']][$pkg_db['version']][$pkg_db['build']]['size'] = $pkg_db['size'];
$pkgs_db_id[$pkg_db['pkg_id']]['text'] = $pkg_db['manager'] ."-".$pkg_db['name']."-".$pkg_db['arch']."-".$pkg_db['version']."-".$pkg_db['build'];
$pkgs_db_id[$pkg_db['pkg_id']]['manager'] = $pkg_db['manager'];
$pkgs_db_id[$pkg_db['pkg_id']]['name'] = $pkg_db['name'];
$pkgs_db_id[$pkg_db['pkg_id']]['arch'] = $pkg_db['arch'];
$pkgs_db_id[$pkg_db['pkg_id']]['version'] = $pkg_db['version'];
$pkgs_db_id[$pkg_db['pkg_id']]['build'] = $pkg_db['build'];
}
foreach (dbFetchRows("SELECT * FROM `packages` WHERE `device_id` = ?", [$device['device_id']]) as $pkg_db) {
$pkgs_db[$pkg_db['manager']][$pkg_db['name']][$pkg_db['arch']][$pkg_db['version']][$pkg_db['build']]['id'] = $pkg_db['pkg_id'];
$pkgs_db[$pkg_db['manager']][$pkg_db['name']][$pkg_db['arch']][$pkg_db['version']][$pkg_db['build']]['status'] = $pkg_db['status'];
$pkgs_db[$pkg_db['manager']][$pkg_db['name']][$pkg_db['arch']][$pkg_db['version']][$pkg_db['build']]['size'] = $pkg_db['size'];
$pkgs_db_id[$pkg_db['pkg_id']]['text'] = $pkg_db['manager'] . "-" . $pkg_db['name'] . "-" . $pkg_db['arch'] . "-" . $pkg_db['version'] . "-" . $pkg_db['build'];
$pkgs_db_id[$pkg_db['pkg_id']]['manager'] = $pkg_db['manager'];
$pkgs_db_id[$pkg_db['pkg_id']]['name'] = $pkg_db['name'];
$pkgs_db_id[$pkg_db['pkg_id']]['arch'] = $pkg_db['arch'];
$pkgs_db_id[$pkg_db['pkg_id']]['version'] = $pkg_db['version'];
$pkgs_db_id[$pkg_db['pkg_id']]['build'] = $pkg_db['build'];
}
foreach (explode("\n", $agent_data['rpm']) as $package) {
list($name, $pversion, $build, $arch, $size) = explode(" ", $package);
$pkgs[$manager][$name][$arch][$pversion][$build]['manager'] = $manager;
$pkgs[$manager][$name][$arch][$pversion][$build]['name'] = $name;
$pkgs[$manager][$name][$arch][$pversion][$build]['arch'] = $arch;
$pkgs[$manager][$name][$arch][$pversion][$build]['version'] = $pversion;
$pkgs[$manager][$name][$arch][$pversion][$build]['build'] = $build;
$pkgs[$manager][$name][$arch][$pversion][$build]['size'] = $size;
$pkgs[$manager][$name][$arch][$pversion][$build]['status'] = '1';
$text = $manager."-".$name."-".$arch."-".$pversion."-".$build;
$pkgs_id[] = $pkgs[$manager][$name][$arch][$pversion][$build];
}
foreach (explode("\n", $agent_data['rpm']) as $package) {
[$name, $pversion, $build, $arch, $size] = explode(" ", $package);
$pkgs[$manager][$name][$arch][$pversion][$build]['manager'] = $manager;
$pkgs[$manager][$name][$arch][$pversion][$build]['name'] = $name;
$pkgs[$manager][$name][$arch][$pversion][$build]['arch'] = $arch;
$pkgs[$manager][$name][$arch][$pversion][$build]['version'] = $pversion;
$pkgs[$manager][$name][$arch][$pversion][$build]['build'] = $build;
$pkgs[$manager][$name][$arch][$pversion][$build]['size'] = $size;
$pkgs[$manager][$name][$arch][$pversion][$build]['status'] = '1';
$text = $manager . "-" . $name . "-" . $arch . "-" . $pversion . "-" . $build;
$pkgs_id[] = $pkgs[$manager][$name][$arch][$pversion][$build];
}
}
// DPKG
if (!safe_empty($agent_data['dpkg'])) {
echo("\nDEB Packages: ");
// Build array of existing packages
$manager = "deb";
echo("\nDEB Packages: ");
// Build array of existing packages
$manager = "deb";
foreach (dbFetchRows("SELECT * FROM `packages` WHERE `device_id` = ?", [ $device['device_id'] ]) as $pkg_db) {
$pkgs_db[$pkg_db['manager']][$pkg_db['name']][$pkg_db['arch']][$pkg_db['version']][$pkg_db['build']]['id'] = $pkg_db['pkg_id'];
$pkgs_db[$pkg_db['manager']][$pkg_db['name']][$pkg_db['arch']][$pkg_db['version']][$pkg_db['build']]['status'] = $pkg_db['status'];
$pkgs_db[$pkg_db['manager']][$pkg_db['name']][$pkg_db['arch']][$pkg_db['version']][$pkg_db['build']]['size'] = $pkg_db['size'];
$pkgs_db_id[$pkg_db['pkg_id']]['text'] = $pkg_db['manager'] ."-".$pkg_db['name']."-".$pkg_db['arch']."-".$pkg_db['version']."-".$pkg_db['build'];
$pkgs_db_id[$pkg_db['pkg_id']]['manager'] = $pkg_db['manager'];
$pkgs_db_id[$pkg_db['pkg_id']]['name'] = $pkg_db['name'];
$pkgs_db_id[$pkg_db['pkg_id']]['arch'] = $pkg_db['arch'];
$pkgs_db_id[$pkg_db['pkg_id']]['version'] = $pkg_db['version'];
$pkgs_db_id[$pkg_db['pkg_id']]['build'] = $pkg_db['build'];
}
foreach (dbFetchRows("SELECT * FROM `packages` WHERE `device_id` = ?", [$device['device_id']]) as $pkg_db) {
$pkgs_db[$pkg_db['manager']][$pkg_db['name']][$pkg_db['arch']][$pkg_db['version']][$pkg_db['build']]['id'] = $pkg_db['pkg_id'];
$pkgs_db[$pkg_db['manager']][$pkg_db['name']][$pkg_db['arch']][$pkg_db['version']][$pkg_db['build']]['status'] = $pkg_db['status'];
$pkgs_db[$pkg_db['manager']][$pkg_db['name']][$pkg_db['arch']][$pkg_db['version']][$pkg_db['build']]['size'] = $pkg_db['size'];
$pkgs_db_id[$pkg_db['pkg_id']]['text'] = $pkg_db['manager'] . "-" . $pkg_db['name'] . "-" . $pkg_db['arch'] . "-" . $pkg_db['version'] . "-" . $pkg_db['build'];
$pkgs_db_id[$pkg_db['pkg_id']]['manager'] = $pkg_db['manager'];
$pkgs_db_id[$pkg_db['pkg_id']]['name'] = $pkg_db['name'];
$pkgs_db_id[$pkg_db['pkg_id']]['arch'] = $pkg_db['arch'];
$pkgs_db_id[$pkg_db['pkg_id']]['version'] = $pkg_db['version'];
$pkgs_db_id[$pkg_db['pkg_id']]['build'] = $pkg_db['build'];
}
foreach (explode("\n", $agent_data['dpkg']) as $package) {
list($name, $pversion, $arch, $size) = explode(" ", $package);
$build = "";
$pkgs[$manager][$name][$arch][$pversion][$build]['manager'] = $manager;
$pkgs[$manager][$name][$arch][$pversion][$build]['name'] = $name;
$pkgs[$manager][$name][$arch][$pversion][$build]['arch'] = $arch;
$pkgs[$manager][$name][$arch][$pversion][$build]['version'] = $pversion;
$pkgs[$manager][$name][$arch][$pversion][$build]['build'] = $build;
$pkgs[$manager][$name][$arch][$pversion][$build]['size'] = (int)$size * 1024;
$pkgs[$manager][$name][$arch][$pversion][$build]['status'] = '1';
$text = $manager."-".$name."-".$arch."-".$pversion."-".$build;
$pkgs_id[] = $pkgs[$manager][$name][$arch][$pversion][$build];
}
foreach (explode("\n", $agent_data['dpkg']) as $package) {
[$name, $pversion, $arch, $size] = explode(" ", $package);
$build = "";
$pkgs[$manager][$name][$arch][$pversion][$build]['manager'] = $manager;
$pkgs[$manager][$name][$arch][$pversion][$build]['name'] = $name;
$pkgs[$manager][$name][$arch][$pversion][$build]['arch'] = $arch;
$pkgs[$manager][$name][$arch][$pversion][$build]['version'] = $pversion;
$pkgs[$manager][$name][$arch][$pversion][$build]['build'] = $build;
$pkgs[$manager][$name][$arch][$pversion][$build]['size'] = (int)$size * 1024;
$pkgs[$manager][$name][$arch][$pversion][$build]['status'] = '1';
$text = $manager . "-" . $name . "-" . $arch . "-" . $pversion . "-" . $build;
$pkgs_id[] = $pkgs[$manager][$name][$arch][$pversion][$build];
}
}
// This is run for all "packages" and is common to RPM/DEB/etc
$pkg_multi_insert = [];
$pkg_multi_update = [];
foreach ($pkgs_id as $pkg) {
$name = $pkg['name'];
$pversion = $pkg['version'];
$build = $pkg['build'];
$arch = $pkg['arch'];
$size = $pkg['size'];
$name = $pkg['name'];
$pversion = $pkg['version'];
$build = $pkg['build'];
$arch = $pkg['arch'];
$size = $pkg['size'];
#echo(str_pad($name, 20)." ".str_pad($pversion, 10)." ".str_pad($build, 10)." ".$arch."\n");
#echo($name." ");
#echo(str_pad($name, 20)." ".str_pad($pversion, 10)." ".str_pad($build, 10)." ".$arch."\n");
#echo($name." ");
if (is_array($pkgs_db[$pkg['manager']][$pkg['name']][$pkg['arch']][$pkg['version']][$pkg['build']])) {
// FIXME - packages_history table
$id = $pkgs_db[$pkg['manager']][$pkg['name']][$pkg['arch']][$pkg['version']][$pkg['build']]['id'];
$pkg_update = [];
if ($pkgs_db[$pkg['manager']][$pkg['name']][$pkg['arch']][$pkg['version']][$pkg['build']]['status'] != '1') {
$pkg_update['status'] = '1';
}
if ($pkgs_db[$pkg['manager']][$pkg['name']][$pkg['arch']][$pkg['version']][$pkg['build']]['size'] != $size) {
$pkg_update['size'] = $size;
}
if (!empty($pkg_update)) {
$pkg_multi_update[] = [ 'pkg_id' => $id, 'version' => $pkg['version'], 'build' => $pkg['build'], 'status' => '1', 'size' => $size ];
//dbUpdate($pkg_update, 'packages', '`pkg_id` = ?', array($id));
echo("u");
if (is_array($pkgs_db[$pkg['manager']][$pkg['name']][$pkg['arch']][$pkg['version']][$pkg['build']])) {
// FIXME - packages_history table
$id = $pkgs_db[$pkg['manager']][$pkg['name']][$pkg['arch']][$pkg['version']][$pkg['build']]['id'];
$pkg_update = [];
if ($pkgs_db[$pkg['manager']][$pkg['name']][$pkg['arch']][$pkg['version']][$pkg['build']]['status'] != '1') {
$pkg_update['status'] = '1';
}
if ($pkgs_db[$pkg['manager']][$pkg['name']][$pkg['arch']][$pkg['version']][$pkg['build']]['size'] != $size) {
$pkg_update['size'] = $size;
}
if (!empty($pkg_update)) {
$pkg_multi_update[] = ['pkg_id' => $id, 'version' => $pkg['version'], 'build' => $pkg['build'], 'status' => '1', 'size' => $size];
//dbUpdate($pkg_update, 'packages', '`pkg_id` = ?', array($id));
echo("u");
} else {
echo(".");
}
unset($pkgs_db_id[$id]);
} else {
echo(".");
if (safe_count($pkgs[$manager][$name][$arch], 1) > 10 || safe_count($pkgs_db[$manager][$name][$arch], 1) === 0) {
// dbInsert(array('device_id' => $device['device_id'], 'name' => $name, 'manager' => $manager,
// 'status' => 1, 'version' => $pversion, 'build' => $build, 'arch' => $arch, 'size' => $size), 'packages');
$pkg_multi_insert[] = ['device_id' => $device['device_id'], 'name' => $name, 'manager' => $manager,
'status' => 1, 'version' => $pversion, 'build' => $build, 'arch' => $arch, 'size' => $size];
if ($build != "") {
$dbuild = '-' . $build;
} else {
$dbuild = '';
}
echo("+" . $name . "-" . $pversion . $dbuild . "-" . $arch);
log_event('Package installed: ' . $name . ' (' . $arch . ') version ' . $pversion . $dbuild, $device, 'package');
} elseif (safe_count($pkgs_db[$manager][$name][$arch], 1)) {
$pkg_c = dbFetchRow("SELECT * FROM `packages` WHERE `device_id` = ? AND `manager` = ? AND `name` = ? and `arch` = ? ORDER BY version DESC, build DESC", [$device['device_id'], $manager, $name, $arch]);
if ($pkg_c['build'] != "") {
$pkg_c_dbuild = '-' . $pkg_c['build'];
} else {
$pkg_c_dbuild = '';
}
echo("U(" . $pkg_c['name'] . "-" . $pkg_c['version'] . $pkg_c_dbuild . "|" . $name . "-" . $pversion . $dbuild . ")");
$pkg_multi_update[] = ['pkg_id' => $pkg_c['pkg_id'], 'version' => $pversion, 'build' => $build, 'status' => '1', 'size' => $size];
//dbUpdate($pkg_update, 'packages', '`pkg_id` = ?', array($pkg_c['pkg_id']));
log_event('Package updated: ' . $name . ' (' . $arch . ') from ' . $pkg_c['version'] . $pkg_c_dbuild . ' to ' . $pversion . $dbuild, $device, 'package');
unset($pkgs_db_id[$pkg_c['pkg_id']]);
}
}
unset($pkgs_db_id[$id]);
} else {
if (safe_count($pkgs[$manager][$name][$arch], 1) > 10 || safe_count($pkgs_db[$manager][$name][$arch], 1) === 0) {
// dbInsert(array('device_id' => $device['device_id'], 'name' => $name, 'manager' => $manager,
// 'status' => 1, 'version' => $pversion, 'build' => $build, 'arch' => $arch, 'size' => $size), 'packages');
$pkg_multi_insert[] = [ 'device_id' => $device['device_id'], 'name' => $name, 'manager' => $manager,
'status' => 1, 'version' => $pversion, 'build' => $build, 'arch' => $arch, 'size' => $size ];
if ($build != "") { $dbuild = '-' . $build; } else { $dbuild = ''; }
echo("+".$name."-".$pversion.$dbuild."-".$arch);
log_event('Package installed: '.$name.' ('.$arch.') version '.$pversion.$dbuild, $device, 'package');
} elseif (safe_count($pkgs_db[$manager][$name][$arch], 1)) {
$pkg_c = dbFetchRow("SELECT * FROM `packages` WHERE `device_id` = ? AND `manager` = ? AND `name` = ? and `arch` = ? ORDER BY version DESC, build DESC", array($device['device_id'], $manager, $name, $arch));
if ($pkg_c['build'] != "") { $pkg_c_dbuild = '-'.$pkg_c['build']; } else { $pkg_c_dbuild = ''; }
echo("U(".$pkg_c['name']."-".$pkg_c['version'].$pkg_c_dbuild."|".$name."-".$pversion.$dbuild.")");
$pkg_multi_update[] = [ 'pkg_id' => $pkg_c['pkg_id'], 'version' => $pversion, 'build' => $build, 'status' => '1', 'size' => $size ];
//dbUpdate($pkg_update, 'packages', '`pkg_id` = ?', array($pkg_c['pkg_id']));
log_event('Package updated: '.$name.' ('.$arch.') from '.$pkg_c['version'].$pkg_c_dbuild .' to '.$pversion.$dbuild, $device, 'package');
unset($pkgs_db_id[$pkg_c['pkg_id']]);
}
}
unset($pkg_update);
unset($pkg_update);
}
// Multi insert/update
if (!empty($pkg_multi_insert)) {
dbInsertMulti($pkg_multi_insert, 'packages');
dbInsertMulti($pkg_multi_insert, 'packages');
}
if (!empty($pkg_multi_update)) {
dbUpdateMulti($pkg_multi_update, 'packages');
dbUpdateMulti($pkg_multi_update, 'packages');
}
// Packages
if (!safe_empty($pkgs_db_id)) {
foreach ($pkgs_db_id as $id => $pkg) {
//dbDelete('packages', "`pkg_id` = ?", array( $id ));
echo("-" . $pkg['text']);
log_event('Package removed: ' . $pkg['name'] . ' ' . $pkg['arch'] . ' ' . $pkg['version'] . ($pkg['build'] != '' ? "-" . $pkg['build'] : ''), $device, 'package');
}
// Multi delete
dbDelete('packages', generate_query_values_ng(array_keys($pkgs_db_id), 'pkg_id'));
foreach ($pkgs_db_id as $id => $pkg) {
//dbDelete('packages', "`pkg_id` = ?", array( $id ));
echo("-" . $pkg['text']);
log_event('Package removed: ' . $pkg['name'] . ' ' . $pkg['arch'] . ' ' . $pkg['version'] . ($pkg['build'] != '' ? "-" . $pkg['build'] : ''), $device, 'package');
}
// Multi delete
dbDelete('packages', generate_query_values(array_keys($pkgs_db_id), 'pkg_id'));
}
echo(PHP_EOL);

View File

@ -5,9 +5,9 @@
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
* @package observium
* @subpackage poller
* @copyright (C) Adam Armstrong
*
*/
@ -16,27 +16,26 @@ unset($agent_data['proxmox']['qemu']);
echo("Proxmox VE QEMU: ");
foreach ($qemu as $vm)
{
// [cpu] => 0
// [cpus] => 2
// [disk] => 0
// [diskread] => 0
// [diskwrite] => 0
// [maxdisk] => 53687091200
// [maxmem] => 1610612736
// [mem] => 1158195243
// [name] => testvm.example.com
// [netin] => 32192265743
// [netout] => 1538266557
// [pid] => 760125
// [status] => running
// [template] =>
// [uptime] => 1135198
// [vmid] => 100
foreach ($qemu as $vm) {
// [cpu] => 0
// [cpus] => 2
// [disk] => 0
// [diskread] => 0
// [diskwrite] => 0
// [maxdisk] => 53687091200
// [maxmem] => 1610612736
// [mem] => 1158195243
// [name] => testvm.example.com
// [netin] => 32192265743
// [netout] => 1538266557
// [pid] => 760125
// [status] => running
// [template] =>
// [uptime] => 1135198
// [vmid] => 100
discover_virtual_machine($valid['vm'], $device, array('id' => $vm->vmid, 'name' => $vm->name, 'cpucount' => $vm->cpus,
'memory' => $vm->maxmem, 'status' => $vm->status, 'type' => 'proxmox', 'source' => 'agent'));
discover_virtual_machine($valid['vm'], $device, ['id' => $vm -> vmid, 'name' => $vm -> name, 'cpucount' => $vm -> cpus,
'memory' => $vm -> maxmem, 'status' => $vm -> status, 'type' => 'proxmox', 'source' => 'agent']);
}
echo(PHP_EOL);

View File

@ -5,72 +5,67 @@
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @subpackage raspberrypi
* @author Dennis de Houx <info@all-in-one.be>
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2021 Observium Limited
* @version 1.1.0
* @package observium
* @subpackage poller
* @subpackage raspberrypi
* @author Dennis de Houx <info@all-in-one.be>
* @copyright (C) Adam Armstrong
* @version 1.1.0
*
*/
global $agent_sensors;
if ($agent_data['raspberrypi'] != ':')
{
echo "raspberrypi: ";
if ($agent_data['raspberrypi'] != ':') {
echo "raspberrypi: ";
$rpi_sensors = explode("\n", $agent_data['raspberrypi']);
$rpi_sensors = explode("\n", $agent_data['raspberrypi']);
foreach ($rpi_sensors as $item => $rpi_sensor)
{
$rpi_sensor = trim($rpi_sensor);
foreach ($rpi_sensors as $item => $rpi_sensor) {
$rpi_sensor = trim($rpi_sensor);
if (!empty($rpi_sensor))
{
$data = explode(":", $rpi_sensor);
list($type,$info) = explode("-", $data[0], 2);
if (!empty($rpi_sensor)) {
$data = explode(":", $rpi_sensor);
[$type, $info] = explode("-", $data[0], 2);
switch ($type)
{
case 'clock':
$sensorindex = ++$clockcount;
$sensortype = 'frequency';
break;
case 'volts':
$sensorindex = ++$voltcount;
$sensortype = 'voltage';
break;
case 'temp':
$sensorindex = ++$tempcount;
$sensortype = 'temperature';
$info = 'Raspberry Pi';
break;
case 'model':
$hardware = $data[1];
break;
default:
unset($sensortype);
break;
}
switch ($type) {
case 'clock':
$sensorindex = ++$clockcount;
$sensortype = 'frequency';
break;
case 'volts':
$sensorindex = ++$voltcount;
$sensortype = 'voltage';
break;
case 'temp':
$sensorindex = ++$tempcount;
$sensortype = 'temperature';
$info = 'Raspberry Pi';
break;
case 'model':
$hardware = $data[1];
break;
default:
unset($sensortype);
break;
}
if (isset($sensortype))
{
$value = trim($data[1]);
discover_sensor($sensortype, $device, '', $sensorindex, 'raspberrypi', $info, 1, $value, array(), 'agent');
$agent_sensors[$sensortype]['raspberrypi'][$sensorindex] = array('description' => $info, 'current' => $value, 'index' => $sensorindex);
}
if (isset($sensortype)) {
$value = trim($data[1]);
discover_sensor($sensortype, $device, '', $sensorindex, 'raspberrypi', $info, 1, $value, [], 'agent');
$agent_sensors[$sensortype]['raspberrypi'][$sensorindex] = ['description' => $info, 'current' => $value, 'index' => $sensorindex];
}
}
}
}
echo(PHP_EOL);
unset($voltcount);
unset($tempcount);
unset($clockcount);
unset($sensorindex);
unset($value);
unset($rpi_sensors);
unset($rpi_sensor);
echo(PHP_EOL);
unset($voltcount);
unset($tempcount);
unset($clockcount);
unset($sensorindex);
unset($value);
unset($rpi_sensors);
unset($rpi_sensor);
}
// EOF