From cb88267717dca9880b791c2ad7daf60e0fa15087 Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Wed, 25 Sep 2013 16:33:06 +0100 Subject: [PATCH] Respect ignore_interfaces and i_ignore when detecting wrapped device uptime --- Netdisco/Changes | 4 ++++ Netdisco/lib/App/Netdisco/Core/Discover.pm | 14 +++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Netdisco/Changes b/Netdisco/Changes index 9449fe06..3bc52cf3 100644 --- a/Netdisco/Changes +++ b/Netdisco/Changes @@ -1,5 +1,9 @@ 2.017001 - + [ENHANCEMENTS] + + * Respect ignore_interfaces and i_ignore when detecting wrapped device uptime + [BUG FIXES] * Update NodeWireless entries which match both MAC and SSID found, only diff --git a/Netdisco/lib/App/Netdisco/Core/Discover.pm b/Netdisco/lib/App/Netdisco/Core/Discover.pm index e559275e..8241cde3 100644 --- a/Netdisco/lib/App/Netdisco/Core/Discover.pm +++ b/Netdisco/lib/App/Netdisco/Core/Discover.pm @@ -190,11 +190,8 @@ sub store_interfaces { # clear the cached uptime and get a new one my $dev_uptime = $snmp->load_uptime; - if (scalar grep {$_ > $dev_uptime} values %$i_lastchange) { - info sprintf ' [%s] interfaces - device uptime has wrapped - correcting', - $device->ip; - $device->uptime( $dev_uptime + 2**32 ); - } + # used to track whether we've wrapped the device uptime + my $dev_uptime_wrapped = 0; # build device interfaces suitable for DBIC my %interfaces; @@ -220,6 +217,13 @@ sub store_interfaces { next; } + if (not $dev_uptime_wrapped and $i_lastchange->{$entry} > $dev_uptime) { + info sprintf ' [%s] interfaces - device uptime wrapped (%s) - correcting', + $device->ip, $port; + $device->uptime( $dev_uptime + 2**32 ); + $dev_uptime_wrapped = 1; + } + my $lc = $i_lastchange->{$entry}; if ($device->is_column_changed('uptime') and $lc) { if ($lc < $dev_uptime) {