push more state to memcached fix sensors poller to not retry all temperature sensors where return >9000 5 times (lmsensors returns milliC, so 30000 for 30C)

git-svn-id: http://www.observium.org/svn/observer/trunk@3244 61d68cd4-352d-0410-923a-c4978735b2b8
This commit is contained in:
Adam Amstrong
2012-05-25 18:35:17 +00:00
parent 08bb2d16ec
commit 1d4b392876
9 changed files with 82 additions and 33 deletions

View File

@@ -13,6 +13,14 @@ foreach (dbFetchRows("SELECT * FROM `mempools` WHERE device_id = ?", array($devi
{
if (!is_integer($i/2)) { $row_colour = $list_colour_a; } else { $row_colour = $list_colour_b; }
if ($config['memcached']['enable'])
{
$state = $memcache->get('mempool-'.$mempool['mempool_id'].'-state');
if($debug) { print_r($state); }
if(is_array($state)) { $mempool = array_merge($mempool, $state); }
unset($state);
}
$text_descr = rewrite_entity_descr($mempool['mempool_descr']);
$mempool_url = "device/".$device['device_id']."/health/mempool/";

View File

@@ -14,6 +14,15 @@ if (count($mempools))
foreach ($mempools as $mempool)
{
if ($config['memcached']['enable'])
{
$state = $memcache->get('mempool-'.$mempool['mempool_id'].'-state');
if($debug) { print_r($state); }
if(is_array($state)) { $mempool = array_merge($mempool, $state); }
unset($state);
}
$percent= round($mempool['mempool_perc'],0);
$text_descr = rewrite_entity_descr($mempool['mempool_descr']);
$total = formatStorage($mempool['mempool_total']);

View File

@@ -6,12 +6,10 @@ $port = dbFetchRow("SELECT * FROM `ports` WHERE `port_id` = ?", array($vars['por
if ($config['memcached']['enable'])
{
$oids = array('ifInOctets', 'ifOutOctets', 'ifInUcastPkts', 'ifOutUcastPkts', 'ifInErrors', 'ifOutErrors');
foreach ($oids as $oid)
{
$port[$oid.'_rate'] = $memcache->get('port-'.$port['port_id'].'-'.$oid.'_rate');
if ($debug) { echo("MC[".$oid."->".$port[$oid.'_rate']."]"); }
}
$state = $memcache->get('port-'.$port['port_id'].'-state');
if($debug) { print_r($state); }
if(is_array($state)) { $port = array_merge($port, $state); }
unset($state);
}
$port_details = 1;

View File

@@ -108,12 +108,10 @@ if ($vars['view'] == 'minigraphs')
{
if ($config['memcached']['enable'])
{
$oids = array('ifInOctets', 'ifOutOctets', 'ifInUcastPkts', 'ifOutUcastPkts', 'ifInErrors', 'ifOutErrors');
foreach ($oids as $oid)
{
$port[$oid.'_rate'] = $memcache->get('port-'.$port['port_id'].'-'.$oid.'_rate');
if ($debug) { echo("MC[".$oid."->".$port[$oid.'_rate']."]"); }
}
$state = $memcache->get('port-'.$port['port_id'].'-state');
if($debug) { print_r($state); }
if(is_array($state)) { $port = array_merge($port, $state); }
unset($state);
}
include("includes/print-interface.inc.php");

View File

@@ -19,6 +19,15 @@ foreach (dbFetchRows("SELECT * FROM `mempools` AS M, `devices` as D WHERE D.devi
{
$text_descr = $mempool['mempool_descr'];
if ($config['memcached']['enable'])
{
$state = $memcache->get('mempool-'.$mempool['mempool_id'].'-state');
if($debug) { print_r($state); }
if(is_array($state)) { $port = array_merge($mempool, $state); }
unset($state);
}
$mempool_url = "device/device=".$mempool['device_id']."/tab=health/metric=mempool/";
$mini_url = "graph.php?id=".$mempool['mempool_id']."&type=".$graph_type."&from=".$config['time']['day']."&to=".$config['time']['now']."&width=80&height=20&bg=f4f4f4";

View File

@@ -308,15 +308,15 @@ $ports = dbFetchRows($query, $param);
// FIXME - only populate what we need to search at this point, because we shouldn't show *all* ports, as it's silly.
foreach ($ports as $p)
foreach ($ports as $port)
{
if ($config['memcached']['enable'])
{
$oids = array('ifInOctets', 'ifOutOctets', 'ifInUcastPkts', 'ifOutUcastPkts', 'ifInErrors', 'ifOutErrors');
foreach ($oids as $oid)
if ($config['memcached']['enable'])
{
$ports[$port['port_id']][$oid.'_rate'] = $memcache->get('port-'.$port['port_id'].'-'.$oid.'_rate');
if ($debug) { echo("MC[".$oid."->".$port[$oid.'_rate']."]"); }
$state = $memcache->get('port-'.$port['port_id'].'-state');
if(is_array($state)) { $ports[$port['port_id']] = array_merge($port, $state); }
unset($state);
}
}
}

View File

@@ -17,7 +17,7 @@ function poll_sensor($device, $class, $unit)
if ($debug) echo("Attempt $i ");
$sensor_value = trim(str_replace("\"", "", snmp_get($device, $sensor['sensor_oid'], "-OUqnv", "SNMPv2-MIB")));
if ($sensor_value < 9000) break; # TME sometimes sends 999.9 when it is right in the middle of an update;
if (is_numeric($sensor_value) && $sensor_value != 9999) break; # TME sometimes sends 999.9 when it is right in the middle of an update;
sleep(1); # Give the TME some time to reset
}
} else {

View File

@@ -31,9 +31,16 @@ foreach (dbFetchRows("SELECT * FROM mempools WHERE device_id = ?", array($device
}
rrdtool_update($mempool_rrd,"N:".$mempool['used'].":".$mempool['free']);
dbUpdate(array('mempool_used' => $mempool['used'], 'mempool_perc' => $percent, 'mempool_free' => $mempool['free'],
'mempool_total' => $mempool['total'], 'mempool_largestfree' => $mempool['largestfree'], 'mempool_lowestfree' => $mempool['lowestfree']),
'mempools', '`mempool_id` = ?', array($mempool['mempool_id']));
$mempool['state'] = array('mempool_used' => $mempool['used'], 'mempool_perc' => $percent, 'mempool_free' => $mempool['free'],
'mempool_total' => $mempool['total'], 'mempool_largestfree' => $mempool['largestfree'], 'mempool_lowestfree' => $mempool['lowestfree']);
if ($config['memcached']['enable'])
{
if($debug) { print_r($mempool['state']); }
$memcache->set('mempool-'.$mempool['mempool_id'].'-value', $mempool['state']);
} else {
dbUpdate($mempool['state'], 'mempools', '`mempool_id` = ?', array($mempool['mempool_id']));
}
echo("\n");
}

View File

@@ -166,13 +166,17 @@ foreach ($ports as $port)
if ($config['memcached']['enable'])
{
$port['poll_time'] = $memcache->get('port-'.$port['port_id'].'-poll_time');
# echo("time".$port['poll_time']);
$state = $memcache->get('port-'.$port['port_id'].'-state');
if($debug) { print_r($state); }
if(is_array($state)) { $port = array_merge($port, $state); }
unset($state);
}
$polled_period = $polled - $port['poll_time'];
$port['update'] = array();
$port['state'] = array();
if ($config['slow_statistics'] == TRUE)
{
$port['update']['poll_time'] = $polled;
@@ -182,9 +186,9 @@ foreach ($ports as $port)
if ($config['memcached']['enable'])
{
$memcache->set('port-'.$port['port_id'].'-poll_time', $polled);
$memcache->set('port-'.$port['port_id'].'-poll_prev', $port['poll_time']);
$memcache->set('port-'.$port['port_id'].'-poll_period', $polled_period);
$port['state']['poll_time'] = $polled;
$port['state']['poll_prev'] = $port['poll_time'];
$port['state']['poll_period'] = $polled_period;
}
// Copy ifHC[In|Out]Octets values to non-HC if they exist
@@ -291,9 +295,8 @@ foreach ($ports as $port)
if ($config['memcached']['enable'])
{
$port[$oid] = $memcache->get('port-'.$port['port_id'].'-'.$oid);
$memcache->set('port-'.$port['port_id'].'-'.$oid, $this_port[$oid]);
$memcache->set('port-'.$port['port_id'].'-'.$oid.'_prev', $port[$oid]);
$port['state'][$oid] = $this_port[$oid];
$port['state'][$oid.'_prev'] = $port[$oid];
}
$oid_prev = $oid . "_prev";
@@ -311,10 +314,10 @@ foreach ($ports as $port)
}
if ($config['memcached']['enable'])
{
$memcache->set('port-'.$port['port_id'].'-'.$oid.'_rate', $oid_rate);
$memcache->set('port-'.$port['port_id'].'-'.$oid.'_delta', $oid_diff);
}
{
$port['state'][$oid.'_rate'] = $oid_rate;
$port['state'][$oid.'_delta'] = $oid_diff;
}
if ($debug) { echo("\n $oid ($oid_diff B) $oid_rate Bps $polled_period secs\n"); }
}
@@ -342,6 +345,14 @@ foreach ($ports as $port)
echo('bytes('.formatStorage($port['stats']['ifInOctets_diff']).'/'.formatStorage($port['stats']['ifOutOctets_diff']).')');
echo('pkts('.format_si($port['stats']['ifInUcastPkts_rate']).'pps/'.format_si($port['stats']['ifOutUcastPkts_rate']).'pps)');
// Store aggregate in/out state
if ($config['memcached']['enable'])
{
$port['state']['ifOctets_rate'] = $port['stats']['ifOutOctets_rate'] + $port['stats']['ifInOctets_rate'];
$port['state']['ifUcastPkts_rate'] = $port['stats']['ifOutUcastPkts_rate'] + $port['stats']['ifInUcastPkts_rate'];
$port['state']['ifErrors_rate'] = $port['stats']['ifOutErrors_rate'] + $port['stats']['ifInErrors_rate'];
}
// Port utilisation % threshold alerting. // FIXME allow setting threshold per-port. probably 90% of ports we don't care about.
if ($config['alerts']['port_util_alert'])
{
@@ -412,6 +423,13 @@ foreach ($ports as $port)
// Do Alcatel Detailed Stats
if ($device['os'] == "aos") { include("port-alcatel.inc.php"); }
// Update Memcached
if ($config['memcached']['enable'])
{
if($debug) { print_r($port['state']); }
$memcache->set('port-'.$port['port_id'].'-state', $port['state']);
}
// Update Database
if (count($port['update']))
{
@@ -420,6 +438,8 @@ foreach ($ports as $port)
}
// End Update Database
// Send alerts for interface flaps.
if ($config['alerts']['port']['ifdown'] && ($port['ifOperStatus'] != $this_port['ifOperStatus']) && $port['ignore'] == 0)
{