Location: PHPKode > projects > Just For Fun Network Management System > jffnms-0.8.5/htdocs/view_interfaces.php
<?
/* This file is part of JFFNMS
 * Copyright (C) <2002-2005> Javier Szyszlican <hide@address.com>
 * This program is licensed under the GNU GPL, full terms in the LICENSE file
 */
    require ("auth.php");  

    $sources = array ( //information sources
	"interfaces"=>array(
	    "get"=>1,
	    "urls"=>1,
	    "init"=>1,
	    
	    "normal"=>1,
	    "performance"=>1,
	    "text"=>1,
	    "dhtml"=>1
	),
	"hosts" => array(
	    "get"=>1,
	    "urls"=>1,
	    "init"=>1,
	    
	    "dhtml"=>1,
	    "normal"=>1,
	    "text"=>1
	),
	"maps" => array(
	    "get"=>1,
	    "urls"=>1,
	    "init"=>1,
	    
	    "dhtml"=>1,
	    "normal"=>1,
	    "text"=>1
	)
    );

    $views = Array( //views
	"normal"=>Array(
	    "init"=>1,
	    "html_init"=>1,
	    "break_init"=>1,
	    "break_by_host"=>1,
	    "break_by_card"=>1,
	    "break_by_zone"=>1,
	    "break_show"=>1,
	    "break_finish_row"=>1,
	    "break_next_line_span"=>1,
	    "interface_show"=>1,
	    "finish"=>1,
	    "no_interfaces"=>1
	),	   
	"graphviz"=>Array(
	    "init"=>1,
	    "html_init"=>"normal",
	    "break_by_host"=>1,
	    "interface_show"=>1,
	    "finish"=>1,
	    "no_interfaces"=>"normal"
	),
	"text"=>Array(
	    "html_init"=>1,
	    "interface_show"=>1,
	    "finish"=>1,
	    "no_interfaces"=>1
	),
	"performance"=>Array(
	    "init"=>1,
	    "html_init"=>"normal",
	    "break_finish_row"=>"normal",
	    "interface_show"=>1,
	    "no_interfaces"=>"normal"
	),
	"dhtml"=>array(
	    "init"=>1,
	    "html_init"=>1,
	    "break_by_card"=>1,
	    "break_by_zone"=>1,
	    "break_show"=>1,
	    "break_finish_row"=>1,
	    "break_next_line_span"=>1,
	    "interface_show"=>1,
	    "no_interfaces"=>1,
	),
	"dynmap"=>Array(
	    "html_init"=>1,
	    "interface_show"=>"normal",
	    "interface_process"=>1,
	    "finish"=>1,
	    "no_interfaces"=>1,
	    "save"=>1
	)
    );
    
    function call_view ($step) {

	$views = $GLOBALS[views];
	$vtype = $GLOBALS[view_type];
	if (is_string($views[$vtype][$step])) $vtype = $views[$vtype][$step];
	if ($views[$vtype][$step]==1) $callstep=$vtype."_".$step;

	if (!$callstep) $callstep = "none";

	//debug ("View Step: $step - $vtype: $step - $callstep");
	
	$file = "views/view_$callstep.inc.php";
	return $file;
    }    

    function call_source ($step) {

	$sources = $GLOBALS[sources];
	$source = $GLOBALS[source];
	if (is_string($sources[$source][$step])) $step = $sources[$source][$step];
	if ($sources[$source][$step]==1) $callstep=$source."_".$step;

	if (!$callstep) $callstep = "none";

	//debug ("Source Step: Source: $source Step: $step ==> $callstep");
	
	$file = "views/source_$callstep.inc.php";
	return $file;
    }    
    
    //set defaults
    if (!$source) $source = "interfaces";
    if (!$action) $action = "view";
    if (!$view_type) $view_type="normal";

    if (!$screen_size) 
	$screen_size = 980;
    else
	$screen_size -= 40; //decrease 10 pixels
 
    if ($only_rootmap=="") $only_rootmap = 1;
    
    if ($map_id == "") $map_id = 1; //root map;
    if ($map_profile = profile("MAP")) $map_id = $map_profile; //fixed map

    if (empty($client_id)) $client_id = 0;
    if ($client_id_profile = profile("CUSTOMER")) $client_id = $client_id_profile; //fixed customer

    //get refresh from profile if its set
    if ($aux_refresh = profile("MAP_REFRESH")) $map_refresh = $aux_refresh;
    
    $interfaces_shown = 0; //number of interfaces shown

    require(call_view("init")); //init view's internal data

    require(call_source("init")); //init source's internal data

    if ($action=="save") require(call_view("save")); //if there is something to save

    require(call_view("html_init"));
    
    //load items source
    $items = array();
    require(call_source("get"));

    if (count($items) > 0) //if there were items returned
    while (list(,$item) = each ($items)) //go thru them
    if ($item["show_rootmap"] > 0) { //if its meant to be shown

	unset($alarm);
	unset($alarm_name);
	extract($item);
	//debug ($item);

	//clean the interface name
	$interface = str_replace("\"","",$interface);
	$interface = str_replace("'","",$interface);

	list ($int, $card) = interface_shortname_and_card ($interface, $type, $db_break_by_card); //get short names for interface and card
    
	//break the current row because something has changed
	if (($break_by_zone==1)  && ($old_zone != $zone_id)) 	$cols_count = $cols_max; //if break by zone is enabled and zone changed
	if (($break_by_host==1)  && ($old_host != $host)) 	$cols_count = $cols_max; //if break by host is enabled and host changed
	if (($break_by_card==1)  && ($old_card != $card)) 	$cols_count = $cols_max; //if break by card is enabled and card changed

	if ($cols_count==$cols_max) { //when we get to the end of the row
	    require(call_view("break_finish_row"));
	    $cols_count=1; //set current column count to 1
	}

	if ($cols_count==1) { //if this is the first column in a new row
	    if (
	    (($break_by_zone==1)  && ($old_zone!=$zone_id)) || 	//if break by zone is enabled and zone changed
	    (($break_by_host==1)  && ($old_host!=$host)) || 	//if break by host is enabled and host changed
	    (($break_by_card==1)  && ($old_card!=$card)) ) {	//if break by card is enabled and card changed
    		    
		require(call_view("break_init")); //start a new row
		
		//include the new row header
		if ($break_by_zone==1) require(call_view ("break_by_zone")); 
		if ($break_by_card==1) require(call_view ("break_by_card")); 
		if ($break_by_host==1) require(call_view ("break_by_host"));

		require(call_view ("break_show")); //show the header

	    } else 
		require(call_view ("break_next_line_span")); //if new row but not because of a break
	} //cols = 1

	require(call_source("urls")); //call url processing
	
	if (!$alarm_name) $alarm_name= "OK"; //if alarm is not set then its OK
	
	if ($alarm!=NULL) { //interface is alarmed
	    $bgcolor = $bgcolor_aux; 	//take colors from the item
	    $fgcolor = $fgcolor_aux;
	    if ($make_sound==1) $alarms_actual[$alarm][]=$id; //if make_sound active for this interface, put the id in the alarms list
	} else {
	    $bgcolor="64FF64"; //use standard colors for non alarmed interfaces (green)
	    $fgcolor="000000";
	}
	
	if ($show_rootmap==2) { //if its "Mark Disabled"
	    $bgcolor_status = $bgcolor; //set small box color to the real bgcolor
	    $bgcolor="777777"; //set disabled colors (gray)
	    $fgcolor="222222";
	}
    
	require(call_view ("interface_show")); //show the interface
	
	//save current zone, host or card to compare it to a new one
	if ($break_by_zone==1) $old_zone = $zone_id;
	if ($break_by_host==1) $old_host = $host;
	if ($break_by_card==1) $old_card = $card;

	$cols_count++;
    }//items loop
    
    require(call_view ("finish")); 	//final processing

    if ($interfaces_shown == 0) 		//if no interface were shown
	require(call_view ("no_interfaces")); 	//call the "no interfaces" sign
    
    // ALARM SOUND PROCESSING        
    if (($action == "view") && ($sound==1)) { //if action is view (normal) and sounds are enabled
	
	$alarms_diff = array();
	$alarms_last = unserialize(stripslashes($alarms_last)); //get alarm list from last time

	if ((time() > $alarms_time+($map_sound_renew_time*60)) && ($map_sound_renew_time > 0)) //if the alarms are expired 
	    unset($alarms_last); //delete the last alarms so we play the currents again

	if (!isset($alarms_last)) 	$alarms_last=array();
	if (!isset($alarms_actual)) 	$alarms_actual=array();

	$array_aux = array_merge(array_keys($alarms_actual),array_keys($alarms_last)); //merge both keys

	foreach ($array_aux as $key){ //every different alarm_state id (new or old)
	    if (!isset($alarms_last[$key])) 	$alarms_last[$key]=array(); 	//if not set, set it empty
	    if (!isset($alarms_actual[$key])) 	$alarms_actual[$key]=array(); 	//if not set, set it empty
	    
	    //get the diff of both alarms list (in = exists in actual, and not in last), (out = exists in last but not in actual)
	    $alarms_diff[$key]["out"] = array_diff($alarms_last[$key],$alarms_actual[$key]);
	    $alarms_diff[$key]["in"] = array_diff($alarms_actual[$key],$alarms_last[$key]);
	}

	//debugging
	//debug($alarms_actual);
	//debug($alarms_last);
	//debug($alarms_diff);
	
	unset($alarm_api);
	if ((count($alarms_diff) > 0) && ($alarms_time)) //if there is a diff and this is not the first call 
	    foreach ($alarms_diff as $alarm_state_id=>$diff_items) //go thru all diffs
	
		if ((count($diff_items["in"]) > 0) || (count($diff_items["out"]) > 0)) { //if there's something to do

		    if (!isset($alarm_api)) $alarm_api = $jffnms->get("alarm_states"); //get the api handler
		    $sounds = current($alarm_api->get_all($alarm_state_id)); //get the record for this alarm state id
	
		    if (count($diff_items["in"]) > 0) //if there are IN items in this alarm state
			echo "<!-- Alarm: IN $alarm_state_id -->\n".play_sound($sounds["sound_in"])."\n"; //play the sound

		    if (count($diff_items["out"]) > 0) //if there are OUT items in this alarm state
			echo "<!-- Alarm: OUT $alarm_state_id -->\n".play_sound($sounds["sound_out"])."\n"; //play the sound
		    
		    $alarms_time=time(); //set alarm last time to now
		}

	if (!$alarms_time) $alarms_time=time(); //if this is the first time we've been called set the alarm last time to now

	//get the new values in the url for the refresh
	$url=array();
	$url["alarms_last"] = serialize($alarms_actual);
	$url["alarms_time"] = $alarms_time;

	clean_url($url);
    }//alarm sound processing

    if ($norefresh!=1) //dont refresh if we're ask not to
	echo javascript_refresh("if (self.no_refresh!=1) location.href=\"$REQUEST_URI\";",$map_refresh); 

    adm_footer();
?>
Return current item: Just For Fun Network Management System