diff --git a/includes/polling/system.inc.php b/includes/polling/system.inc.php index 44869a1e9..0e58e007d 100644 --- a/includes/polling/system.inc.php +++ b/includes/polling/system.inc.php @@ -28,43 +28,43 @@ if (!empty($agent_data['uptime'])) { } if (empty($uptime)) { - $hrSystemUptime = snmp_get($device, 'hrSystemUptime.0', '-Oqv', 'HOST-RESOURCES-MIB'); - if (!empty($hrSystemUptime) && !strpos($hrSystemUptime, 'No') && ($device['os'] != 'windows')) { - echo 'Using hrSystemUptime ('.$hrSystemUptime.")\n"; - $agent_uptime = $uptime; - // Move uptime into agent_uptime - // HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (63050465) 7 days, 7:08:24.65 - $hrSystemUptime = str_replace('(', '', $hrSystemUptime); - $hrSystemUptime = str_replace(')', '', $hrSystemUptime); - list($days,$hours, $mins, $secs) = explode(':', $hrSystemUptime); - list($secs, $microsecs) = explode('.', $secs); - $hours = ($hours + ($days * 24)); - $mins = ($mins + ($hours * 60)); - $secs = ($secs + ($mins * 60)); - $uptime = $secs; + $uptime = (integer) snmp_get($device, 'snmpEngineTime.0', '-OUqv', 'SNMP-FRAMEWORK-MIB'); + if (!is_numeric($snmpEngineTime)) { + $hrSystemUptime = snmp_get($device, 'hrSystemUptime.0', '-Oqv', 'HOST-RESOURCES-MIB'); + if (!empty($hrSystemUptime) && !strpos($hrSystemUptime, 'No') && ($device['os'] != 'windows')) { + echo 'Using hrSystemUptime ('.$hrSystemUptime.")\n"; + $agent_uptime = $uptime; + // Move uptime into agent_uptime + // HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (63050465) 7 days, 7:08:24.65 + $hrSystemUptime = str_replace('(', '', $hrSystemUptime); + $hrSystemUptime = str_replace(')', '', $hrSystemUptime); + list($days,$hours, $mins, $secs) = explode(':', $hrSystemUptime); + list($secs, $microsecs) = explode('.', $secs); + $hours = ($hours + ($days * 24)); + $mins = ($mins + ($hours * 60)); + $secs = ($secs + ($mins * 60)); + $uptime = $secs; + } + else { + echo 'Using SNMP Agent Uptime ('.$poll_device['sysUpTime'].")\n"; + // SNMPv2-MIB::sysUpTime.0 = Timeticks: (2542831) 7:03:48.31 + $poll_device['sysUpTime'] = str_replace('(', '', $poll_device['sysUpTime']); + $poll_device['sysUpTime'] = str_replace(')', '', $poll_device['sysUpTime']); + list($days, $hours, $mins, $secs) = explode(':', $poll_device['sysUpTime']); + list($secs, $microsecs) = explode('.', $secs); + $hours = ($hours + ($days * 24)); + $mins = ($mins + ($hours * 60)); + $secs = ($secs + ($mins * 60)); + $uptime = $secs; + }//end if } else { - echo 'Using SNMP Agent Uptime ('.$poll_device['sysUpTime'].")\n"; - // SNMPv2-MIB::sysUpTime.0 = Timeticks: (2542831) 7:03:48.31 - $poll_device['sysUpTime'] = str_replace('(', '', $poll_device['sysUpTime']); - $poll_device['sysUpTime'] = str_replace(')', '', $poll_device['sysUpTime']); - list($days, $hours, $mins, $secs) = explode(':', $poll_device['sysUpTime']); - list($secs, $microsecs) = explode('.', $secs); - $hours = ($hours + ($days * 24)); - $mins = ($mins + ($hours * 60)); - $secs = ($secs + ($mins * 60)); - $uptime = $secs; + echo 'Using snmpEngineTime ('.$uptime.")\n"; }//end if }//end if -// Use snmpEngineTime (68 year rollover) to cross-reference for false positives in device rebooting due to sysUpTime rollover issues -$snmpEngineTime = (integer) snmp_get($device, 'snmpEngineTime.0', '-OUqv', 'SNMP-FRAMEWORK-MIB'); -if (!is_numeric($snmpEngineTime)) { - $snmpEngineTime = 0; -} - if (is_numeric($uptime)) { - if ($uptime < $device['uptime'] && $uptime >= $snmpEngineTime) { + if ($uptime < $device['uptime']) { notify($device, 'Device rebooted: '.$device['hostname'], 'Device Rebooted : '.$device['hostname'].' '.formatUptime($uptime).' ago.'); log_event('Device rebooted after '.formatUptime($device['uptime']), $device, 'reboot', $device['uptime']); }