2007-04-03 14:10:23 +00:00
#!/usr/bin/php
< ?
include ( " config.php " );
include ( " includes/functions.php " );
2008-03-12 16:43:59 +00:00
echo ( " Observer Poller v $observer_version\n\n " );
2007-11-23 11:37:28 +00:00
if ( $argv [ 1 ] == " --device " && $argv [ 2 ]) {
$where = " AND `device_id` = ' " . $argv [ 2 ] . " ' " ;
} elseif ( $argv [ 1 ] == " --odd " ) {
$where = " AND MOD(device_id,2) = 1 " ;
} elseif ( $argv [ 1 ] == " --even " ) {
$where = " AND MOD(device_id,2) = 0 " ;
} elseif ( $argv [ 1 ] == " --all " ) {
$where = " " ;
} else {
echo ( " --device <device id> Poll single device \n " );
echo ( " --all Poll all devices \n \n " );
echo ( " No polling type specified! \n " );
exit ;
}
echo ( " Starting polling run: \n \n " );
$device_query = mysql_query ( " SELECT * FROM `devices` WHERE `ignore` = '0' $where ORDER BY `device_id` ASC " );
2007-04-03 14:10:23 +00:00
while ( $device = mysql_fetch_array ( $device_query )) {
2007-04-08 14:34:19 +00:00
2007-11-23 11:37:28 +00:00
echo ( " Polling " . $device [ 'hostname' ] . " ( " . $device [ 'device_id' ] . " ) \n \n " );
unset ( $update ); unset ( $update_query ); unset ( $seperator ); unset ( $version ); unset ( $uptime ); unset ( $features );
2008-03-12 16:22:26 +00:00
unset ( $location ); unset ( $hardware ); unset ( $sysDescr ); unset ( $sysContact );
2007-04-09 13:14:03 +00:00
2007-04-08 14:34:19 +00:00
$pingable = isPingable ( $device [ 'hostname' ]);
2007-11-23 11:37:28 +00:00
2008-03-12 13:13:50 +00:00
$host_rrd = $rrd_dir . " / " . $device [ 'hostname' ];
if ( ! is_dir ( $host_rrd )) { mkdir ( $host_rrd ); echo ( " Created directory : $host_rrd\n " ); }
2007-11-23 11:37:28 +00:00
if ( $pingable ) { echo ( " Pings : yes :) \n " ); } else { echo ( " Pings : no :( \n " ); }
2007-04-03 14:10:23 +00:00
$snmpable = FALSE ;
2007-04-08 14:34:19 +00:00
2007-04-03 14:10:23 +00:00
if ( $pingable ) {
2007-04-08 14:34:19 +00:00
$snmpable = isSNMPable ( $device [ 'hostname' ], $device [ 'community' ], $device [ 'snmpver' ]);
2007-11-23 11:37:28 +00:00
if ( $snmpable ) { echo ( " SNMP : yes :) " ); } else { echo ( " SNMP : no :( " ); }
2007-04-03 14:10:23 +00:00
}
2007-04-08 12:23:45 +00:00
2007-11-23 11:37:28 +00:00
echo ( " \n " );
2007-04-09 16:39:23 +00:00
if ( $snmpable ) {
2007-04-08 14:34:19 +00:00
$status = '1' ;
if ( $device [ 'os' ] == " FreeBSD " || $device [ 'os' ] == " OpenBSD " || $device [ 'os' ] == " Linux " || $device [ 'os' ] == " Windows " ) {
$uptimeoid = " .1.3.6.1.2.1.25.1.1.0 " ;
} else {
$uptimeoid = " 1.3.6.1.2.1.1.3.0 " ;
}
2007-11-23 11:37:28 +00:00
$snmp_cmd = " snmpget -O qv - " . $device [ 'snmpver' ] . " -c " . $device [ 'community' ] . " " . $device [ 'hostname' ];
$snmp_cmd .= " $uptimeoid sysLocation.0 sysContact.0 sysDescr.0 " ;
$snmp_cmd .= " | grep -v 'Cisco Internetwork Operating System Software' " ;
if ( $device [ 'os' ] == " IOS " ) {
$snmp_cmdb = " snmpget -O qv - " . $device [ 'snmpver' ] . " -c " . $device [ 'community' ] . " " . $device [ 'hostname' ];
$snmp_cmdb .= " .1.3.6.1.2.1.47.1.1.1.1.13.1 " ;
$snmp_cmdb .= " | grep -v 'Cisco Internetwork Operating System Software' " ;
$ciscomodel = str_replace ( " \" " , " " , trim ( `$snmp_cmdb` ));
} else { unset ( $ciscomodel ); }
2007-04-08 14:34:19 +00:00
$snmpdata = `$snmp_cmd` ;
2007-04-03 14:10:23 +00:00
$snmpdata = preg_replace ( " /^.*IOS/ " , " " , $snmpdata );
$snmpdata = trim ( $snmpdata );
2007-04-11 20:57:56 +00:00
$snmpdata = str_replace ( " \" " , " " , $snmpdata );
2007-11-23 11:37:28 +00:00
list ( $sysUptime , $sysLocation , $sysContact , $sysDescr ) = explode ( " \n " , $snmpdata );
2007-04-03 14:10:23 +00:00
$sysUptime = str_replace ( " ( " , " " , $sysUptime );
$sysUptime = str_replace ( " ) " , " " , $sysUptime );
list ( $days , $hours , $mins , $secs ) = explode ( " : " , $sysUptime );
list ( $secs , $microsecs ) = explode ( " . " , $secs );
$timeticks = mktime ( 0 , $secs , $mins , $hours , $days , 0 );
$hours = $hours + ( $days * 24 );
$mins = $mins + ( $hours * 60 );
$secs = $secs + ( $mins * 60 );
2007-04-08 21:27:05 +00:00
$uptime = $secs ;
2007-04-03 14:10:23 +00:00
2007-04-08 14:34:19 +00:00
switch ( $device [ 'os' ]) {
2007-04-03 14:10:23 +00:00
case " FreeBSD " :
case " DragonFly " :
case " OpenBSD " :
case " Linux " :
case " m0n0wall " :
case " Voswall " :
case " NetBSD " :
case " pfSense " :
2007-04-11 20:57:56 +00:00
if ( $device [ 'os' ] == " FreeBSD " ) {
2007-04-03 14:10:23 +00:00
$sysDescr = str_replace ( " 0 " , " " , $sysDescr );
2007-04-08 21:27:05 +00:00
list (,, $version ) = explode ( " " , $sysDescr );
$hardware = " i386 " ;
$features = " GENERIC " ;
2007-04-11 20:57:56 +00:00
} elseif ( $device [ 'os' ] == " DragonFly " ) {
2007-04-08 21:27:05 +00:00
list (,, $version ,,, $features ,, $hardware ) = explode ( " " , $sysDescr );
2007-04-11 20:57:56 +00:00
} elseif ( $device [ 'os' ] == " NetBSD " ) {
2007-04-08 21:27:05 +00:00
list (,, $version ,,, $features ) = explode ( " " , $sysDescr );
$features = str_replace ( " ( " , " " , $features );
$features = str_replace ( " ) " , " " , $features );
list (,, $hardware ) = explode ( " $features " , $sysDescr );
2007-04-11 20:57:56 +00:00
} elseif ( $device [ 'os' ] == " OpenBSD " ) {
2007-04-08 21:27:05 +00:00
list (,, $version , $features , $hardware ) = explode ( " " , $sysDescr );
$features = str_replace ( " ( " , " " , $features );
$features = str_replace ( " ) " , " " , $features );
2007-04-11 20:57:56 +00:00
} elseif ( $device [ 'os' ] == " m0n0wall " || $device [ 'os' ] == " Voswall " ) {
2007-04-08 21:27:05 +00:00
list (,, $version , $hardware , $freebsda , $freebsdb , $arch ) = split ( " " , $sysDescr );
$features = $freebsda . " " . $freebsdb ;
$hardware = " $hardware ( $arch ) " ;
$hardware = str_replace ( " \" " , " " , $hardware );
2007-04-08 14:34:19 +00:00
} elseif ( $device [ 'os' ] == " Linux " ) {
2007-04-08 21:27:05 +00:00
list (,, $version ) = explode ( " " , $sysDescr );
if ( strstr ( $sysDescr , " 386 " ) || strstr ( $sysDescr , " 486 " ) || strstr ( $sysDescr , " 586 " ) || strstr ( $sysDescr , " 686 " )) { $hardware = " Generic x86 " ; }
2007-05-20 19:21:35 +00:00
if ( strstr ( $sysDescr , " x86_64 " )) { $hardware = " Generic x86_64 " ; }
2007-04-08 14:34:19 +00:00
$cmd = " snmpget -O qv - " . $device [ 'snmpver' ] . " -c " . $device [ 'community' ] . " " . $device [ 'hostname' ] . " .1.3.6.1.4.1.2021.7890.1.101.1 " ;
2007-05-20 19:21:35 +00:00
$features = trim ( `$cmd` );
2007-04-08 21:27:05 +00:00
$features = str_replace ( " No Such Object available on this agent at this OID " , " " , $features );
$features = str_replace ( " \" " , " " , $features );
2007-05-20 19:21:35 +00:00
// Detect Dell hardware via OpenManage SNMP
$cmd = " snmpget -O qv - " . $device [ 'snmpver' ] . " -c " . $device [ 'community' ] . " " . $device [ 'hostname' ] . " .1.3.6.1.4.1.674.10892.1.300.10.1.9.1 " ;
$hw = trim ( str_replace ( " \" " , " " , `$cmd` ));
if ( strstr ( $hw , " No " )) { unset ( $hw ); } else { $hardware = " Dell " . $hw ; }
}
2007-04-08 14:34:19 +00:00
include ( " includes/polling/device-unix.inc.php " );
2007-04-03 14:10:23 +00:00
break ;
case " Windows " :
2007-05-20 19:21:35 +00:00
if ( strstr ( $sysDescr , " x86 " )) { $hardware = " Generic x86 " ; }
if ( strstr ( $sysDescr , " Windows Version 5.2 " )) { $version = " 2003 Server " ; }
if ( strstr ( $sysDescr , " Uniprocessor Free " )) { $features = " Uniprocessor " ; }
if ( strstr ( $sysDescr , " Multiprocessor Free " )) { $features = " Multiprocessor " ; }
2007-04-03 14:10:23 +00:00
pollDeviceWin ();
break ;
2007-05-20 19:21:35 +00:00
2007-04-03 14:10:23 +00:00
case " IOS " :
2007-11-23 11:37:28 +00:00
echo ( " Device is Cisco! \n $sysDescr\n " );
2007-05-20 19:21:35 +00:00
$version = str_replace ( " Cisco IOS Software, " , " " , $sysDescr );
$version = str_replace ( " IOS (tm) " , " " , $version );
$version = str_replace ( " ,RELEASE SOFTWARE " , " " , $version );
$version = str_replace ( " ,MAINTENANCE INTERIM SOFTWARE " , " " , $version );
$version = str_replace ( " Version " , " " , $version );
$version = str_replace ( " Cisco Internetwork Operating System Software " , " " , $version );
$version = trim ( $version );
list ( $version ) = explode ( " \n " , $version );
$version = preg_replace ( " /^[A-Za-z0-9 \ \ _]* \ (([A-Za-z0-9 \ - \ _]*) \ ), (.+), .*/ " , " \\ 1| \\ 2 " , $version );
$version = str_replace ( " -M| " , " | " , $version );
$version = str_replace ( " - " , " | " , $version );
list ( $hardware , $features , $version ) = explode ( " | " , $version );
$features = fixIOSFeatures ( $features );
#$hardware = fixIOSHardware($hardware);
2007-11-23 11:37:28 +00:00
2007-05-20 19:21:35 +00:00
if ( strstr ( $ciscomodel , " OID " )){ unset ( $ciscomodel ); }
if ( ! strstr ( $ciscomodel , " " ) && strlen ( $ciscomodel ) >= '3' ) {
$hardware = $ciscomodel ;
2007-04-03 14:10:23 +00:00
}
2007-04-08 21:27:05 +00:00
include ( " includes/polling/device-ios.inc.php " );
2007-04-03 14:10:23 +00:00
break ;
2007-05-20 19:21:35 +00:00
2007-04-03 14:10:23 +00:00
case " ProCurve " :
$sysDescr = str_replace ( " , " , " , " , $sysDescr );
2007-04-08 21:27:05 +00:00
list ( $hardware , $features , $version ) = explode ( " , " , $sysDescr );
list ( $version ) = explode ( " ( " , $version );
2007-04-03 14:10:23 +00:00
if ( ! strstr ( $ciscomodel , " " )) {
2007-04-08 21:27:05 +00:00
$hardware = str_replace ( " \" " , " " , $ciscomodel );
2007-04-03 14:10:23 +00:00
}
2007-04-08 18:09:21 +00:00
include ( " includes/polling/device-procurve.inc.php " );
2007-04-03 14:10:23 +00:00
break ;
case " Snom " :
2007-04-08 21:27:05 +00:00
include ( " includes/polling/device-snom.inc.php " );
2007-04-03 14:10:23 +00:00
break ;
default :
pollDevice ();
}
2007-04-08 21:27:05 +00:00
$location = str_replace ( " \" " , " " , $sysLocation );
2007-04-08 12:23:45 +00:00
2007-11-23 11:37:28 +00:00
echo ( " Polling temperatures \n " );
2007-04-08 12:23:45 +00:00
include ( " includes/polling/temperatures.inc.php " );
include ( " includes/polling/device-netstats.inc.php " );
2007-11-23 11:37:28 +00:00
echo ( " Polling interfaces \n " );
$where = " WHERE device_id = ' " . $device [ 'device_id' ] . " ' " ;
include ( " includes/polling/interfaces.inc.php " );
2007-04-08 12:23:45 +00:00
2007-04-03 14:10:23 +00:00
} else {
2007-04-08 21:27:05 +00:00
$status = '0' ;
2007-04-03 14:10:23 +00:00
}
2007-04-11 20:57:56 +00:00
unset ( $update ) ;
2007-11-23 11:37:28 +00:00
unset ( $seperator ) ;
if ( $sysContact && $sysContact != $device [ 'sysContact' ] ) {
$update .= $seperator . " `sysContact` = ' $sysContact ' " ;
$seperator = " , " ;
mysql_query ( " INSERT INTO eventlog (host, interface, datetime, message) VALUES (' " . $device [ 'device_id' ] . " ', NULL, NOW(), 'Contact -> $sysContact ') " );
}
echo ( " $update\n " );
2007-04-11 20:57:56 +00:00
2007-04-08 14:34:19 +00:00
if ( $sysDescr && $sysDescr != $device [ 'sysDescr' ] ) {
2007-05-20 19:21:35 +00:00
$update .= $seperator . " `sysDescr` = ' $sysDescr ' " ;
2007-04-03 14:10:23 +00:00
$seperator = " , " ;
2007-04-08 14:34:19 +00:00
mysql_query ( " INSERT INTO eventlog (host, interface, datetime, message) VALUES (' " . $device [ 'device_id' ] . " ', NULL, NOW(), 'sysDescr -> $sysDescr ') " );
2007-04-03 14:10:23 +00:00
}
2007-04-11 20:57:56 +00:00
2007-04-08 21:27:05 +00:00
if ( $location && $device [ 'location' ] != $location ) {
2007-05-20 19:21:35 +00:00
$update .= $seperator . " `location` = ' $location ' " ;
2007-04-03 14:10:23 +00:00
$seperator = " , " ;
2007-04-08 21:27:05 +00:00
mysql_query ( " INSERT INTO eventlog (host, interface, datetime, message) VALUES (' " . $device [ 'device_id' ] . " ', NULL, NOW(), 'Location -> $location ') " );
2007-04-03 14:10:23 +00:00
}
2007-04-11 20:57:56 +00:00
2007-04-08 21:27:05 +00:00
if ( $version && $device [ 'version' ] != $version ) {
$update .= $seperator . " `version` = ' $version ' " ;
2007-04-03 14:10:23 +00:00
$seperator = " , " ;
2007-04-08 21:27:05 +00:00
mysql_query ( " INSERT INTO eventlog (host, interface, datetime, message) VALUES (' " . $device [ 'device_id' ] . " ', NULL, NOW(), 'OS Version -> $version ') " );
2007-04-03 14:10:23 +00:00
}
2007-04-11 20:57:56 +00:00
2007-04-08 21:27:05 +00:00
if ( $features && $features != $device [ 'features' ] ) {
$update .= $seperator . " `features` = ' $features ' " ;
2007-04-03 14:10:23 +00:00
$seperator = " , " ;
2007-04-08 21:27:05 +00:00
mysql_query ( " INSERT INTO eventlog (host, interface, datetime, message) VALUES (' " . $device [ 'device_id' ] . " ', NULL, NOW(), 'OS Features -> $features ') " );
2007-04-03 14:10:23 +00:00
}
2007-04-11 20:57:56 +00:00
2007-04-08 21:27:05 +00:00
if ( $hardware && $hardware != $device [ 'hardware' ] ) {
$update .= $seperator . " `hardware` = ' $hardware ' " ;
2007-04-03 14:10:23 +00:00
$seperator = " , " ;
2007-04-08 21:27:05 +00:00
mysql_query ( " INSERT INTO eventlog (host, interface, datetime, message) VALUES (' " . $device [ 'device_id' ] . " ', NULL, NOW(), 'Hardware -> $hardware ') " );
2007-04-03 14:10:23 +00:00
}
2007-04-04 10:08:02 +00:00
2007-04-08 21:27:05 +00:00
if ( $device [ 'status' ] != $status ) {
$update .= $seperator . " `status` = ' $status ' " ;
2007-04-03 14:10:23 +00:00
$seperator = " , " ;
2007-04-08 21:27:05 +00:00
if ( $status == '1' ) { $stat = " Up " ;
2007-04-08 14:34:19 +00:00
mysql_query ( " INSERT INTO alerts (importance, device_id, message) VALUES ('0', ' " . $device [ 'device_id' ] . " ', 'Device is up \n ') " );
2007-04-03 14:10:23 +00:00
} else {
$stat = " Down " ;
2007-04-08 14:34:19 +00:00
mysql_query ( " INSERT INTO alerts (importance, device_id, message) VALUES ('9', ' " . $device [ 'device_id' ] . " ', 'Device is down \n ') " );
2007-04-03 14:10:23 +00:00
}
2007-04-08 14:34:19 +00:00
mysql_query ( " INSERT INTO eventlog (host, interface, datetime, message) VALUES (' " . $device [ 'device_id' ] . " ', NULL, NOW(), 'Device status changed to $stat ') " );
2007-04-03 14:10:23 +00:00
}
2007-04-04 10:08:02 +00:00
2007-04-08 21:27:05 +00:00
if ( $uptime ) {
2007-06-24 14:56:47 +00:00
$old_uptime = mysql_result ( mysql_query ( " SELECT `attrib_value` FROM `devices_attribs` WHERE `device_id` = ' " . $device [ 'device_id' ] . " ' AND `attrib_type` = 'uptime' " ), 0 );
if ( $uptime < $old_uptime ) {
2007-11-23 11:37:28 +00:00
if ( $device [ 'sysContact' ]) { $email = $device [ 'sysContact' ]; } else { $email = $config [ 'email_default' ]; }
mail ( $notify_email , " Device Rebooted: " . $device [ 'hostname' ], " Device Rebooted : " . $device [ 'hostname' ] . " at " . date ( 'l dS F Y h:i:s A' ), $config [ 'email_headers' ]);
2007-06-24 14:56:47 +00:00
}
2008-03-12 16:35:00 +00:00
$uptimerrd = $rrd_dir . " / " . $device [ 'hostname' ] . " /uptime.rrd " ;
2008-03-12 13:13:50 +00:00
2008-03-12 16:35:00 +00:00
$old_uptimerrd = " rrd/ " . $device [ 'hostname' ] . " -uptime.rrd " ;
if ( is_file ( $old_uptimerrd ) && ! is_file ( $uptimerrd )) { rename ( $old_uptimerrd , $uptimerrd ); echo ( " Moving $old_uptimerrd to $uptimerrd " ); }
2008-03-12 13:13:50 +00:00
2007-04-07 19:28:52 +00:00
if ( ! is_file ( $uptimerrd )) {
$woo = ` rrdtool create $uptimerrd \
DS : uptime : GAUGE : 600 : 0 : U \
RRA : AVERAGE : 0.5 : 1 : 600 \
RRA : AVERAGE : 0.5 : 6 : 700 \
RRA : AVERAGE : 0.5 : 24 : 775 \
RRA : AVERAGE : 0.5 : 288 : 797 ` ;
2007-04-07 19:25:55 +00:00
}
2008-03-09 21:13:27 +00:00
rrdtool_update ( $uptimerrd , " N: $uptime " );
2007-04-07 19:25:55 +00:00
2007-04-08 21:27:05 +00:00
$update_uptime_attrib = mysql_query ( " UPDATE devices_attribs SET attrib_value = ' $uptime ' WHERE `device_id` = ' " . $device [ 'device_id' ] . " ' AND `attrib_type` = 'uptime' " );
2007-04-04 10:08:02 +00:00
if ( mysql_affected_rows () == '0' ) {
2007-04-08 21:27:05 +00:00
$insert_uptime_attrib = mysql_query ( " INSERT INTO devices_attribs (`device_id`, `attrib_type`, `attrib_value`) VALUES (' " . $device [ 'device_id' ] . " ', 'uptime', ' $uptime ') " );
2007-04-04 10:08:02 +00:00
}
2007-06-24 14:56:47 +00:00
2007-04-04 10:08:02 +00:00
}
2007-04-03 14:10:23 +00:00
if ( $update ) {
$update_query = " UPDATE `devices` SET " ;
$update_query .= $update ;
2007-04-08 21:27:05 +00:00
$update_query .= " WHERE `device_id` = ' " . $device [ 'device_id' ] . " ' " ;
2007-11-23 11:37:28 +00:00
echo ( " Updating " . $device [ 'hostname' ] . " \n " . $update_query . " \n " );
2007-04-03 14:10:23 +00:00
$update_result = mysql_query ( $update_query );
} else {
2007-11-23 11:37:28 +00:00
echo ( " No Changes to " . $device [ 'hostname' ] . " \n " );
2007-04-03 14:10:23 +00:00
}
2007-11-23 11:37:28 +00:00
echo ( " \n " );
2007-04-03 14:10:23 +00:00
}
?>