adding SNMP trap handling capability (yes it is horrible horrible right now!)

git-svn-id: http://www.observium.org/svn/observer/trunk@880 61d68cd4-352d-0410-923a-c4978735b2b8
This commit is contained in:
Adam Amstrong
2010-02-17 11:02:18 +00:00
parent 115e4103ff
commit 09e22b2f63
6 changed files with 81 additions and 1 deletions

View File

@@ -101,3 +101,4 @@ ALTER TABLE `links` CHANGE `src_if` `local_interface_id` INT( 11 ) NULL DEFAULT
ALTER TABLE `links` CHANGE `vendor` `protocol` VARCHAR( 11 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL;
ALTER TABLE `processors` CHANGE `processor_type` `processor_type` varchar(16) NOT NULL;
ALTER TABLE `bgpPeers_cbgp` CHANGE `afi` `afi` VARCHAR( 16 ) NOT NULL , CHANGE `safi` `safi` VARCHAR( 16 ) NOT NULL;
ALTER TABLE `eventlog` ADD `reference` VARCHAR( 64 ) NOT NULL AFTER `type`;

View File

@@ -817,6 +817,14 @@ function eventlog($eventtext,$device_id = "", $interface_id = "")
mysql_query($event_query);
}
function log_event($text, $device = NULL, $type = NULL, $reference = NULL) {
$event_query = "INSERT INTO eventlog (host, reference, type, datetime, message) VALUES (" . ($device['device_id'] ? $device['device_id'] : "NULL");
$event_query .= ", " . ($reference ? $reference : "NULL") . ", " . ($type ? $type : "NULL") . ", NOW(), '" . mres($text) . "')";
echo($event_query . "\n");
mysql_query($event_query);
}
function notify($device,$title,$message)
{
global $config;

View File

@@ -0,0 +1,20 @@
<?php
$interface = mysql_fetch_array(mysql_query("SELECT * FROM `interfaces` WHERE `device_id` = '".$device['device_id']."' AND `ifIndex` = '".$entry[2]."'"));
if(!$interface) {exit;}
$ifOperStatus = "down";
#$ifAdminStatus = "down";
log_event("SNMP Trap: linkDown " . $interface['ifDescr'], $device, "interface", $interface['interface_id']);
#if($ifAdminStatus != $interface['ifAdminStatus']) {
# log_event("Interface Disabled : " . $interface['ifDescr'] . " (TRAP)", $device, "interface", $interface['interface_id']);
#}
if($ifOperStatus != $interface['ifOperStatus']) {
log_event("Interface went Down : " . $interface['ifDescr'] . " (TRAP)", $device, "interface", $interface['interface_id']);
mysql_query("UPDATE `interfaces` SET ifOperStatus = 'down' WHERE `interface_id` = '".$interface['interface_id']."'");
}
?>

View File

@@ -0,0 +1,22 @@
<?php
$interface = mysql_fetch_array(mysql_query("SELECT * FROM `interfaces` WHERE `device_id` = '".$device['device_id']."' AND `ifIndex` = '".$entry[2]."'"));
if(!$interface) {exit;}
$ifOperStatus = "up";
$ifAdminStatus = "up";
log_event("SNMP Trap: linkUp $ifAdminStatus/$ifOperStatus " . $interface['ifDescr'], $device, "interface", $interface['interface_id']);
if($ifAdminStatus != $interface['ifAdminStatus']) {
log_event("Interface Enabled : " . $interface['ifDescr'] . " (TRAP)", $device, "interface", $interface['interface_id']);
mysql_query("UPDATE `interfaces` SET ifAdminStatus = 'up' WHERE `interface_id` = '".$interface['interface_id']."'");
}
if($ifOperStatus != $interface['ifOperStatus']) {
log_event("Interface went Up : " . $interface['ifDescr'] . " (TRAP)", $device, "interface", $interface['interface_id']);
mysql_query("UPDATE `interfaces` SET ifOperStatus = 'up' WHERE `interface_id` = '".$interface['interface_id']."'");
}
?>

View File

@@ -82,7 +82,6 @@ if(!$config['graph_colours']['mixed']) {
$config['version'] = "0.10.0";
$config['rrd_opts_array'] = explode(" ", trim($config['rrdgraph_def_text']));
# print_r($config['rrd_opts_array']);
if($config['enable_nagios']) {
$nagios_link = mysql_connect($config['nagios_db_host'], $config['nagios_db_user'], $config['nagios_db_pass']);

30
snmptrap.php Executable file
View File

@@ -0,0 +1,30 @@
#!/usr/bin/php
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set('log_errors', 1);
ini_set('error_reporting', E_ALL);
include("config.php");
include("includes/functions.php");
$entry = explode(",", $argv[1]);
print_r($entry);
$device = @mysql_fetch_array(mysql_query("SELECT * FROM devices WHERE `hostname` = '".$entry['0']."'"));
if(!$device['device_id']) {
$device = @mysql_fetch_array(mysql_query("SELECT * FROM ipv4_addresses AS A, interfaces AS I WHERE
A.ipv4_address = '" . $entry['0']."' AND I.interface_id = A.interface_id"));
}
if(!$device['device_id']) { exit; } else { }
print_r($device);
$file = $config['install_dir'] . "/includes/snmptrap/".$entry['1'].".inc.php";
if(is_file($file)) { include("$file"); } else { echo("unknown trap ($file)"); exit; }
?>