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-03 14:10:23 +00:00
unset ( $update ); unset ( $update_query ); unset ( $seperator ); unset ( $newversion ); unset ( $newuptime ); unset ( $newfeatures );
unset ( $newlocation ); unset ( $newhardware );
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-08 14:34:19 +00:00
if ( $pingable !== FALSE && $snmpable !== FALSE ) {
$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 );
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 );
$newuptime = $secs ;
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-08 14:34:19 +00:00
if ( $device [ 'os' ] == " FreeBSD " ) {
2007-04-03 14:10:23 +00:00
$sysDescr = str_replace ( " 0 " , " " , $sysDescr );
list (,, $newversion ) = explode ( " " , $sysDescr );
$newhardware = " i386 " ;
$newfeatures = " GENERIC " ;
2007-04-08 14:34:19 +00:00
} elseif ( $device [ 'os' ] == " DragonFly " ) {
2007-04-03 14:10:23 +00:00
list (,, $newversion ,,, $newfeatures ,, $newhardware ) = explode ( " " , $sysDescr );
2007-04-08 14:34:19 +00:00
} elseif ( $device [ 'os' ] == " NetBSD " ) {
2007-04-03 14:10:23 +00:00
list (,, $newversion ,,, $newfeatures ) = explode ( " " , $sysDescr );
$newfeatures = str_replace ( " ( " , " " , $newfeatures );
$newfeatures = str_replace ( " ) " , " " , $newfeatures );
list (,, $newhardware ) = explode ( " $newfeatures " , $sysDescr );
2007-04-08 14:34:19 +00:00
} elseif ( $device [ 'os' ] == " OpenBSD " ) {
2007-04-03 14:10:23 +00:00
list (,, $newversion , $newfeatures , $newhardware ) = explode ( " " , $sysDescr );
$newfeatures = str_replace ( " ( " , " " , $newfeatures );
$newfeatures = str_replace ( " ) " , " " , $newfeatures );
2007-04-08 14:34:19 +00:00
} elseif ( $device [ 'os' ] == " m0n0wall " || $device [ 'os' ] == " Voswall " ) {
2007-04-03 14:10:23 +00:00
list (,, $newversion , $newhardware , $freebsda , $freebsdb , $arch ) = split ( " " , $sysDescr );
$newfeatures = $freebsda . " " . $freebsdb ;
$newhardware = " $newhardware ( $arch ) " ;
$newhardware = str_replace ( " \" " , " " , $newhardware );
2007-04-08 14:34:19 +00:00
} elseif ( $device [ 'os' ] == " Linux " ) {
2007-04-03 14:10:23 +00:00
list (,, $newversion ) = explode ( " " , $sysDescr );
if ( strstr ( $sysDescr , " 386 " ) || strstr ( $sysDescr , " 486 " ) || strstr ( $sysDescr , " 586 " ) || strstr ( $sysDescr , " 686 " )) { $newhardware = " Generic x86 " ; }
# list($newversion,$newfeatures,$newfeaturesb) = explode("-", $newversion);
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 " ;
$newfeatures = `$cmd` ;
2007-04-03 14:10:23 +00:00
$newfeatures = str_replace ( " No Such Object available on this agent at this OID " , " " , $newfeatures );
$newfeatures = str_replace ( " \" " , " " , $newfeatures );
}
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-04-08 14:34:19 +00:00
if ( $device [ 'os' ] == " Windows " ) {
2007-04-03 14:10:23 +00:00
if ( strstr ( $sysDescr , " x86 " )) { $newhardware = " Generic x86 " ; }
if ( strstr ( $sysDescr , " Windows Version 5.2 " )) { $newversion = " 2003 Server " ; }
if ( strstr ( $sysDescr , " Uniprocessor Free " )) { $newfeatures = " Uniprocessor " ; }
if ( strstr ( $sysDescr , " Multiprocessor Free " )) { $newfeatures = " Multiprocessor " ; }
}
pollDeviceWin ();
break ;
case " IOS " :
2007-04-08 14:34:19 +00:00
if ( $device [ 'os' ] == " IOS " ) {
2007-04-03 14:10:23 +00:00
$newversion = str_replace ( " Cisco IOS Software, " , " " , $sysDescr );
$newversion = str_replace ( " IOS (tm) " , " " , $newversion );
$newversion = str_replace ( " ,RELEASE SOFTWARE " , " " , $newversion );
$newversion = str_replace ( " ,MAINTENANCE INTERIM SOFTWARE " , " " , $newversion );
$newversion = str_replace ( " Version " , " " , $newversion );
$newversion = str_replace ( " Cisco Internetwork Operating System Software " , " " , $newversion );
$newversion = trim ( $newversion );
list ( $newversion ) = explode ( " \n " , $newversion );
$newversion = preg_replace ( " /^[A-Za-z0-9 \ \ _]* \ (([A-Za-z0-9 \ - \ _]*) \ ), (.+), .*/ " , " \\ 1| \\ 2 " , $newversion );
$newversion = str_replace ( " -M| " , " | " , $newversion );
$newversion = str_replace ( " - " , " | " , $newversion );
list ( $newhardware , $newfeatures , $newversion ) = explode ( " | " , $newversion );
$newfeatures = fixIOSFeatures ( $newfeatures );
#$newhardware = fixIOSHardware($newhardware);
$ciscomodel = str_replace ( " \" " , " " , $ciscomodel );
if ( strstr ( $ciscomodel , " OID " )){ unset ( $ciscomodel ); }
echo ( " \n | $ciscomodel | $newhardware\n " );
if ( ! strstr ( $ciscomodel , " " ) && strlen ( $ciscomodel ) >= '3' ) {
echo ( " $ciscomodel " );
$newhardware = $ciscomodel ;
}
}
pollDeviceIOS ();
break ;
case " ProCurve " :
$sysDescr = str_replace ( " , " , " , " , $sysDescr );
list ( $newhardware , $newfeatures , $newversion ) = explode ( " , " , $sysDescr );
list ( $newversion ) = explode ( " ( " , $newversion );
if ( ! strstr ( $ciscomodel , " " )) {
echo ( " $ciscomodel " );
$newhardware = str_replace ( " \" " , " " , $ciscomodel );
}
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 14:34:19 +00:00
$cmd = " snmpget -O qv - " . $device [ 'snmpver' ] . " -c " . $device [ 'community' ] . " " . $device [ 'hostname' ] . " 1.3.6.1.2.1.7526.2.4 " ;
$sysDescr = `$cmd` ;
2007-04-03 14:10:23 +00:00
$sysDescr = str_replace ( " - " , " " , $sysDescr );
$sysDescr = str_replace ( " \" " , " " , $sysDescr );
list ( $newhardware , $newfeatures , $newversion ) = explode ( " " , $sysDescr );
pollDeviceSnom ();
break ;
default :
pollDevice ();
}
$newlocation = 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 {
$newstatus = '0' ;
}
2007-04-08 14:34:19 +00:00
if ( $sysDescr && $sysDescr != $device [ 'sysDescr' ] ) {
2007-04-03 14:10:23 +00:00
$update = " `sysDescr` = ' $sysDescr ' " ;
$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-08 14:34:19 +00:00
if ( $newlocation && $device [ 'location' ] != $newlocation ) {
2007-04-03 14:10:23 +00:00
$update = " `location` = ' $newlocation ' " ;
$seperator = " , " ;
2007-04-08 14:34:19 +00:00
mysql_query ( " INSERT INTO eventlog (host, interface, datetime, message) VALUES (' " . $device [ 'device_id' ] . " ', NULL, NOW(), 'Location -> $newlocation ') " );
2007-04-03 14:10:23 +00:00
}
2007-04-08 14:34:19 +00:00
if ( $newversion && $device [ 'version' ] != $newversion ) {
2007-04-03 14:10:23 +00:00
$update .= $seperator . " `version` = ' $newversion ' " ;
$seperator = " , " ;
2007-04-08 14:34:19 +00:00
mysql_query ( " INSERT INTO eventlog (host, interface, datetime, message) VALUES (' " . $device [ 'device_id' ] . " ', NULL, NOW(), 'OS Version -> $newversion ') " );
2007-04-03 14:10:23 +00:00
}
2007-04-08 14:34:19 +00:00
if ( $newfeatures && $newfeatures != $device [ 'features' ] ) {
2007-04-03 14:10:23 +00:00
$update .= $seperator . " `features` = ' $newfeatures ' " ;
$seperator = " , " ;
2007-04-08 14:34:19 +00:00
mysql_query ( " INSERT INTO eventlog (host, interface, datetime, message) VALUES (' " . $device [ 'device_id' ] . " ', NULL, NOW(), 'OS Features -> $newfeatures ') " );
2007-04-03 14:10:23 +00:00
}
2007-04-08 14:34:19 +00:00
if ( $newhardware && $newhardware != $device [ 'hardware' ] ) {
2007-04-03 14:10:23 +00:00
$update .= $seperator . " `hardware` = ' $newhardware ' " ;
$seperator = " , " ;
2007-04-08 14:34:19 +00:00
mysql_query ( " INSERT INTO eventlog (host, interface, datetime, message) VALUES (' " . $device [ 'device_id' ] . " ', NULL, NOW(), 'Hardware -> $newhardware ') " );
2007-04-03 14:10:23 +00:00
}
2007-04-04 10:08:02 +00:00
2007-04-08 14:34:19 +00:00
if ( $device [ 'status' ] != $newstatus ) {
2007-04-03 14:10:23 +00:00
$update .= $seperator . " `status` = ' $newstatus ' " ;
$seperator = " , " ;
if ( $newstatus == '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-07 19:25:55 +00:00
if ( $newuptime ) {
echo ( " Uptime : $newuptime\n " );
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-07 19:28:52 +00:00
rrd_update ( $uptimerrd , " N: $newuptime " );
2007-04-07 19:25:55 +00:00
2007-04-08 14:34:19 +00:00
$update_uptime_attrib = mysql_query ( " UPDATE devices_attribs SET attrib_value = ' $newuptime ' 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 14:34:19 +00:00
$insert_uptime_attrib = mysql_query ( " INSERT INTO devices_attribs (`device_id`, `attrib_type`, `attrib_value`) VALUES (' " . $device [ 'device_id' ] . " ', 'uptime', ' $newuptime ') " );
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 14:34:19 +00:00
$update_query .= " WHERE `id` = ' " . $device [ 'device_id' ] . " ' " ;
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
}
}
?>