2007-04-03 14:10:23 +00:00
#!/usr/bin/php
< ?
include ( " config.php " );
include ( " includes/functions.php " );
2007-04-08 14:34:19 +00:00
$device_query = mysql_query ( " SELECT * FROM `devices` WHERE `device_id` like '% $argv[1] ' AND `ignore` = '0' 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-04-08 21:27:05 +00:00
unset ( $update ); unset ( $update_query ); unset ( $seperator ); unset ( $version ); unset ( $uptime ); unset ( $features );
unset ( $location ); unset ( $hardware );
2007-06-06 09:23:41 +00:00
unset ( $sysDescr );
2007-04-09 13:14:03 +00:00
2007-04-08 14:34:19 +00:00
$pingable = isPingable ( $device [ 'hostname' ]);
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-04-03 14:10:23 +00:00
}
2007-04-08 12:23:45 +00:00
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 " ;
}
$snmp_cmd = " snmpget -O qv - " . $device [ 'snmpver' ] . " -c " . $device [ 'community' ] . " " . $device [ 'hostname' ];
$snmp_cmd .= " $uptimeoid sysLocation.0 .1.3.6.1.2.1.47.1.1.1.1.13.1 sysDescr.0 " ;
$snmp_cmd .= " | grep -v 'Cisco Internetwork Operating System Software' " ;
$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-04-03 14:10:23 +00:00
list ( $sysUptime , $sysLocation , $ciscomodel , $sysDescr ) = explode ( " \n " , $snmpdata );
$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-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);
$ciscomodel = str_replace ( " \" " , " " , $ciscomodel );
if ( strstr ( $ciscomodel , " OID " )){ unset ( $ciscomodel ); }
if ( ! strstr ( $ciscomodel , " " ) && strlen ( $ciscomodel ) >= '3' ) {
$hardware = $ciscomodel ;
2007-04-03 14:10:23 +00:00
}
2007-05-20 19:21:35 +00:00
echo ( $device [ 'version' ] . " $version " );
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 , " " )) {
echo ( " $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
include ( " includes/polling/temperatures.inc.php " );
include ( " includes/polling/device-netstats.inc.php " );
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-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 ) {
echo ( " Uptime : $uptime\n " );
2007-04-07 19:25:55 +00:00
2007-04-08 14:34:19 +00:00
$uptimerrd = " rrd/ " . $device [ 'hostname' ] . " -uptime.rrd " ;
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
}
2007-04-08 21:27:05 +00:00
rrd_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-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-04-08 14:34:19 +00:00
echo ( " Updating " . $device [ 'hostname' ] . " \n " . $update_query . " \n \n " );
2007-04-03 14:10:23 +00:00
$update_result = mysql_query ( $update_query );
} else {
2007-04-08 14:34:19 +00:00
echo ( " No Changes to " . $device [ 'hostname' ] . " \n \n " );
2007-04-03 14:10:23 +00:00
}
}
?>