From 1d4b392876e095fcee5b83095c2980cc4b957185 Mon Sep 17 00:00:00 2001 From: Adam Amstrong Date: Fri, 25 May 2012 18:35:17 +0000 Subject: [PATCH] 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 --- html/pages/device/health/mempool.inc.php | 8 ++++ html/pages/device/overview/mempools.inc.php | 9 +++++ html/pages/device/port.inc.php | 10 ++--- html/pages/device/ports.inc.php | 10 ++--- html/pages/health/mempool.inc.php | 9 +++++ html/pages/ports.inc.php | 10 ++--- includes/polling/functions.inc.php | 2 +- includes/polling/mempools.inc.php | 13 ++++-- includes/polling/ports.inc.php | 44 +++++++++++++++------ 9 files changed, 82 insertions(+), 33 deletions(-) diff --git a/html/pages/device/health/mempool.inc.php b/html/pages/device/health/mempool.inc.php index fe0f22d53..045e58eab 100644 --- a/html/pages/device/health/mempool.inc.php +++ b/html/pages/device/health/mempool.inc.php @@ -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/"; diff --git a/html/pages/device/overview/mempools.inc.php b/html/pages/device/overview/mempools.inc.php index 9edd52140..546c045ca 100644 --- a/html/pages/device/overview/mempools.inc.php +++ b/html/pages/device/overview/mempools.inc.php @@ -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']); diff --git a/html/pages/device/port.inc.php b/html/pages/device/port.inc.php index 3c0f2e072..fe68e28b5 100644 --- a/html/pages/device/port.inc.php +++ b/html/pages/device/port.inc.php @@ -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; diff --git a/html/pages/device/ports.inc.php b/html/pages/device/ports.inc.php index 9a97af54e..df7c691d6 100644 --- a/html/pages/device/ports.inc.php +++ b/html/pages/device/ports.inc.php @@ -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"); diff --git a/html/pages/health/mempool.inc.php b/html/pages/health/mempool.inc.php index fbcfcc655..5cb1da5a3 100644 --- a/html/pages/health/mempool.inc.php +++ b/html/pages/health/mempool.inc.php @@ -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"; diff --git a/html/pages/ports.inc.php b/html/pages/ports.inc.php index b3a7f09b0..b63a39305 100644 --- a/html/pages/ports.inc.php +++ b/html/pages/ports.inc.php @@ -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); } } } diff --git a/includes/polling/functions.inc.php b/includes/polling/functions.inc.php index 5f6683cf8..cca672079 100644 --- a/includes/polling/functions.inc.php +++ b/includes/polling/functions.inc.php @@ -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 { diff --git a/includes/polling/mempools.inc.php b/includes/polling/mempools.inc.php index ee0d3405d..bc167dcae 100755 --- a/includes/polling/mempools.inc.php +++ b/includes/polling/mempools.inc.php @@ -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"); } diff --git a/includes/polling/ports.inc.php b/includes/polling/ports.inc.php index 25ad38486..f8fdae786 100755 --- a/includes/polling/ports.inc.php +++ b/includes/polling/ports.inc.php @@ -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) {