2010-09-03 18:26:59 +00:00
#!/usr/bin/env php
2011-05-14 21:51:58 +00:00
2011-05-15 14:11:34 +00:00
# port_info is broken. always reports same values no matter host selected
2011-05-14 21:51:58 +00:00
2010-06-13 18:27:38 +00:00
< ? php
2011-05-14 21:51:58 +00:00
# Disable annoying messages... well... all messages actually :)
error_reporting ( 0 );
include_once ( " includes/defaults.inc.php " );
include_once ( " config.php " );
include_once ( " includes/functions.php " );
include_once ( " includes/discovery/functions.inc.php " );
2010-06-13 18:27:38 +00:00
include_once ( 'Net/SmartIRC.php' );
2011-05-14 21:51:58 +00:00
mysql_close ();
# Redirect to /dev/null if you aren't using screen to keep tabs
echo " Observer Bot Starting ... \n " ;
echo " \n " ;
2011-05-15 14:11:34 +00:00
echo " Timestamp Command \n " ;
echo " ----------------- ------- \n " ;
2011-05-14 21:51:58 +00:00
2010-07-17 12:58:09 +00:00
class observiumbot
2010-06-13 18:27:38 +00:00
{
2011-05-14 21:51:58 +00:00
2011-05-15 14:11:34 +00:00
###
2011-09-20 09:55:11 +00:00
# Get HELP!
2011-05-15 14:11:34 +00:00
###
function help_info ( & $irc , & $data )
{
2011-09-20 14:34:27 +00:00
global $config ;
2011-05-15 14:11:34 +00:00
2011-09-20 14:34:27 +00:00
$irc -> message ( SMARTIRC_TYPE_CHANNEL , $data -> channel , " Commands: !help, !log, !status, !version, !down, !port, !device, !listdevices " );
2011-05-15 14:11:34 +00:00
2011-09-20 14:34:27 +00:00
echo date ( " m-d-y H:i:s " );
echo " HELP \n " ;
2011-05-15 14:11:34 +00:00
2011-09-20 14:34:27 +00:00
mysql_close ();
2011-05-15 14:11:34 +00:00
}
2011-05-14 21:51:58 +00:00
###
2011-09-20 09:55:11 +00:00
# Get status on !version
2011-05-14 21:51:58 +00:00
###
function version_info ( & $irc , & $data )
{
2011-09-20 14:34:27 +00:00
global $config ;
2011-05-14 21:51:58 +00:00
2011-09-20 14:34:27 +00:00
$irc -> message ( SMARTIRC_TYPE_CHANNEL , $data -> channel , " Observium Version " . $config [ 'version' ]);
2011-05-14 21:51:58 +00:00
2011-09-20 14:34:27 +00:00
echo date ( " m-d-y H:i:s " );
echo " VERSION \t \t " . $config [ 'version' ] . " \n " ;
2011-05-14 21:51:58 +00:00
2011-09-20 14:34:27 +00:00
mysql_close ();
2011-05-14 21:51:58 +00:00
}
2011-05-15 14:11:34 +00:00
###
2011-09-20 09:55:11 +00:00
# Get last eventlog entry
2011-05-15 14:11:34 +00:00
###
function log_info ( & $irc , & $data )
{
2011-09-20 14:34:27 +00:00
global $config ;
2011-05-15 14:11:34 +00:00
2011-09-20 14:34:27 +00:00
mysql_connect ( $config [ 'db_host' ], $config [ 'db_user' ], $config [ 'db_pass' ]);
mysql_select_db ( $config [ 'db_name' ]);
2011-05-15 14:11:34 +00:00
$device = dbFetchRow ( " SELECT `event_id`,`host`,`datetime`,`message`,`type` FROM `eventlog` ORDER BY `event_id` DESC LIMIT 1 " );
2011-09-20 14:34:27 +00:00
$host = $device [ 'host' ];
$hostid = dbFetchRow ( " SELECT `hostname` FROM `devices` WHERE `device_id` = $host " );
2011-05-15 14:11:34 +00:00
2011-09-20 14:34:27 +00:00
$irc -> message ( SMARTIRC_TYPE_CHANNEL , $data -> channel , $device [ 'event_id' ] . " " . $hostid [ 'hostname' ] . " " . $device [ 'datetime' ] . " " . $device [ 'message' ] . " " . $device [ 'type' ]);
2011-05-15 14:11:34 +00:00
2011-09-20 14:34:27 +00:00
echo date ( " m-d-y H:i:s " );
echo " LOG \n " ;
2011-05-15 14:11:34 +00:00
2011-09-20 14:34:27 +00:00
mysql_close ();
2011-05-15 14:11:34 +00:00
}
2011-05-14 21:51:58 +00:00
###
# Get status on !down devices
###
function down_info ( & $irc , & $data )
{
2011-09-20 14:34:27 +00:00
global $config ;
2011-05-14 21:51:58 +00:00
2011-09-20 14:34:27 +00:00
mysql_connect ( $config [ 'db_host' ], $config [ 'db_user' ], $config [ 'db_pass' ]);
mysql_select_db ( $config [ 'db_name' ]);
2011-05-14 21:51:58 +00:00
2011-05-15 14:11:34 +00:00
foreach ( dbFetchRows ( " SELECT * FROM `devices` where status=0 " ) as $device )
2011-05-14 21:51:58 +00:00
{
$message .= $sep . $device [ 'hostname' ];
$sep = " , " ;
}
$irc -> message ( SMARTIRC_TYPE_CHANNEL , $data -> channel , $message );
2011-09-20 14:34:27 +00:00
mysql_close ();
2011-05-14 21:51:58 +00:00
2011-09-20 14:34:27 +00:00
echo date ( " m-d-y H:i:s " );
echo " DOWN \n " ;
2011-05-14 21:51:58 +00:00
}
###
# Get status on !device <hostname>
###
2011-03-23 09:14:33 +00:00
function device_info ( & $irc , & $data )
{
2011-09-20 14:34:27 +00:00
global $config ;
2011-05-14 21:51:58 +00:00
2011-03-23 09:14:33 +00:00
$hostname = $data -> messageex [ 1 ];
2010-06-13 18:27:38 +00:00
2011-09-20 14:34:27 +00:00
mysql_connect ( $config [ 'db_host' ], $config [ 'db_user' ], $config [ 'db_pass' ]);
mysql_select_db ( $config [ 'db_name' ]);
2011-05-14 21:51:58 +00:00
$device = dbFetchRow ( " SELECT * FROM `devices` WHERE `hostname` = ? " , array ( $hostname ));
2011-09-20 14:34:27 +00:00
mysql_close ();
2010-06-13 18:27:38 +00:00
2011-03-23 09:14:33 +00:00
if ( $device [ 'status' ] == 1 ) { $status = " Up " . formatUptime ( $device [ 'uptime' ] . " " ); } else { $status = " Down " ; }
if ( $device [ 'ignore' ]) { $status = " *Ignored* " ; }
if ( $device [ 'disabled' ]) { $status = " *Disabled* " ; }
2010-06-13 18:27:38 +00:00
2011-05-15 14:11:34 +00:00
$irc -> message ( SMARTIRC_TYPE_CHANNEL , $data -> channel , $device [ 'os' ] . " " . $device [ 'version' ] . " " .
2011-03-23 09:14:33 +00:00
$device [ 'features' ] . " " . $status );
2011-05-14 21:51:58 +00:00
2011-09-20 14:34:27 +00:00
echo date ( " m-d-y H:i:s " );
echo " DEVICE \t \t " . $device [ 'hostname' ] . " \n " ;
2011-03-23 09:14:33 +00:00
}
2010-06-13 18:27:38 +00:00
2011-05-14 21:51:58 +00:00
###
# Get status on !port <hostname port>
###
2011-03-23 09:14:33 +00:00
function port_info ( & $irc , & $data )
{
2011-09-20 14:34:27 +00:00
global $config ;
2011-03-23 09:14:33 +00:00
$hostname = $data -> messageex [ 1 ];
$ifname = $data -> messageex [ 2 ];
2010-06-13 18:27:38 +00:00
2011-09-20 14:34:27 +00:00
mysql_connect ( $config [ 'db_host' ], $config [ 'db_user' ], $config [ 'db_pass' ]);
mysql_select_db ( $config [ 'db_name' ]);
2011-05-14 21:51:58 +00:00
$device = dbFetchRow ( " SELECT * FROM `devices` WHERE `hostname` = ? " , array ( $device ));
$port = dbFetchRow ( " SELECT * FROM `ports` WHERE `ifName` = ? OR `ifDescr` = ? AND device_id = ? " , array ( $ifname , $ifname , $device [ 'device_id' ]));
2011-09-20 14:34:27 +00:00
mysql_close ();
2010-06-13 18:27:38 +00:00
2011-03-23 09:14:33 +00:00
$bps_in = formatRates ( $port [ 'ifInOctets_rate' ]);
$bps_out = formatRates ( $port [ 'ifOutOctets_rate' ]);
$pps_in = format_bi ( $port [ 'ifInUcastPkts_rate' ]);
$pps_out = format_bi ( $port [ 'ifOutUcastPkts_rate' ]);
2010-06-13 18:27:38 +00:00
2011-05-15 14:11:34 +00:00
$irc -> message ( SMARTIRC_TYPE_CHANNEL , $data -> channel , $port [ 'ifAdminStatus' ] . " / " . $port [ 'ifOperStatus' ] . " " .
2011-03-23 09:14:33 +00:00
$bps_in . " > bps > " . $bps_out . " | " . $pps_in . " pps > PPS > " . $pps_out . " pps " );
2011-05-14 21:51:58 +00:00
2011-09-20 14:34:27 +00:00
echo date ( " m-d-y H:i:s " );
echo " PORT \t \t \t " . $hostname . " \t " . $ifname . " \n " ;
2011-03-23 09:14:33 +00:00
}
2010-06-13 18:27:38 +00:00
2011-05-14 21:51:58 +00:00
###
# !listdevices lists all devices
###
2011-04-21 15:27:41 +00:00
function list_devices ( & $irc , & $data )
{
2011-09-20 14:34:27 +00:00
global $config ;
2011-05-14 21:51:58 +00:00
unset ( $message );
2011-09-20 14:34:27 +00:00
mysql_connect ( $config [ 'db_host' ], $config [ 'db_user' ], $config [ 'db_pass' ]);
mysql_select_db ( $config [ 'db_name' ]);
2011-05-14 21:51:58 +00:00
foreach ( dbFetchRows ( " SELECT `hostname` FROM `devices` " ) as $device )
2011-04-21 15:27:41 +00:00
{
$message .= $sep . $device [ 'hostname' ];
$sep = " , " ;
}
2011-05-14 21:51:58 +00:00
2011-09-20 14:34:27 +00:00
mysql_close ();
2011-05-14 21:51:58 +00:00
2011-04-21 15:27:41 +00:00
$irc -> message ( SMARTIRC_TYPE_CHANNEL , $data -> channel , $message );
unset ( $sep );
2011-05-14 21:51:58 +00:00
2011-09-20 14:34:27 +00:00
echo date ( " m-d-y H:i:s " );
echo " LISTDEVICES \n " ;
2011-04-21 15:27:41 +00:00
}
2011-05-15 14:11:34 +00:00
###
2011-09-20 09:55:11 +00:00
# !status <dev prt srv> gives overall status
2011-05-15 14:11:34 +00:00
###
function status_info ( & $irc , & $data )
{
2011-09-20 14:34:27 +00:00
global $config ;
2011-05-15 14:11:34 +00:00
$statustype = $data -> messageex [ 1 ];
2011-09-20 14:34:27 +00:00
mysql_connect ( $config [ 'db_host' ], $config [ 'db_user' ], $config [ 'db_pass' ]);
mysql_select_db ( $config [ 'db_name' ]);
2011-05-15 14:11:34 +00:00
2011-09-20 14:34:27 +00:00
if ( $statustype == " dev " )
{
$devcount = array_pop ( dbFetchRow ( " SELECT count(*) FROM devices " ));
$devup = array_pop ( dbFetchRow ( " SELECT count(*) FROM devices WHERE status = '1' AND `ignore` = '0' " ));
$devdown = array_pop ( dbFetchRow ( " SELECT count(*) FROM devices WHERE status = '0' AND `ignore` = '0' " ));
$devign = array_pop ( dbFetchRow ( " SELECT count(*) FROM devices WHERE `ignore` = '1' " ));
$devdis = array_pop ( dbFetchRow ( " SELECT count(*) FROM devices WHERE `disabled` = '1' " ));
$irc -> message ( SMARTIRC_TYPE_CHANNEL , $data -> channel , " Devices: " . $devcount . " ( " . $devup . " up, " . $devdown . " down, " . $devign . " ignored, " . $devdis . " disabled " . " ) " );
} else if ( $statustype == " prt " ) {
$prtcount = array_pop ( dbFetchRow ( " SELECT count(*) FROM ports " ));
$prtup = array_pop ( dbFetchRow ( " SELECT count(*) FROM ports AS I, devices AS D WHERE I.ifOperStatus = 'up' AND I.ignore = '0' AND I.device_id = D.device_id AND D.ignore = '0' " ));
$prtdown = array_pop ( dbFetchRow ( " SELECT count(*) FROM ports AS I, devices AS D WHERE I.ifOperStatus = 'down' AND I.ifAdminStatus = 'up' AND I.ignore = '0' AND D.device_id = I.device_id AND D.ignore = '0' " ));
$prtsht = array_pop ( dbFetchRow ( " SELECT count(*) FROM ports AS I, devices AS D WHERE I.ifAdminStatus = 'down' AND I.ignore = '0' AND D.device_id = I.device_id AND D.ignore = '0' " ));
$prtign = array_pop ( dbFetchRow ( " SELECT count(*) FROM ports AS I, devices AS D WHERE D.device_id = I.device_id AND (I.ignore = '1' OR D.ignore = '1') " ));
$prterr = array_pop ( dbFetchRow ( " SELECT count(*) FROM ports AS I, devices AS D WHERE D.device_id = I.device_id AND (I.ignore = '0' OR D.ignore = '0') AND (I.ifInErrors_delta > '0' OR I.ifOutErrors_delta > '0') " ));
$irc -> message ( SMARTIRC_TYPE_CHANNEL , $data -> channel , " Ports: " . $prtcount . " ( " . $prtup . " up, " . $prtdown . " down, " . $prtign . " ignored, " . $prtsht . " shutdown " . " ) " );
} else if ( $statustype == " srv " ) {
$srvcount = array_pop ( dbFetchRow ( " SELECT count(service_id) FROM services " ));
$srvup = array_pop ( dbFetchRow ( " SELECT count(service_id) FROM services WHERE service_status = '1' AND service_ignore ='0' " ));
$srvdown = array_pop ( dbFetchRow ( " SELECT count(service_id) FROM services WHERE service_status = '0' AND service_ignore = '0' " ));
$srvign = array_pop ( dbFetchRow ( " SELECT count(service_id) FROM services WHERE service_ignore = '1' " ));
$srvdis = array_pop ( dbFetchRow ( " SELECT count(service_id) FROM services WHERE service_disabled = '1' " ));
$irc -> message ( SMARTIRC_TYPE_CHANNEL , $data -> channel , " Services: " . $srvcount . " ( " . $srvup . " up, " . $srvdown . " down, " . $srvign . " ignored, " . $srvdis . " disabled " . " ) " );
} else {
$irc -> message ( SMARTIRC_TYPE_CHANNEL , $data -> channel , " Error: STATUS requires one of the following <dev prt srv> " ); }
2011-05-15 14:11:34 +00:00
2011-09-20 14:34:27 +00:00
mysql_close ();
2011-05-15 14:11:34 +00:00
2011-09-20 14:34:27 +00:00
echo date ( " m-d-y H:i:s " );
echo " STATUS \t \t $statustype\n " ;
2011-05-15 14:11:34 +00:00
}
2011-04-21 15:27:41 +00:00
}
2010-06-13 18:27:38 +00:00
2011-03-15 15:27:14 +00:00
$bot = & new observiumbot ();
$irc = & new Net_SmartIRC ();
2011-03-17 11:12:32 +00:00
$irc -> setUseSockets ( TRUE );
2010-06-13 18:27:38 +00:00
2011-04-21 15:27:41 +00:00
$irc -> registerActionhandler ( SMARTIRC_TYPE_CHANNEL , '!listdevices' , $bot , 'list_devices' );
2011-03-17 11:12:32 +00:00
$irc -> registerActionhandler ( SMARTIRC_TYPE_CHANNEL , '!device' , $bot , 'device_info' );
$irc -> registerActionhandler ( SMARTIRC_TYPE_CHANNEL , '!port' , $bot , 'port_info' );
2011-05-14 21:51:58 +00:00
$irc -> registerActionhandler ( SMARTIRC_TYPE_CHANNEL , '!down' , $bot , 'down_info' );
$irc -> registerActionhandler ( SMARTIRC_TYPE_CHANNEL , '!version' , $bot , 'version_info' );
2011-05-15 14:11:34 +00:00
$irc -> registerActionhandler ( SMARTIRC_TYPE_CHANNEL , '!status' , $bot , 'status_info' );
$irc -> registerActionhandler ( SMARTIRC_TYPE_CHANNEL , '!log' , $bot , 'log_info' );
$irc -> registerActionhandler ( SMARTIRC_TYPE_CHANNEL , '!help' , $bot , 'help_info' );
2010-06-13 18:27:38 +00:00
2011-04-21 15:27:41 +00:00
$irc -> connect ( $config [ 'irc_host' ], $config [ 'irc_port' ]);
$irc -> login ( $config [ 'irc_nick' ], 'Observium Bot' , 0 , $config [ 'irc_nick' ]);
$irc -> join ( $config [ 'irc_chan' ]);
2011-03-15 15:27:14 +00:00
$irc -> listen ();
$irc -> disconnect ();
2010-06-13 18:27:38 +00:00
2011-04-21 15:27:41 +00:00
?>