From 831724ab31fd3703a064d5451c8599f7bc6bcaed Mon Sep 17 00:00:00 2001 From: Tom Laermans Date: Wed, 24 Nov 2010 12:00:09 +0000 Subject: [PATCH] make snmpwalk_cache_multi_oid really do what its name says, cache - should speed up junos bgp counters tremendously on large number of sessions git-svn-id: http://www.observium.org/svn/observer/trunk@1737 61d68cd4-352d-0410-923a-c4978735b2b8 --- includes/snmp.inc.php | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/includes/snmp.inc.php b/includes/snmp.inc.php index d9265e8f2f..ec7fd23fcf 100644 --- a/includes/snmp.inc.php +++ b/includes/snmp.inc.php @@ -230,23 +230,32 @@ function snmpwalk_cache_oid($device, $oid, $array, $mib = NULL, $mibdir = NULL) function snmpwalk_cache_multi_oid($device, $oid, $array, $mib = NULL, $mibdir = NULL) { - $data = snmp_walk($device, $oid, "-OQUs", $mib, $mibdir); - foreach(explode("\n", $data) as $entry) { - list($oid,$value) = explode("=", $entry); - $oid = trim($oid); $value = trim($value); - $oid_parts = explode(".", $oid); - $oid = $oid_parts['0']; - $index = $oid_parts['1']; - if (isset($oid_parts['2'])) { $index .= ".".$oid_parts['2']; } - if (isset($oid_parts['3'])) { $index .= ".".$oid_parts['3']; } - if (isset($oid_parts['4'])) { $index .= ".".$oid_parts['4']; } - if (isset($oid_parts['5'])) { $index .= ".".$oid_parts['5']; } - if (isset($oid_parts['6'])) { $index .= ".".$oid_parts['6']; } - if (!strstr($value, "at this OID") && isset($oid) && isset($index)) { - $array[$index][$oid] = $value; + global $cache; + + if (!array_key_exists($oid,$cache['snmp'][$device['device_id']])) + { + $data = snmp_walk($device, $oid, "-OQUs", $mib, $mibdir); + foreach(explode("\n", $data) as $entry) + { + list($r_oid,$value) = explode("=", $entry); + $r_oid = trim($r_oid); $value = trim($value); + $oid_parts = explode(".", $r_oid); + $r_oid = $oid_parts['0']; + $index = $oid_parts['1']; + if (isset($oid_parts['2'])) { $index .= ".".$oid_parts['2']; } + if (isset($oid_parts['3'])) { $index .= ".".$oid_parts['3']; } + if (isset($oid_parts['4'])) { $index .= ".".$oid_parts['4']; } + if (isset($oid_parts['5'])) { $index .= ".".$oid_parts['5']; } + if (isset($oid_parts['6'])) { $index .= ".".$oid_parts['6']; } + if (!strstr($value, "at this OID") && isset($r_oid) && isset($index)) + { + $array[$index][$r_oid] = $value; + } } + $cache['snmp'][$device['device_id']][$oid] = $array; } - return $array; + + return $cache['snmp'][$device['device_id']][$oid]; }