#!/usr/bin/php
<?php
# ------------------------------------------------------------
# Dateiname:        $Source: AlarmTrapHandler $
# Version:          $Revision: 0.1 $
# Datum geaendert:  $Date: 2011/01/10 15:00:00 $
# Autor:            $Author: frido $
#   ---------------------------------------------------------

// imports
$path = preg_replace("/.AlarmInterface.SNMPInterface.AlarmTrapHandler.php/", "", __FILE__);
set_include_path($path . PATH_SEPARATOR . get_include_path());
require_once 'AlarmManagement/AlarmManagement.php';
require_once 'AlarmManagement/DataTypes/EventSpec.php';
require_once 'AlarmManagement/DataTypes/InstAddr.php';
require_once 'AlarmManagement/DataTypes/ServInfl.php';
require_once 'AlarmManagement/DataTypes/AlarmSevty.php';
require_once 'AlarmInterface/AlarmInterfaceAdministration.php';
require_once 'GenericAdmin/DataTypes/AttrBaseType.php';

	// start logging
	$logger = Logger::getInstance();
	$logger->log(__FILE__, "start.");
	
	$fhi = fopen('php://stdin', 'r');
	$serv_infl = null;
	$perc_sev  = null;
	$lcnt = 0;
	$sys_time = date('y.m.d h:i:s');

	while (null != ($inp_line = fgets($fhi))) {
		$logger->log(__FILE__, trim($inp_line));
		$lcnt++;

		switch ($lcnt) {
		case 1:
			$inst_addr = new InstAddr(InstAddrSel::NAME, trim($inp_line));
			break;
		case 2:
			$aux_arr1 = explode ('[', $inp_line);
			$aux_arr2 = explode (']', $aux_arr1[1]);
			$agt_addr = $aux_arr2[0];
			break; 
		case 3:
		    # uptime, not used
			break; 
		default:
			$var_bind = explode ('=', $inp_line);
			switch (trim($var_bind[0])) {
			case '.1.3.6.1.6.3.1.1.4.1.0':
				$trap_oid = trim($var_bind[1]);
				break;
			case '.1.3.6.1.6.3.1.1.4.1.1':
				$serv_infl = new ServInfl((int)$var_bind[1]);
				break;
			case '.1.3.6.1.6.3.1.1.4.1.2':
				$perc_sev = new AlarmSevty((int)$var_bind[1]);
				break;
			case '.1.3.6.1.6.3.1.1.4.1.3':
				$serv_infl = new ServInfl(ServInfl::SI_THRAFF,(int)$var_bind[1]);
				break;
			case '.1.3.6.1.4.1.9.2.1.3': # hostname
				$inst_addr = new InstAddr(InstAddrSel::NAME, trim($var_bind[1]));
				break;
			case '.1.3.6.1.2.1.25.1.2': # hrSystemDate
			    $sys_time = trim($var_bind[1]);
			    break;
			}
		}
	}
	
	if ($trap_oid == ".1.3.6.1.4.1.193.96.115.1.0") { // systemUp
	    
	    $xml= "<RemoteWatchdog><inst_addr>$inst_addr</inst_addr></RemoteWatchdog>"; 
	    
	    $ai = new AlarmInterfaceAdministration();
	    $ai->triggerWatchdog($xml);

	} else {
	
		AlarmManagement::processAlarm(
			$inst_addr,
			$sys_time,
			new EventSpec(EventSel::OID_NUMBER, $trap_oid),
			$serv_infl,
			$perc_sev);
	}

?>