refactor: Small poller improvements, removes unecessary queries / execs (#4741)

This commit is contained in:
Neil Lathwood
2016-10-15 02:03:26 +01:00
committed by Tony Murray
parent 123bb7f826
commit d86b39395a
8 changed files with 180 additions and 157 deletions

View File

@@ -1267,11 +1267,12 @@ function get_ports_mapped($device_id, $with_statistics = false)
'ifDescr' => array(), 'ifDescr' => array(),
); );
/* Query all information available for ports for this device ... */
$query = 'SELECT * FROM `ports` WHERE `device_id` = ? ORDER BY port_id';
if ($with_statistics) { if ($with_statistics) {
/* ... including any related ports_statistics if requested */ /* ... including any related ports_statistics if requested */
$query = 'SELECT *, `ports_statistics`.`port_id` AS `ports_statistics_port_id`, `ports`.`port_id` AS `port_id` FROM `ports` LEFT OUTER JOIN `ports_statistics` ON `ports`.`port_id` = `ports_statistics`.`port_id` WHERE `ports`.`device_id` = ? ORDER BY ports.port_id'; $query = 'SELECT *, `ports_statistics`.`port_id` AS `ports_statistics_port_id`, `ports`.`port_id` AS `port_id` FROM `ports` LEFT OUTER JOIN `ports_statistics` ON `ports`.`port_id` = `ports_statistics`.`port_id` WHERE `ports`.`device_id` = ? ORDER BY ports.port_id';
} else {
/* Query all information available for ports for this device ... */
$query = 'SELECT * FROM `ports` WHERE `device_id` = ? ORDER BY port_id';
} }
// Query known ports in order of discovery to make sure the latest // Query known ports in order of discovery to make sure the latest

View File

