2007-04-03 14:10:23 +00:00
#!/usr/bin/php
<?
include ( "config.php" );
include ( "includes/functions.php" );
$interface_query = mysql_query ( "SELECT *, I.id AS sqlid FROM `interfaces` AS I, `devices` AS D where I.host = D.id AND D.id LIKE '%" . $argv [ 1 ] . "' AND D.status = '1'" );
while ( $interface = mysql_fetch_array ( $interface_query )) {
$hostname = $interface [ 'hostname' ];
$host = $interface [ 'host' ];
$old_if = $interface [ 'if' ];
$ifIndex = $interface [ 'ifIndex' ];
$old_alias = $interface [ 'name' ];
$id = $interface [ 'sqlid' ];
$old_up = $interface [ 'up' ];
$old_speed = $interface [ 'ifSpeed' ];
$old_duplex = $interface [ 'ifDuplex' ];
$old_physaddress = $interface [ 'ifPhysAddress' ];
$old_type = $interface [ 'ifType' ];
$old_mtu = $interface [ 'ifMtu' ];
$old_up_admin = $interface [ 'up_admin' ];
$community = $interface [ 'community' ];
$os = $interface [ 'os' ];
$snmp_cmd = "snmpget -O qv -v2c -c $community $hostname ifName. $ifIndex ifDescr. $ifIndex ifAdminStatus. $ifIndex ifOperStatus. $ifIndex " ;
$snmp_cmd .= "ifAlias. $ifIndex ifSpeed. $ifIndex 1.3.6.1.2.1.10.7.2.1. $ifIndex ifType. $ifIndex ifMtu. $ifIndex ifPhysAddress. $ifIndex " ;
$snmp_output = `$snmp_cmd` ;
$snmp_output = trim ( $snmp_output );
$snmp_output = str_replace ( "No Such Object available on this agent at this OID" , "" , $snmp_output );
$snmp_output = str_replace ( "No Such Instance currently exists at this OID" , "" , $snmp_output );
$ifPhysAddress = strtolower ( str_replace ( " \" " , "" , $ifPhysAddress ));
$ifPhysAddress = str_replace ( " " , ":" , $ifPhysAddress );
echo ( "Looking at $old_if on $hostname \n " );
list ( $ifName , $ifDescr , $ifAdminStatus , $ifOperStatus , $ifAlias , $ifSpeed , $ifDuplex , $ifType , $ifMtu , $ifPhysAddress ) = explode ( " \n " , $snmp_output );
$ifDescr = trim ( str_replace ( " \" " , "" , $ifDescr ));
if ( $ifDuplex == 3 ) { $ifDuplex = "half" ; } elseif ( $ifDuplex == 2 ) { $ifDuplex = "full" ; } else { $ifDuplex = "unknown" ; }
$ifDescr = strtolower ( $ifDescr );
if ( $ifAlias == " " ) { $ifAlias = str_replace ( " " , "" , $ifAlias ); }
$ifAlias = trim ( str_replace ( " \" " , "" , $ifAlias ));
$ifAlias = trim ( $ifAlias );
$rrdfile = "rrd/" . $hostname . "." . $ifIndex . ".rrd" ;
if ( ! is_file ( $rrdfile )) {
$woo = `rrdtool create $rrdfile \
DS:INOCTETS:COUNTER:600:U:100000000000 \
DS:OUTOCTETS:COUNTER:600:U:10000000000 \
DS:INERRORS:COUNTER:600:U:10000000000 \
DS:OUTERRORS:COUNTER:600:U:10000000000 \
DS:INUCASTPKTS:COUNTER:600:U:10000000000 \
DS:OUTUCASTPKTS:COUNTER:600:U:10000000000 \
DS:INNUCASTPKTS:COUNTER:600:U:10000000000 \
DS:OUTNUCASTPKTS:COUNTER:600:U:10000000000 \
RRA:AVERAGE:0.5:1:600 \
RRA:AVERAGE:0.5:6:700 \
RRA:AVERAGE:0.5:24:775 \
RRA:AVERAGE:0.5:288:797 \
RRA:MAX:0.5:1:600 \
RRA:MAX:0.5:6:700 \
RRA:MAX:0.5:24:775 \
RRA:MAX:0.5:288:797` ;
}
unset ( $update );
unset ( $update_query );
unset ( $seperator );
if ( $old_if != $ifDescr && $ifDescr != "" ) {
$update = "`if` = ' $ifDescr '" ;
$seperator = ", " ;
2007-04-04 10:43:23 +00:00
mysql_query ( "INSERT INTO eventlog (host, interface, datetime, message) values ( $interface[host] , $interface[sqlid] , NOW(), 'Name -> $ifDescr ')" );
2007-04-03 14:10:23 +00:00
}
if ( $old_alias != $ifAlias ) {
$update .= $seperator . "`name` = \" $ifAlias \" " ;
$seperator = ", " ;
2007-04-04 10:43:23 +00:00
mysql_query ( "INSERT INTO eventlog (host, interface, datetime, message) values ( $interface[host] , $interface[sqlid] , NOW(), 'Desc -> $ifAlias ')" );
2007-04-03 14:10:23 +00:00
}
if ( $old_up != $ifOperStatus && $ifOperStatus != "" ) {
$update .= $seperator . "`up` = ' $ifOperStatus '" ;
$seperator = ", " ;
mysql_query ( "INSERT INTO eventlog (host, interface, datetime, message) values ( $interface[host] , $interface[sqlid] , NOW(), 'Interface went $ifOperStatus ')" );
}
if ( $old_up_admin != $ifAdminStatus && $ifAdminStatus != "" ) {
$update .= $seperator . "`up_admin` = ' $ifAdminStatus '" ;
$seperator = ", " ;
if ( $ifAdminStatus == "up" ) { $admin = "enabled" ; } else { $admin = "disabled" ; }
mysql_query ( "INSERT INTO eventlog (host, interface, datetime, message) values ( $interface[host] , $interface[sqlid] , NOW(), 'Interface $admin ')" );
}
if ( $old_duplex != $ifDuplex && $ifDuplex != "" ) {
$update .= $seperator . "`ifDuplex` = ' $ifDuplex '" ;
$seperator = ", " ;
2007-04-04 10:43:23 +00:00
mysql_query ( "INSERT INTO eventlog (host, interface, datetime, message) values ( $interface[host] , $interface[sqlid] , NOW(), 'Duplex -> $ifDuplex ')" );
2007-04-03 14:10:23 +00:00
}
if ( $old_type != $ifType && $ifType != "" ) {
$update .= $seperator . "`ifType` = ' $ifType '" ;
$seperator = ", " ;
2007-04-04 10:43:23 +00:00
mysql_query ( "INSERT INTO eventlog (host, interface, datetime, message) values ( $interface[host] , $interface[sqlid] , NOW(), 'Type -> $ifType ')" );
2007-04-03 14:10:23 +00:00
}
if ( $old_mtu != $ifMtu && $ifMtu != "" ) {
$update .= $seperator . "`ifMtu` = ' $ifMtu '" ;
$seperator = ", " ;
2007-04-04 10:43:23 +00:00
mysql_query ( "INSERT INTO eventlog (host, interface, datetime, message) values ( $interface[host] , $interface[sqlid] , NOW(), 'MTU -> $ifMtu ')" );
2007-04-03 14:10:23 +00:00
}
if ( $old_physaddress != $ifPhysAddress && $ifPhysAddress != "" ) {
$update .= $seperator . "`ifPhysAddress` = ' $ifPhysAddress '" ;
$seperator = ", " ;
2007-04-04 10:43:23 +00:00
mysql_query ( "INSERT INTO eventlog (host, interface, datetime, message) values ( $interface[host] , $interface[sqlid] , NOW(), 'MAC -> $ifPhysAddress ')" );
2007-04-03 14:10:23 +00:00
}
if ( $old_speed != $ifSpeed && $ifSpeed != "" ) {
$update .= $seperator . "`ifSpeed` = ' $ifSpeed '" ;
$seperator = ", " ;
$prev = humanspeed ( $old_speed );
$now = humanspeed ( $ifSpeed );
2007-04-04 10:43:23 +00:00
mysql_query ( "INSERT INTO eventlog (host, interface, datetime, message) values ( $interface[host] , $interface[sqlid] , NOW(), 'Speed -> $now ')" );
2007-04-03 14:10:23 +00:00
}
if ( $update ) {
$update_query = "UPDATE `interfaces` SET " ;
$update_query .= $update ;
$update_query .= " WHERE `id` = ' $id '" ;
echo ( "Updating : $hostname $ifDescr \n $update_query \n\n " );
$update_result = mysql_query ( $update_query );
} else {
echo ( "Not Updating : $hostname $ifDescr ( $old_if ) \n\n " );
}
if ( $ifOperStatus == "up" ) {
$snmp_data = `snmpget -O qv -v2c -c $community $hostname ifHCInOctets.$ifIndex ifHCOutOctets.$ifIndex ifInErrors.$ifIndex ifOutErrors.$ifIndex \
ifInUcastPkts.$ifIndex ifOutUcastPkts.$ifIndex ifInNUcastPkts.$ifIndex ifOutNUcastPkts.$ifIndex` ;
$snmp_data = str_replace ( "Wrong Type (should be Counter32): " , "" , $snmp_data );
$snmp_data = str_replace ( "No Such Instance currently exists at this OID" , "" , $snmp_data );
list ( $ifHCInOctets , $ifHCOutOctets , $ifInErrors , $ifOutErrors , $ifInUcastPkts , $ifOutUcastPkts , $ifInNUcastPkts , $ifOutNUcastPkts ) = explode ( " \n " , $snmp_data );
if ( $ifHCInOctets == "" || strpos ( $ifHCInOctets , "No" ) !== FALSE ) {
$fixit = `snmpget -O qv -v2c -c $community $hostname ifInOctets.$ifIndex ifOutOctets.$ifIndex` ;
list ( $ifHCInOctets , $ifHCOutOctets ) = explode ( " \n " , $fixit );
}
$woo = "N: $ifHCInOctets : $ifHCOutOctets : $ifInErrors : $ifOutErrors : $ifInUcastPkts : $ifOutUcastPkts : $ifInNUcastPkts : $ifOutNUcastPkts " ;
$ret = rrd_update ( " $rrdfile " , $woo );
} else {
echo ( "Interface $hostname $old_if is down \n " );
}
}
mysql_query ( "UPDATE interfaces set ifPhysAddress = '' WHERE ifPhysAddress = 'No Such Instance currently exists at this OID'" );
?>