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)
{