@@ -1,11 +1,8 @@
<?php <?php
$sql = "SELECT * FROM `applications` WHERE `device_id` = '".$device['device_id']."'";
d_echo($sql."\n");
$app_rows = dbFetchRows('SELECT * FROM `applications` WHERE `device_id` = ?', array($device['device_id'])); $app_rows = dbFetchRows('SELECT * FROM `applications` WHERE `device_id` = ?', array($device['device_id']));
if (count($app_rows)) { if (count($app_rows) > 0) {
foreach ($app_rows as $app) { foreach ($app_rows as $app) {
$app_include = $config['install_dir'].'/includes/polling/applications/'.$app['app_type'].'.inc.php'; $app_include = $config['install_dir'].'/includes/polling/applications/'.$app['app_type'].'.inc.php';
if (is_file($app_include)) { if (is_file($app_include)) {

View File

@@ -1,59 +1,65 @@
<?php <?php
$rserver_array = snmpwalk_cache_oid($device, 'cesServerFarmRserverTable', array(), 'CISCO-ENHANCED-SLB-MIB'); if ($device['os_group'] == 'cisco') {
$rserver_db = dbFetchRows('SELECT * FROM `loadbalancer_rservers` WHERE `device_id` = ?', array($device['device_id'])); $rserver_array = snmpwalk_cache_oid($device, 'cesServerFarmRserverTable', array(), 'CISCO-ENHANCED-SLB-MIB');
$rserver_db = dbFetchRows('SELECT * FROM `loadbalancer_rservers` WHERE `device_id` = ?', array($device['device_id']));
foreach ($rserver_db as $serverfarm) { foreach ($rserver_db as $serverfarm) {
$serverfarms[$serverfarm['farm_id']] = $serverfarm; $serverfarms[$serverfarm['farm_id']] = $serverfarm;
}
foreach ($rserver_array as $index => $serverfarm) {
$farm_id = preg_replace('@\d+\."(.*?)"\.\d+@', '\\1', $index);
$oids = array(
'cesServerFarmRserverTotalConns',
'cesServerFarmRserverCurrentConns',
'cesServerFarmRserverFailedConns',
);
$db_oids = array(
$farm_id => 'farm_id',
'cesServerFarmRserverStateDescr' => 'StateDescr',
);
if (!is_array($serverfarms[$farm_id])) {
$rserver_id = dbInsert(array('device_id' => $device['device_id'], 'farm_id' => $farm_id, 'StateDescr' => $serverfarm['cesServerFarmRserverStateDescr']), 'loadbalancer_rservers');
} else {
foreach ($db_oids as $db_oid => $db_value) {
$db_update[$db_value] = $serverfarm[$db_oid];
}
$updated = dbUpdate($db_update, 'loadbalancer_rservers', '`rserver_id` = ?', $serverfarm['cesServerFarmRserverFailedConns']['farm_id']);
} }
$rrd_name = array('rserver', $serverfarms[$farm_id]['rserver_id']); foreach ($rserver_array as $index => $serverfarm) {
$farm_id = preg_replace('@\d+\."(.*?)"\.\d+@', '\\1', $index);
$rrd_def = array(); $oids = array(
foreach ($oids as $oid) { 'cesServerFarmRserverTotalConns',
$oid_ds = truncate(str_replace('cesServerFarm', '', $oid), 19, ''); 'cesServerFarmRserverCurrentConns',
$rrd_def[] = "DS:$oid_ds:GAUGE:600:-1:100000000"; 'cesServerFarmRserverFailedConns',
} );
$fields = array(); $db_oids = array(
$farm_id => 'farm_id',
'cesServerFarmRserverStateDescr' => 'StateDescr',
);
foreach ($oids as $oid) { if (!is_array($serverfarms[$farm_id])) {
if (is_numeric($serverfarm[$oid])) { $rserver_id = dbInsert(array(
$value = $serverfarm[$oid]; 'device_id' => $device['device_id'],
'farm_id' => $farm_id,
'StateDescr' => $serverfarm['cesServerFarmRserverStateDescr']
), 'loadbalancer_rservers');
} else { } else {
$value = '0'; foreach ($db_oids as $db_oid => $db_value) {
$db_update[$db_value] = $serverfarm[$db_oid];
}
$updated = dbUpdate($db_update, 'loadbalancer_rservers', '`rserver_id` = ?', $serverfarm['cesServerFarmRserverFailedConns']['farm_id']);
} }
$fields[$oid] = $value;
}
if (isset($serverfarms[$farm_id])) { $rrd_name = array('rserver', $serverfarms[$farm_id]['rserver_id']);
$tags = compact('farm_id', 'rrd_name', 'rrd_def');
data_update($device, 'rservers', $tags, $fields);
}
}//end foreach
unset($rrd_name, $rrd_def, $oids, $oid, $serverfarm); $rrd_def = array();
foreach ($oids as $oid) {
$oid_ds = truncate(str_replace('cesServerFarm', '', $oid), 19, '');
$rrd_def[] = "DS:$oid_ds:GAUGE:600:-1:100000000";
}
$fields = array();
foreach ($oids as $oid) {
if (is_numeric($serverfarm[$oid])) {
$value = $serverfarm[$oid];
} else {
$value = '0';
}
$fields[$oid] = $value;
}
if (isset($serverfarms[$farm_id])) {
$tags = compact('farm_id', 'rrd_name', 'rrd_def');
data_update($device, 'rservers', $tags, $fields);
}
}//end foreach
unset($rrd_name, $rrd_def, $oids, $oid, $serverfarm);
}

View File

@@ -1,62 +1,69 @@
<?php <?php
$serverfarm_array = snmpwalk_cache_oid($device, 'slbVServerInfoTable', array(), 'CISCO-SLB-MIB'); if ($device['os_group'] == 'cisco') {
$serverfarm_db = dbFetchRows('SELECT * FROM `loadbalancer_vservers` WHERE `device_id` = ?', array($device['device_id'])); $serverfarm_array = snmpwalk_cache_oid($device, 'slbVServerInfoTable', array(), 'CISCO-SLB-MIB');
$serverfarm_db = dbFetchRows('SELECT * FROM `loadbalancer_vservers` WHERE `device_id` = ?', array($device['device_id']));
foreach ($serverfarm_db as $vserver) { foreach ($serverfarm_db as $vserver) {
$classmaps[$vserver['classmap']] = $vserver; $classmaps[$vserver['classmap']] = $vserver;
}
foreach ($serverfarm_array as $index => $vserver) {
$classmap = str_replace('class-map-', '', $vserver['slbVServerClassMap']);
$classmap_id = str_replace('9.', '', $index);
$oids = array(
'slbVServerNumberOfConnections',
'slbVServerDroppedConnections',
'slbVServerClientPacketCounts',
'slbVServerClientByteCounts',
'slbVServerPacketCounts',
'slbVServerByteCounts',
);
$db_oids = array(
$classmap_id => 'classmap_id',
$classmap => 'classmap',
'slbVServerState' => 'serverstate',
);
if (!is_array($classmaps[$classmap])) {
$classmap_in = dbInsert(array('device_id' => $device['device_id'], 'classmap_id' => $classmap_id, 'classmap' => $classmap, 'serverstate' => $vserver['slbVServerState']), 'loadbalancer_vservers');
} else {
foreach ($db_oids as $db_oid => $db_value) {
$db_update[$db_value] = $vserver[$db_oid];
}
$updated = dbUpdate($db_update, 'loadbalancer_vservers', '`classmap_id` = ?', $vserver['slbVServerState']['classmap']);
} }
$rrd_name = array('vserver', $classmap_id); foreach ($serverfarm_array as $index => $vserver) {
$rrd_def = array(); $classmap = str_replace('class-map-', '', $vserver['slbVServerClassMap']);
foreach ($oids as $oid) { $classmap_id = str_replace('9.', '', $index);
$oid_ds = truncate(str_replace('slbVServer', '', $oid), 19, '');
$rrd_def[] = "DS:$oid_ds:COUNTER:600:U:1000000000";
}
$fields = array(); $oids = array(
foreach ($oids as $oid) { 'slbVServerNumberOfConnections',
if (is_numeric($vserver[$oid])) { 'slbVServerDroppedConnections',
$value = $vserver[$oid]; 'slbVServerClientPacketCounts',
'slbVServerClientByteCounts',
'slbVServerPacketCounts',
'slbVServerByteCounts',
);
$db_oids = array(
$classmap_id => 'classmap_id',
$classmap => 'classmap',
'slbVServerState' => 'serverstate',
);
if (!is_array($classmaps[$classmap])) {
$classmap_in = dbInsert(array(
'device_id' => $device['device_id'],
'classmap_id' => $classmap_id,
'classmap' => $classmap,
'serverstate' => $vserver['slbVServerState']
), 'loadbalancer_vservers');
} else { } else {
$value = '0'; foreach ($db_oids as $db_oid => $db_value) {
$db_update[$db_value] = $vserver[$db_oid];
}
$updated = dbUpdate($db_update, 'loadbalancer_vservers', '`classmap_id` = ?', $vserver['slbVServerState']['classmap']);
} }
$fields[$oid] = $value;
}
if (isset($classmaps[$classmap])) { $rrd_name = array('vserver', $classmap_id);
$tags = compact('classmap_id', 'rrd_name', 'rrd_def'); $rrd_def = array();
data_update($device, 'vservers', $tags, $fields); foreach ($oids as $oid) {
} $oid_ds = truncate(str_replace('slbVServer', '', $oid), 19, '');
}//end foreach $rrd_def[] = "DS:$oid_ds:COUNTER:600:U:1000000000";
}
unset($rrd_name, $rrd_def, $oids, $oid, $vserver); $fields = array();
foreach ($oids as $oid) {
if (is_numeric($vserver[$oid])) {
$value = $vserver[$oid];
} else {
$value = '0';
}
$fields[$oid] = $value;
}
if (isset($classmaps[$classmap])) {
$tags = compact('classmap_id', 'rrd_name', 'rrd_def');
data_update($device, 'vservers', $tags, $fields);
}
}//end foreach
unset($rrd_name, $rrd_def, $oids, $oid, $vserver);
}

View File

@@ -3,7 +3,7 @@
// Gather our SLA's from the DB. // Gather our SLA's from the DB.
$slas = dbFetchRows('SELECT * FROM `slas` WHERE `device_id` = ? AND `deleted` = 0', array($device['device_id'])); $slas = dbFetchRows('SELECT * FROM `slas` WHERE `device_id` = ? AND `deleted` = 0', array($device['device_id']));
if (count($slas > 0)) { if (count($slas) > 0) {
// We have SLA's, lets go!!! // We have SLA's, lets go!!!
// Go get some data from the device. // Go get some data from the device.

View File

@@ -2,56 +2,65 @@
$ipmi_rows = dbFetchRows("SELECT * FROM sensors WHERE device_id = ? AND poller_type='ipmi'", array($device['device_id'])); $ipmi_rows = dbFetchRows("SELECT * FROM sensors WHERE device_id = ? AND poller_type='ipmi'", array($device['device_id']));
d_echo($ipmi_rows); if (is_array($ipmi_rows)) {
d_echo($ipmi_rows);
if ($ipmi['host'] = get_dev_attrib($device, 'ipmi_hostname')) { if ($ipmi['host'] = $attribs['ipmi_hostname']) {
$ipmi['user'] = get_dev_attrib($device, 'ipmi_username'); $ipmi['user'] = $attribs['ipmi_username'];
$ipmi['password'] = get_dev_attrib($device, 'ipmi_password'); $ipmi['password'] = $attribs['ipmi_password'];
$ipmi['type'] = get_dev_attrib($device, 'ipmi_type'); $ipmi['type'] = $attribs['ipmi_type'];
echo 'Fetching IPMI sensor data...';
if ($config['own_hostname'] != $device['hostname'] || $ipmi['host'] != 'localhost') { echo 'Fetching IPMI sensor data...';
$remote = " -H ".$ipmi['host']." -U '".$ipmi['user']."' -P '".$ipmi['password']."' -L USER";
if ($config['own_hostname'] != $device['hostname'] || $ipmi['host'] != 'localhost') {
$remote = " -H " . $ipmi['host'] . " -U '" . $ipmi['user'] . "' -P '" . $ipmi['password'] . "' -L USER";
}
$results = external_exec($config['ipmitool'] . ' -I ' . $ipmi['type'] . ' -c ' . $remote . ' sdr 2>/dev/null');
d_echo($results);
echo " done.\n";
foreach (explode("\n", $results) as $row) {
list($desc, $value, $type, $status) = explode(',', $row);
$ipmi_sensor[$desc][$config['ipmi_unit'][$type]]['value'] = $value;
$ipmi_sensor[$desc][$config['ipmi_unit'][$type]]['unit'] = $type;
}
foreach ($ipmi_rows as $ipmisensors) {
echo 'Updating IPMI sensor ' . $ipmisensors['sensor_descr'] . '... ';
$sensor = $ipmi_sensor[$ipmisensors['sensor_descr']][$ipmisensors['sensor_class']]['value'];
$unit = $ipmi_sensor[$ipmisensors['sensor_descr']][$ipmisensors['sensor_class']]['unit'];
echo $sensor . " $unit\n";
$rrd_name = get_sensor_rrd_name($device, $ipmisensors);
$rrd_def = 'DS:sensor:GAUGE:600:-20000:20000';
$fields = array(
'sensor' => $sensor,
);
$tags = array(
'sensor_class' => $sensor['sensor_class'],
'sensor_type' => $sensor['sensor_type'],
'sensor_descr' => $sensor['sensor_descr'],
'sensor_index' => $sensor['sensor_index'],
'rrd_name' => $rrd_name,
'rrd_def' => $rrd_def
);
data_update($device, 'ipmi', $tags, $fields);
// FIXME warnings in event & mail not done here yet!
dbUpdate(
array('sensor_current' => $sensor,
'lastupdate' => array('NOW()')),
'sensors',
'poller_type = ? AND sensor_class = ? AND sensor_id = ?',
array('ipmi', $ipmisensors['sensor_class'], $ipmisensors['sensor_id'])
);
}
unset($ipmi_sensor);
} }
$results = external_exec($config['ipmitool'].' -I '.$ipmi['type'].' -c '.$remote.' sdr 2>/dev/null');
d_echo($results);
echo " done.\n";
foreach (explode("\n", $results) as $row) {
list($desc,$value,$type,$status) = explode(',', $row);
$ipmi_sensor[$desc][$config['ipmi_unit'][$type]]['value'] = $value;
$ipmi_sensor[$desc][$config['ipmi_unit'][$type]]['unit'] = $type;
}
foreach ($ipmi_rows as $ipmisensors) {
echo 'Updating IPMI sensor '.$ipmisensors['sensor_descr'].'... ';
$sensor = $ipmi_sensor[$ipmisensors['sensor_descr']][$ipmisensors['sensor_class']]['value'];
$unit = $ipmi_sensor[$ipmisensors['sensor_descr']][$ipmisensors['sensor_class']]['unit'];
echo $sensor." $unit\n";
$rrd_name = get_sensor_rrd_name($device, $ipmisensors);
$rrd_def = 'DS:sensor:GAUGE:600:-20000:20000';
$fields = array(
'sensor' => $sensor,
);
$tags = array(
'sensor_class' => $sensor['sensor_class'],
'sensor_type' => $sensor['sensor_type'],
'sensor_descr' => $sensor['sensor_descr'],
'sensor_index' => $sensor['sensor_index'],
'rrd_name' => $rrd_name,
'rrd_def' => $rrd_def
);
data_update($device, 'ipmi', $tags, $fields);
// FIXME warnings in event & mail not done here yet!
dbUpdate(array('sensor_current' => $sensor, 'lastupdate' => array('NOW()')), 'sensors', 'poller_type = ? AND sensor_class = ? AND sensor_id = ?', array('ipmi', $ipmisensors['sensor_class'], $ipmisensors['sensor_id']));
}
unset($ipmi_sensor);
} }

View File

@@ -16,7 +16,6 @@
// Pre-cache existing state of STP for this device from database // Pre-cache existing state of STP for this device from database
$stp_db = dbFetchRow('SELECT * FROM `stp` WHERE `device_id` = ?', array($device['device_id'])); $stp_db = dbFetchRow('SELECT * FROM `stp` WHERE `device_id` = ?', array($device['device_id']));
//d_echo($stp_db);
$stpprotocol = snmp_get($device, 'dot1dStpProtocolSpecification.0', '-Oqv', 'RSTP-MIB'); $stpprotocol = snmp_get($device, 'dot1dStpProtocolSpecification.0', '-Oqv', 'RSTP-MIB');

View File

@@ -132,7 +132,11 @@ if (!isset($query)) {
foreach (dbFetch($query) as $device) { foreach (dbFetch($query) as $device) {
$device = dbFetchRow("SELECT * FROM `devices` WHERE `device_id` = " .$device['device_id']); $device = dbFetchRow("SELECT * FROM `devices` WHERE `device_id` = " .$device['device_id']);
$device['vrf_lite_cisco'] = dbFetchRows("SELECT * FROM `vrf_lite_cisco` WHERE `device_id` = ".$device['device_id']); if ($device['os_group'] == 'cisco') {
$device['vrf_lite_cisco'] = dbFetchRows("SELECT * FROM `vrf_lite_cisco` WHERE `device_id` = " . $device['device_id']);
} else {
$device['vrf_lite_cisco'] = '';
}
poll_device($device, $options); poll_device($device, $options);
echo "#### Start Alerts ####\n"; echo "#### Start Alerts ####\n";
RunRules($device['device_id']); RunRules($device['device_id']);