2015-03-18 17:51:47 +01:00
< ? php
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
// Please see http://pandorafms.org for full contribution list
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation; version 2
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
/**
* @ package Include
* @ subpackage Reporting
*/
/**
* Include the usual functions
*/
require_once ( $config [ " homedir " ] . " /include/functions.php " );
require_once ( $config [ " homedir " ] . " /include/functions_db.php " );
require_once ( $config [ " homedir " ] . " /include/functions_agents.php " );
include_once ( $config [ " homedir " ] . " /include/functions_groups.php " );
require_once ( $config [ " homedir " ] . '/include/functions_graph.php' );
include_once ( $config [ 'homedir' ] . " /include/functions_modules.php " );
include_once ( $config [ 'homedir' ] . " /include/functions_events.php " );
include_once ( $config [ 'homedir' ] . " /include/functions_alerts.php " );
include_once ( $config [ 'homedir' ] . '/include/functions_users.php' );
enterprise_include_once ( 'include/functions_metaconsole.php' );
enterprise_include_once ( 'include/functions_inventory.php' );
include_once ( $config [ 'homedir' ] . " /include/functions_forecast.php " );
include_once ( $config [ 'homedir' ] . " /include/functions_ui.php " );
include_once ( $config [ 'homedir' ] . " /include/functions_netflow.php " );
/**
* Get the average value of an agent module in a period of time .
*
* @ param int Agent module id
* @ param int Period of time to check ( in seconds )
* @ param int Top date to check the values . Default current time .
*
* @ return float The average module value in the interval .
*/
function reporting_get_agentmodule_data_average ( $id_agent_module , $period = 0 , $date = 0 ) {
global $config ;
// Initialize variables
if ( empty ( $date )) $date = get_system_time ();
$datelimit = $date - $period ;
$search_in_history_db = db_search_in_history_db ( $datelimit );
$id_module_type = modules_get_agentmodule_type ( $id_agent_module );
$module_type = modules_get_moduletype_name ( $id_module_type );
$uncompressed_module = is_module_uncompressed ( $module_type );
// Get module data
$interval_data = db_get_all_rows_sql ( ' SELECT *
FROM tagente_datos
WHERE id_agente_modulo = ' . ( int ) $id_agent_module .
' AND utimestamp > ' . ( int ) $datelimit .
' AND utimestamp < ' . ( int ) $date .
' ORDER BY utimestamp ASC' , $search_in_history_db );
if ( $interval_data === false ) $interval_data = array ();
// Uncompressed module data
if ( $uncompressed_module ) {
$min_necessary = 1 ;
// Compressed module data
}
else {
// Get previous data
$previous_data = modules_get_previous_data ( $id_agent_module , $datelimit );
if ( $previous_data !== false ) {
$previous_data [ 'utimestamp' ] = $datelimit ;
array_unshift ( $interval_data , $previous_data );
}
// Get next data
$next_data = modules_get_next_data ( $id_agent_module , $date );
if ( $next_data !== false ) {
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
else if ( count ( $interval_data ) > 0 ) {
// Propagate the last known data to the end of the interval
$next_data = array_pop ( $interval_data );
array_push ( $interval_data , $next_data );
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
$min_necessary = 2 ;
}
if ( count ( $interval_data ) < $min_necessary ) {
return false ;
}
// Set initial conditions
$total = 0 ;
$count = 0 ;
if ( ! $uncompressed_module ) {
$previous_data = array_shift ( $interval_data );
// Do not count the empty start of an interval as 0
if ( $previous_data [ 'utimestamp' ] != $datelimit ) {
$period = $date - $previous_data [ 'utimestamp' ];
}
}
foreach ( $interval_data as $data ) {
if ( ! $uncompressed_module ) {
$total += $previous_data [ 'datos' ] * ( $data [ 'utimestamp' ] - $previous_data [ 'utimestamp' ]);
$previous_data = $data ;
}
else {
$total += $data [ 'datos' ];
$count ++ ;
}
}
// Compressed module data
if ( ! $uncompressed_module ) {
if ( $period == 0 ) {
return 0 ;
}
return $total / $period ;
}
// Uncompressed module data
if ( $count == 0 ) {
return 0 ;
}
return $total / $count ;
}
/**
* Get the maximum value of an agent module in a period of time .
*
* @ param int Agent module id to get the maximum value .
* @ param int Period of time to check ( in seconds )
* @ param int Top date to check the values . Default current time .
*
* @ return float The maximum module value in the interval .
*/
function reporting_get_agentmodule_data_max ( $id_agent_module , $period = 0 , $date = 0 ) {
global $config ;
// Initialize variables
if ( empty ( $date )) $date = get_system_time ();
$datelimit = $date - $period ;
$search_in_history_db = db_search_in_history_db ( $datelimit );
$id_module_type = modules_get_agentmodule_type ( $id_agent_module );
$module_type = modules_get_moduletype_name ( $id_module_type );
$uncompressed_module = is_module_uncompressed ( $module_type );
// Get module data
$interval_data = db_get_all_rows_sql ( ' SELECT *
FROM tagente_datos
WHERE id_agente_modulo = ' . ( int ) $id_agent_module .
' AND utimestamp > ' . ( int ) $datelimit .
' AND utimestamp < ' . ( int ) $date .
' ORDER BY utimestamp ASC' , $search_in_history_db );
if ( $interval_data === false ) $interval_data = array ();
// Uncompressed module data
if ( $uncompressed_module ) {
// Compressed module data
}
else {
// Get previous data
$previous_data = modules_get_previous_data ( $id_agent_module , $datelimit );
if ( $previous_data !== false ) {
$previous_data [ 'utimestamp' ] = $datelimit ;
array_unshift ( $interval_data , $previous_data );
}
// Get next data
$next_data = modules_get_next_data ( $id_agent_module , $date );
if ( $next_data !== false ) {
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
else if ( count ( $interval_data ) > 0 ) {
// Propagate the last known data to the end of the interval
$next_data = array_pop ( $interval_data );
array_push ( $interval_data , $next_data );
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
}
// Set initial conditions
if ( empty ( $iterval_data )) {
$max = 0 ;
}
else {
if ( $uncompressed_module || $interval_data [ 0 ][ 'utimestamp' ] == $datelimit ) {
$max = $interval_data [ 0 ][ 'datos' ];
}
else {
$max = 0 ;
}
}
foreach ( $interval_data as $data ) {
if ( $data [ 'datos' ] > $max ) {
$max = $data [ 'datos' ];
}
}
return $max ;
}
/**
* Get the minimum value of an agent module in a period of time .
*
* @ param int Agent module id to get the minimum value .
* @ param int Period of time to check ( in seconds )
* @ param int Top date to check the values in Unix time . Default current time .
*
* @ return float The minimum module value of the module
*/
function reporting_get_agentmodule_data_min ( $id_agent_module , $period = 0 , $date = 0 ) {
global $config ;
// Initialize variables
if ( empty ( $date )) $date = get_system_time ();
$datelimit = $date - $period ;
$search_in_history_db = db_search_in_history_db ( $datelimit );
$id_module_type = modules_get_agentmodule_type ( $id_agent_module );
$module_type = modules_get_moduletype_name ( $id_module_type );
$uncompressed_module = is_module_uncompressed ( $module_type );
// Get module data
$interval_data = db_get_all_rows_sql ( ' SELECT *
FROM tagente_datos
WHERE id_agente_modulo = ' . ( int ) $id_agent_module .
' AND utimestamp > ' . ( int ) $datelimit .
' AND utimestamp < ' . ( int ) $date .
' ORDER BY utimestamp ASC' , $search_in_history_db );
if ( $interval_data === false ) $interval_data = array ();
// Uncompressed module data
if ( $uncompressed_module ) {
$min_necessary = 1 ;
// Compressed module data
}
else {
// Get previous data
$previous_data = modules_get_previous_data ( $id_agent_module , $datelimit );
if ( $previous_data !== false ) {
$previous_data [ 'utimestamp' ] = $datelimit ;
array_unshift ( $interval_data , $previous_data );
}
// Get next data
$next_data = modules_get_next_data ( $id_agent_module , $date );
if ( $next_data !== false ) {
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
else if ( count ( $interval_data ) > 0 ) {
// Propagate the last known data to the end of the interval
$next_data = array_pop ( $interval_data );
array_push ( $interval_data , $next_data );
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
}
if ( count ( $interval_data ) < 1 ) {
return false ;
}
// Set initial conditions
$min = $interval_data [ 0 ][ 'datos' ];
foreach ( $interval_data as $data ) {
if ( $data [ 'datos' ] < $min ) {
$min = $data [ 'datos' ];
}
}
return $min ;
}
/**
* Get the sum of values of an agent module in a period of time .
*
* @ param int Agent module id to get the sumatory .
* @ param int Period of time to check ( in seconds )
* @ param int Top date to check the values . Default current time .
*
* @ return float The sumatory of the module values in the interval .
*/
function reporting_get_agentmodule_data_sum ( $id_agent_module ,
$period = 0 , $date = 0 ) {
global $config ;
// Initialize variables
if ( empty ( $date )) $date = get_system_time ();
$datelimit = $date - $period ;
$search_in_history_db = db_search_in_history_db ( $datelimit );
$id_module_type = db_get_value ( 'id_tipo_modulo' , 'tagente_modulo' ,
'id_agente_modulo' , $id_agent_module );
$module_name = db_get_value ( 'nombre' , 'ttipo_modulo' , 'id_tipo' ,
$id_module_type );
$module_interval = modules_get_interval ( $id_agent_module );
$uncompressed_module = is_module_uncompressed ( $module_name );
// Wrong module type
if ( is_module_data_string ( $module_name )) {
return 0 ;
}
// Incremental modules are treated differently
$module_inc = is_module_inc ( $module_name );
// Get module data
$interval_data = db_get_all_rows_sql ( '
SELECT * FROM tagente_datos
WHERE id_agente_modulo = ' . (int) $id_agent_module . '
AND utimestamp > ' . (int) $datelimit . '
AND utimestamp < ' . (int) $date . '
ORDER BY utimestamp ASC ' , $search_in_history_db );
if ( $interval_data === false ) $interval_data = array ();
// Uncompressed module data
if ( $uncompressed_module ) {
$min_necessary = 1 ;
// Compressed module data
}
else {
// Get previous data
$previous_data = modules_get_previous_data ( $id_agent_module , $datelimit );
if ( $previous_data !== false ) {
$previous_data [ 'utimestamp' ] = $datelimit ;
array_unshift ( $interval_data , $previous_data );
}
// Get next data
$next_data = modules_get_next_data ( $id_agent_module , $date );
if ( $next_data !== false ) {
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
else if ( count ( $interval_data ) > 0 ) {
// Propagate the last known data to the end of the interval
$next_data = array_pop ( $interval_data );
array_push ( $interval_data , $next_data );
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
$min_necessary = 2 ;
}
if ( count ( $interval_data ) < $min_necessary ) {
return false ;
}
// Set initial conditions
$total = 0 ;
if ( ! $uncompressed_module ) {
$previous_data = array_shift ( $interval_data );
}
foreach ( $interval_data as $data ) {
if ( $uncompressed_module ) {
$total += $data [ 'datos' ];
}
else if ( $module_inc ) {
$total += $previous_data [ 'datos' ] * ( $data [ 'utimestamp' ] - $previous_data [ 'utimestamp' ]);
}
else {
$total += $previous_data [ 'datos' ] * ( $data [ 'utimestamp' ] - $previous_data [ 'utimestamp' ]) / $module_interval ;
}
$previous_data = $data ;
}
return $total ;
}
/**
* Get SLA of a module .
*
* @ param int Agent module to calculate SLA
* @ param int Period to check the SLA compliance .
* @ param int Minimum data value the module in the right interval
* @ param int Maximum data value the module in the right interval . False will
* ignore max value
* @ param int Beginning date of the report in UNIX time ( current date by default ) .
* @ param array $dayWeek Array of days week to extract as array ( 'monday' => false , 'tuesday' => true .... ), and by default is null .
* @ param string $timeFrom Time in the day to start to extract in mysql format , by default null .
* @ param string $timeTo Time in the day to end to extract in mysql format , by default null .
*
* @ return float SLA percentage of the requested module . False if no data were
* found
*/
function reporting_get_agentmodule_sla ( $id_agent_module , $period = 0 , $min_value = 1 , $max_value = false , $date = 0 , $daysWeek = null , $timeFrom = null , $timeTo = null ) {
global $config ;
if ( empty ( $id_agent_module ))
return false ;
// Initialize variables
if ( empty ( $date )) {
$date = get_system_time ();
}
if ( $daysWeek === null ) {
$daysWeek = array ();
}
// Limit date to start searching data
$datelimit = $date - $period ;
$search_in_history_db = db_search_in_history_db ( $datelimit );
// Get interval data
$sql = sprintf ( ' SELECT *
FROM tagente_datos
WHERE id_agente_modulo = % d
AND utimestamp > % d AND utimestamp <= % d ' ,
$id_agent_module , $datelimit , $date );
//Add the working times (mon - tue - wed ...) and from time to time
$days = array ();
//Translate to mysql week days
if ( $daysWeek ) {
foreach ( $daysWeek as $key => $value ) {
if ( ! $value ) {
if ( $key == 'monday' ) {
$days [] = 2 ;
}
if ( $key == 'tuesday' ) {
$days [] = 3 ;
}
if ( $key == 'wednesday' ) {
$days [] = 4 ;
}
if ( $key == 'thursday' ) {
$days [] = 5 ;
}
if ( $key == 'friday' ) {
$days [] = 6 ;
}
if ( $key == 'saturday' ) {
$days [] = 7 ;
}
if ( $key == 'sunday' ) {
$days [] = 1 ;
}
}
}
}
if ( count ( $days ) > 0 ) {
$sql .= ' AND DAYOFWEEK(FROM_UNIXTIME(utimestamp)) NOT IN (' . implode ( ',' , $days ) . ')' ;
}
if ( $timeFrom < $timeTo ) {
$sql .= ' AND (TIME(FROM_UNIXTIME(utimestamp)) >= "' . $timeFrom . '" AND TIME(FROM_UNIXTIME(utimestamp)) <= "' . $timeTo . '")' ;
}
elseif ( $timeFrom > $timeTo ) {
$sql .= ' AND (TIME(FROM_UNIXTIME(utimestamp)) >= "' . $timeFrom . '" OR TIME(FROM_UNIXTIME(utimestamp)) <= "' . $timeTo . '")' ;
}
$sql .= ' ORDER BY utimestamp ASC' ;
$interval_data = db_get_all_rows_sql ( $sql , $search_in_history_db );
if ( $interval_data === false ) {
$interval_data = array ();
}
// Calculate planned downtime dates
$downtime_dates = reporting_get_planned_downtimes_intervals ( $id_agent_module , $datelimit , $date );
// Get previous data
$previous_data = modules_get_previous_data ( $id_agent_module , $datelimit );
if ( $previous_data !== false ) {
$previous_data [ 'utimestamp' ] = $datelimit ;
array_unshift ( $interval_data , $previous_data );
}
// Get next data
$next_data = modules_get_next_data ( $id_agent_module , $date );
if ( $next_data !== false ) {
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
else if ( count ( $interval_data ) > 0 ) {
// Propagate the last known data to the end of the interval
$next_data = array_pop ( $interval_data );
array_push ( $interval_data , $next_data );
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
if ( count ( $interval_data ) < 2 ) {
return false ;
}
// Set initial conditions
$bad_period = 0 ;
$first_data = array_shift ( $interval_data );
// Do not count the empty start of an interval as 0
if ( $first_data [ 'utimestamp' ] != $datelimit ) {
$period = $date - $first_data [ 'utimestamp' ];
}
$previous_utimestamp = $first_data [ 'utimestamp' ];
if ((( $max_value > $min_value AND ( $first_data [ 'datos' ] > $max_value OR $first_data [ 'datos' ] < $min_value ))) OR
( $max_value <= $min_value AND $first_data [ 'datos' ] < $min_value )) {
$previous_status = 1 ;
foreach ( $downtime_dates as $date_dt ) {
if (( $date_dt [ 'date_from' ] <= $previous_utimestamp ) AND ( $date_dt [ 'date_to' ] >= $previous_utimestamp )) {
$previous_status = 0 ;
}
}
}
else {
$previous_status = 0 ;
}
foreach ( $interval_data as $data ) {
// Previous status was critical
if ( $previous_status == 1 ) {
$bad_period += $data [ 'utimestamp' ] - $previous_utimestamp ;
}
if ( array_key_exists ( 'datos' , $data )) {
// Re-calculate previous status for the next data
if ((( $max_value > $min_value AND ( $data [ 'datos' ] > $max_value OR $data [ 'datos' ] < $min_value ))) OR
( $max_value <= $min_value AND $data [ 'datos' ] < $min_value )) {
$previous_status = 1 ;
foreach ( $downtime_dates as $date_dt ) {
if (( $date_dt [ 'date_from' ] <= $data [ 'utimestamp' ]) AND ( $date_dt [ 'date_to' ] >= $data [ 'utimestamp' ])) {
$previous_status = 0 ;
}
}
}
else {
$previous_status = 0 ;
}
}
$previous_utimestamp = $data [ 'utimestamp' ];
}
// Return the percentage of SLA compliance
return ( float ) ( 100 - ( $bad_period / $period ) * 100 );
}
/**
* Get several SLA data for an agentmodule within a period divided on subperiods
*
* @ param int Agent module to calculate SLA
* @ param int Period to check the SLA compliance .
* @ param int Minimum data value the module in the right interval
* @ param int Maximum data value the module in the right interval . False will
* ignore max value
* @ param array $days Array of days week to extract as array ( 'monday' => false , 'tuesday' => true .... ), and by default is null .
* @ param string $timeFrom Time in the day to start to extract in mysql format , by default null .
* @ param string $timeTo Time in the day to end to extract in mysql format , by default null .
*
* @ return Array with values either 1 , 2 , 3 or 4 depending if the SLA percentage for this subperiod
* is within the sla limits , on the edge , outside or with an unknown value .
*/
function reporting_get_agentmodule_sla_array ( $id_agent_module , $period = 0 , $min_value = 1 , $max_value = false , $date = 0 , $daysWeek = null , $timeFrom = null , $timeTo = null ) {
global $config ;
if ( empty ( $id_agent_module ))
return false ;
// Initialize variables
if ( empty ( $date )) {
$date = get_system_time ();
}
if ( $daysWeek === null ) {
$daysWeek = array ();
}
// Hotfix: The edge values are confuse to the users
$percent = 0 ;
// Limit date to start searching data
$datelimit = $date - $period ;
$search_in_history_db = db_search_in_history_db ( $datelimit );
// Get interval data
$sql = sprintf ( ' SELECT * FROM tagente_datos
WHERE id_agente_modulo = % d
AND utimestamp > % d AND utimestamp <= % d ' ,
$id_agent_module , $datelimit , $date );
//Add the working times (mon - tue - wed ...) and from time to time
$days = array ();
//Translate to mysql week days
if ( $daysWeek ) {
foreach ( $daysWeek as $key => $value ) {
if ( ! $value ) {
if ( $key == 'monday' ) {
$days [] = 2 ;
}
if ( $key == 'tuesday' ) {
$days [] = 3 ;
}
if ( $key == 'wednesday' ) {
$days [] = 4 ;
}
if ( $key == 'thursday' ) {
$days [] = 5 ;
}
if ( $key == 'friday' ) {
$days [] = 6 ;
}
if ( $key == 'saturday' ) {
$days [] = 7 ;
}
if ( $key == 'sunday' ) {
$days [] = 1 ;
}
}
}
}
if ( count ( $days ) > 0 ) {
$sql .= ' AND DAYOFWEEK(FROM_UNIXTIME(utimestamp)) NOT IN (' . implode ( ',' , $days ) . ')' ;
}
if ( $timeFrom != $timeTo ) {
if ( $timeFrom < $timeTo ) {
$sql .= ' AND (TIME(FROM_UNIXTIME(utimestamp)) >= "' . $timeFrom . '" AND TIME(FROM_UNIXTIME(utimestamp)) <= "' . $timeTo . '")' ;
}
elseif ( $timeFrom > $timeTo ) {
$sql .= ' AND (TIME(FROM_UNIXTIME(utimestamp)) >= "' . $timeFrom . '" OR TIME(FROM_UNIXTIME(utimestamp)) <= "' . $timeTo . '")' ;
}
}
$sql .= ' ORDER BY utimestamp ASC' ;
$interval_data = db_get_all_rows_sql ( $sql , $search_in_history_db );
if ( $interval_data === false ) {
$interval_data = array ();
}
// Indexing data
$interval_data_indexed = array ();
foreach ( $interval_data as $idata ) {
$interval_data_indexed [ $idata [ 'utimestamp' ]][ 'data' ] = $idata [ 'datos' ];
}
//-----------Calculate unknown status events------------------------
$events_unknown = db_get_all_rows_filter ( 'tevento' ,
array ( 'id_agentmodule' => $id_agent_module ,
" utimestamp > $datelimit " ,
" utimestamp < $date " ,
'order' => 'utimestamp ASC' ),
array ( 'id_evento' , 'evento' , 'timestamp' , 'utimestamp' , 'event_type' ));
if ( $events_unknown === false ) {
$events_unknown = array ();
}
// Add unknown periods to data
for ( $i = 0 ; isset ( $events_unknown [ $i ]); $i ++ ) {
$eu = $events_unknown [ $i ];
if ( $eu [ 'event_type' ] == 'going_unknown' ) {
$interval_data_indexed [ $eu [ 'utimestamp' ]][ 'data' ] = 0 ;
$interval_data_indexed [ $eu [ 'utimestamp' ]][ 'status' ] = 4 ;
// Search the corresponding recovery event.
for ( $j = $i + 1 ; isset ( $events_unknown [ $j ]); $j ++ ) {
$eu = $events_unknown [ $j ];
if ( $eu [ 'event_type' ] != 'going_unknown' && substr ( $eu [ 'event_type' ], 0 , 5 ) == 'going' ) {
$interval_data_indexed [ $eu [ 'utimestamp' ]][ 'data' ] = 0 ;
$interval_data_indexed [ $eu [ 'utimestamp' ]][ 'status' ] = 6 ;
// Do not process read events again.
$i = $j ;
break ;
}
}
}
}
// Get the last event before inverval to know if graph start on unknown
$prev_event = db_get_row_filter ( 'tevento' ,
array ( 'id_agentmodule' => $id_agent_module ,
" utimestamp <= $datelimit " ,
'order' => 'utimestamp DESC' ));
if ( isset ( $prev_event [ 'event_type' ]) && $prev_event [ 'event_type' ] == 'going_unknown' ) {
$start_unknown = true ;
}
else {
$start_unknown = false ;
}
//------------------------------------------------------------------
//-----------------Set limits of the interval-----------------------
// Get previous data (This adds the first data if the begin of module data is after the begin time interval)
$previous_data = modules_get_previous_data ( $id_agent_module , $datelimit );
if ( $previous_data !== false ) {
$previous_value = $previous_data [ 'datos' ];
// if ((($previous_value > ($min_value - $percent)) && ($previous_value < ($min_value + $percent))) ||
// (($previous_value > ($max_value - $percent)) && ($previous_value < ($max_value + $percent)))) {//2 when value is within the edges
// $previous_known_status = 2;
// }
// else
if (( $previous_value >= ( $min_value + $percent )) && ( $previous_value <= ( $max_value - $percent ))) { //1 when value is OK
$previous_known_status = 1 ;
}
elseif (( $previous_value <= ( $min_value - $percent )) || ( $previous_value >= ( $max_value + $percent ))) { //3 when value is Wrong
$previous_known_status = 3 ;
}
}
// If the starting of the graph is unknown we set it
if ( $start_unknown ) {
$interval_data_indexed [ $datelimit ][ 'data' ] = 0 ;
$interval_data_indexed [ $datelimit ][ 'status' ] = 4 ;
}
else {
if ( $previous_data !== false ) {
$interval_data_indexed [ $datelimit ][ 'data' ] = $previous_data [ 'datos' ];
}
else { // If there are not data befor interval set unknown
$interval_data_indexed [ $datelimit ][ 'data' ] = 0 ;
$interval_data_indexed [ $datelimit ][ 'status' ] = 4 ;
$previous_known_status = 1 ; // Assume the module was in normal status if there is no previous data.
}
}
// Get next data (This adds data before the interval of the report)
$next_data = modules_get_next_data ( $id_agent_module , $date );
if ( $next_data !== false ) {
$interval_data_indexed [ $date ][ 'data' ] = $previous_data [ 'datos' ];
}
else if ( count ( $interval_data_indexed ) > 0 ) {
// Propagate the last known data to the end of the interval (if there is no module data at the end point)
ksort ( $interval_data_indexed );
$last_data = end ( $interval_data_indexed );
$interval_data_indexed [ $date ] = $last_data ;
}
//------------------------------------------------------------------
//--------Calculate planned downtime dates--------------------------
$downtime_dates = reporting_get_planned_downtimes_intervals ( $id_agent_module , $datelimit , $date );
foreach ( $downtime_dates as $downtime_date ) {
// Delete data of the planned downtime and put the last data on the upper limit
$interval_data_indexed [ $downtime_date [ 'date_from' ]][ 'data' ] = 0 ;
$interval_data_indexed [ $downtime_date [ 'date_from' ]][ 'status' ] = 5 ;
$interval_data_indexed [ $downtime_date [ 'date_to' ]][ 'data' ] = 0 ;
$interval_data_indexed [ $downtime_date [ 'date_to' ]][ 'status' ] = 4 ;
$last_downtime_data = false ;
foreach ( $interval_data_indexed as $idi_timestamp => $idi ) {
if ( $idi_timestamp != $downtime_date [ 'date_from' ] && $idi_timestamp != $downtime_date [ 'date_to' ] &&
$idi_timestamp >= $downtime_date [ 'date_from' ] && $idi_timestamp <= $downtime_date [ 'date_to' ]) {
$last_downtime_data = $idi [ 'data' ];
unset ( $interval_data_indexed [ $idi_timestamp ]);
}
}
// Set the last data of the interval as limit
if ( $last_downtime_data !== false ) {
$interval_data_indexed [ $downtime_date [ 'date_to' ]][ 'data' ] = $last_downtime_data ;
}
}
//------------------------------------------------------------------
// Sort the array
ksort ( $interval_data_indexed );
// We need more or equal two points
if ( count ( $interval_data_indexed ) < 2 ) {
return false ;
}
//Get the percentage for the limits
$diff = $max_value - $min_value ;
// Get module type
$id_module_type = db_get_value ( 'id_tipo_modulo' , 'tagente_modulo' , 'id_agente_modulo' , $id_agent_module );
// If module is boolean don't create translation intervals (on the edge intervals)
// if ($id_module_type == 2 or $id_module_type == 6 or $id_module_type == 9 or $id_module_type == 18){
// $percent = 0;
// }
// else {
// // Getting 10% of $diff --> $percent = ($diff/100)*10, so...
// $percent = $diff / 10;
// }
//Set initial conditions
$first_data = array_shift ( $interval_data );
$previous_utimestamp = $date - $period ;
$previous_value = $first_data [ 'datos' ];
$previous_status = 0 ;
if ( isset ( $first_data [ 'status' ])) {
// 4 for the Unknown value and 5 for planned downtime
$previous_status = $first_data [ 'status' ];
}
// elseif ((($previous_value > ($min_value - $percent)) && ($previous_value < ($min_value + $percent))) ||
// (($previous_value > ($max_value - $percent)) && ($previous_value < ($max_value + $percent)))) {//2 when value is within the edges
// $previous_status = 2;
// }
elseif (( $previous_value >= ( $min_value + $percent )) && ( $previous_value <= ( $max_value - $percent ))) { //1 when value is OK
$previous_status = 1 ;
}
elseif (( $previous_value <= ( $min_value - $percent )) || ( $previous_value >= ( $max_value + $percent ))) { //3 when value is Wrong
$previous_status = 3 ;
}
$data_colors = array ();
$i = 0 ;
foreach ( $interval_data_indexed as $utimestamp => $data ) {
$change = false ;
$value = $data [ 'data' ];
if ( isset ( $data [ 'status' ])) {
// Leaving unkown status.
if ( $data [ 'status' ] == 6 ) {
$status = $previous_known_status ;
}
// 4 unknown, 5 planned downtime.
else {
$status = $data [ 'status' ];
}
}
// elseif ((($value > ($min_value - $percent)) && ($value < ($min_value + $percent))) ||
// (($value > ($max_value - $percent)) && ($value < ($max_value + $percent)))) { //2 when value is within the edges
// $status = 2;
// }
elseif (( $value >= ( $min_value + $percent )) && ( $value <= ( $max_value - $percent ))) { //1 when value is OK
$status = 1 ;
}
elseif (( $value <= ( $min_value - $percent )) || ( $value >= ( $max_value + $percent ))) { //3 when value is Wrong
$status = 3 ;
}
if ( $status != $previous_status ) {
$change = true ;
$data_colors [ $i ][ 'data' ] = $previous_status ;
$data_colors [ $i ][ 'utimestamp' ] = $utimestamp - $previous_utimestamp ;
$i ++ ;
$previous_status = $status ;
$previous_utimestamp = $utimestamp ;
}
// Save the last known status.
if ( $status <= 3 ) {
$previous_known_status = $status ;
}
}
if ( $change == false ) {
$data_colors [ $i ][ 'data' ] = $previous_status ;
$data_colors [ $i ][ 'utimestamp' ] = $date - $previous_utimestamp ;
}
return $data_colors ;
}
2015-12-31 13:37:56 +01:00
/**
* Get Monitor report of a module .
* if (( $min_value < $data [ 'datos' ]) OR ( $max_value > 0 AND
( $data [ 'datos' ] > $min_value AND $data [ 'datos' ] < $max_value )))
* @ param int Agent module to calculate monitor report
* @ param int Period to check the SLA compliance .
* @ param int Minimum data value the module in the right interval
* @ param int Maximum data value the module in the right interval . False will
* ignore max value
* @ param int Beginning date of the report in UNIX time ( current date by default ) .
*
* @ return float Monitor percentage of the requested module . False if no data were
* found
*/
function reporting_get_agentmodule_monitor ( $id_agent_module , $period = 0 , $min_value = 1 , $max_value = false , $date = 0 ) {
global $config ;
if ( empty ( $id_agent_module ))
return false ;
// Set initial conditions
$bad_period = 0 ;
// Limit date to start searching data
$datelimit = $date - $period ;
$search_in_history_db = db_search_in_history_db ( $datelimit );
// Initialize variables
if ( empty ( $date )) {
$date = get_system_time ();
}
if ( $daysWeek === null ) {
$daysWeek = array ();
}
// Calculate the SLA for large time without hours
// Get interval data
$sql = sprintf ( ' SELECT *
FROM tagente_datos
WHERE id_agente_modulo = % d
AND utimestamp > % d AND utimestamp <= % d ' ,
$id_agent_module , $datelimit , $date );
$sql .= ' ORDER BY utimestamp ASC' ;
$interval_data = db_get_all_rows_sql ( $sql , $search_in_history_db );
if ( $interval_data === false ) {
$interval_data = array ();
}
// Calculate planned downtime dates
$downtime_dates = reporting_get_planned_downtimes_intervals (
$id_agent_module , $datelimit , $date );
// Get previous data
$previous_data = modules_get_previous_data ( $id_agent_module , $datelimit );
if ( $previous_data !== false ) {
$previous_data [ 'utimestamp' ] = $datelimit ;
array_unshift ( $interval_data , $previous_data );
}
// Get next data
$next_data = modules_get_next_data ( $id_agent_module , $date );
if ( $next_data !== false ) {
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
else if ( count ( $interval_data ) > 0 ) {
// Propagate the last known data to the end of the interval
$next_data = array_pop ( $interval_data );
array_push ( $interval_data , $next_data );
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
if ( count ( $interval_data ) < 2 ) {
return false ;
}
$first_data = array_shift ( $interval_data );
// Do not count the empty start of an interval as 0
if ( $first_data [ 'utimestamp' ] != $datelimit ) {
$period = $date - $first_data [ 'utimestamp' ];
}
$previous_utimestamp = $first_data [ 'utimestamp' ];
if (( $max_value > 0 ) AND ( $data [ 'datos' ] > $min_value
AND $data [ 'datos' ] < $max_value )) {
$previous_status = 1 ;
foreach ( $downtime_dates as $date_dt ) {
if (( $date_dt [ 'date_from' ] <= $previous_utimestamp ) AND
( $date_dt [ 'date_to' ] >= $previous_utimestamp )) {
$previous_status = 0 ;
}
}
}
else {
$previous_status = 0 ;
}
foreach ( $interval_data as $data ) {
// Previous status was critical
if ( $previous_status == 1 ) {
$bad_period += $data [ 'utimestamp' ] - $previous_utimestamp ;
}
if ( array_key_exists ( 'datos' , $data )) {
// Re-calculate previous status for the next data
if (( $max_value > 0 ) AND ( $data [ 'datos' ] > $min_value
AND $data [ 'datos' ] < $max_value )) {
$previous_status = 1 ;
foreach ( $downtime_dates as $date_dt ) {
if (( $date_dt [ 'date_from' ] <= $data [ 'utimestamp' ]) AND ( $date_dt [ 'date_to' ] >= $data [ 'utimestamp' ])) {
$previous_status = 0 ;
}
}
}
else {
$previous_status = 0 ;
}
}
$previous_utimestamp = $data [ 'utimestamp' ];
}
// Return the percentage of SLA compliance
return ( float ) ( 100 - ( $bad_period / $period ) * 100 );
}
2015-03-18 17:51:47 +01:00
/**
* Get the time intervals where an agentmodule is affected by the planned downtimes .
*
* @ param int Agent module to calculate planned downtimes intervals .
* @ param int Start date in utimestamp .
* @ param int End date in utimestamp .
* @ param bool Whether ot not to get the planned downtimes that affect the service associated with the agentmodule .
*
* @ return Array with time intervals .
*/
function reporting_get_planned_downtimes_intervals ( $id_agent_module , $start_date , $end_date , $check_services = false ) {
global $config ;
if ( empty ( $id_agent_module ))
return false ;
require_once ( $config [ 'homedir' ] . '/include/functions_planned_downtimes.php' );
$malformed_planned_downtimes = planned_downtimes_get_malformed ();
if ( empty ( $malformed_planned_downtimes ))
$malformed_planned_downtimes = array ();
$sql_downtime = " SELECT DISTINCT(tpdr.id), tpdr.*
FROM (
SELECT tpd .*
FROM tplanned_downtime tpd , tplanned_downtime_agents tpda , tagente_modulo tam
WHERE tpd . id = tpda . id_downtime
AND tpda . all_modules = 1
AND tpda . id_agent = tam . id_agente
AND tam . id_agente_modulo = $id_agent_module
UNION ALL
SELECT tpd .*
FROM tplanned_downtime tpd , tplanned_downtime_modules tpdm
WHERE tpd . id = tpdm . id_downtime
AND tpdm . id_agent_module = $id_agent_module
) tpdr
ORDER BY tpdr . id " ;
$downtimes = db_get_all_rows_sql ( $sql_downtime );
if ( $downtimes == false ) {
$downtimes = array ();
}
$downtime_dates = array ();
foreach ( $downtimes as $downtime ) {
$downtime_id = $downtime [ 'id' ];
$downtime_type = $downtime [ 'type_execution' ];
$downtime_periodicity = $downtime [ 'type_periodicity' ];
if ( $downtime_type == 'once' ) {
$dates = array ();
$dates [ 'date_from' ] = $downtime [ 'date_from' ];
$dates [ 'date_to' ] = $downtime [ 'date_to' ];
$downtime_dates [] = $dates ;
}
else if ( $downtime_type == 'periodically' ) {
// If a planned downtime have malformed dates, its intervals aren't taken account
$downtime_malformed = false ;
foreach ( $malformed_planned_downtimes as $malformed_planned_downtime ) {
if ( $downtime_id == $malformed_planned_downtime [ 'id' ]) {
$downtime_malformed = true ;
break ;
}
}
if ( $downtime_malformed == true ) {
continue ;
}
// If a planned downtime have malformed dates, its intervals aren't taken account
$downtime_time_from = $downtime [ 'periodically_time_from' ];
$downtime_time_to = $downtime [ 'periodically_time_to' ];
$downtime_hour_from = date ( " H " , strtotime ( $downtime_time_from ));
$downtime_minute_from = date ( " i " , strtotime ( $downtime_time_from ));
$downtime_second_from = date ( " s " , strtotime ( $downtime_time_from ));
$downtime_hour_to = date ( " H " , strtotime ( $downtime_time_to ));
$downtime_minute_to = date ( " i " , strtotime ( $downtime_time_to ));
$downtime_second_to = date ( " s " , strtotime ( $downtime_time_to ));
if ( $downtime_periodicity == " monthly " ) {
$downtime_day_from = $downtime [ 'periodically_day_from' ];
$downtime_day_to = $downtime [ 'periodically_day_to' ];
$date_aux = strtotime ( date ( " Y-m-01 " , $start_date ));
$year_aux = date ( " Y " , $date_aux );
$month_aux = date ( " m " , $date_aux );
$end_year = date ( " Y " , $end_date );
$end_month = date ( " m " , $end_date );
while ( $year_aux < $end_year || ( $year_aux == $end_year && $month_aux <= $end_month )) {
if ( $downtime_day_from > $downtime_day_to ) {
$dates = array ();
$dates [ 'date_from' ] = strtotime ( " $year_aux - $month_aux - $downtime_day_from $downtime_hour_from : $downtime_minute_from : $downtime_second_from " );
$dates [ 'date_to' ] = strtotime ( date ( " Y-m-t H:i:s " , strtotime ( " $year_aux - $month_aux -28 23:59:59 " )));
$downtime_dates [] = $dates ;
$dates = array ();
if ( $month_aux + 1 <= 12 ) {
$dates [ 'date_from' ] = strtotime ( " $year_aux - " . ( $month_aux + 1 ) . " -01 00:00:00 " );
$dates [ 'date_to' ] = strtotime ( " $year_aux - " . ( $month_aux + 1 ) . " - $downtime_day_to $downtime_hour_to : $downtime_minute_to : $downtime_second_to " );
}
else {
$dates [ 'date_from' ] = strtotime (( $year_aux + 1 ) . " -01-01 00:00:00 " );
$dates [ 'date_to' ] = strtotime (( $year_aux + 1 ) . " -01- $downtime_day_to $downtime_hour_to : $downtime_minute_to : $downtime_second_to " );
}
$downtime_dates [] = $dates ;
}
else {
if ( $downtime_day_from == $downtime_day_to && strtotime ( $downtime_time_from ) > strtotime ( $downtime_time_to )) {
$date_aux_from = strtotime ( " $year_aux - $month_aux - $downtime_day_from $downtime_hour_from : $downtime_minute_from : $downtime_second_from " );
$max_day_num = date ( 't' , $date_aux );
$dates = array ();
$dates [ 'date_from' ] = strtotime ( " $year_aux - $month_aux - $downtime_day_from $downtime_hour_from : $downtime_minute_from : $downtime_second_from " );
$dates [ 'date_to' ] = strtotime ( " $year_aux - $month_aux - $downtime_day_from 23:59:59 " );
$downtime_dates [] = $dates ;
if ( $downtime_day_to + 1 > $max_day_num ) {
$dates = array ();
if ( $month_aux + 1 <= 12 ) {
$dates [ 'date_from' ] = strtotime ( " $year_aux - " . ( $month_aux + 1 ) . " -01 00:00:00 " );
$dates [ 'date_to' ] = strtotime ( " $year_aux - " . ( $month_aux + 1 ) . " -01 $downtime_hour_to : $downtime_minute_to : $downtime_second_to " );
}
else {
$dates [ 'date_from' ] = strtotime (( $year_aux + 1 ) . " -01-01 00:00:00 " );
$dates [ 'date_to' ] = strtotime (( $year_aux + 1 ) . " -01-01 $downtime_hour_to : $downtime_minute_to : $downtime_second_to " );
}
$downtime_dates [] = $dates ;
}
else {
$dates = array ();
$dates [ 'date_from' ] = strtotime ( " $year_aux - $month_aux - " . ( $downtime_day_to + 1 ) . " 00:00:00 " );
$dates [ 'date_to' ] = strtotime ( " $year_aux - $month_aux - " . ( $downtime_day_to + 1 ) . " $downtime_hour_to : $downtime_minute_to : $downtime_second_to " );
$downtime_dates [] = $dates ;
}
}
else {
$dates = array ();
$dates [ 'date_from' ] = strtotime ( " $year_aux - $month_aux - $downtime_day_from $downtime_hour_from : $downtime_minute_from : $downtime_second_from " );
$dates [ 'date_to' ] = strtotime ( " $year_aux - $month_aux - $downtime_day_to $downtime_hour_to : $downtime_minute_to : $downtime_second_to " );
$downtime_dates [] = $dates ;
}
}
$month_aux ++ ;
if ( $month_aux > 12 ) {
$month_aux = 1 ;
$year_aux ++ ;
}
}
}
else if ( $downtime_periodicity == " weekly " ) {
$date_aux = $start_date ;
$active_days = array ();
$active_days [ 0 ] = ( $downtime [ 'sunday' ] == 1 ) ? true : false ;
$active_days [ 1 ] = ( $downtime [ 'monday' ] == 1 ) ? true : false ;
$active_days [ 2 ] = ( $downtime [ 'tuesday' ] == 1 ) ? true : false ;
$active_days [ 3 ] = ( $downtime [ 'wednesday' ] == 1 ) ? true : false ;
$active_days [ 4 ] = ( $downtime [ 'thursday' ] == 1 ) ? true : false ;
$active_days [ 5 ] = ( $downtime [ 'friday' ] == 1 ) ? true : false ;
$active_days [ 6 ] = ( $downtime [ 'saturday' ] == 1 ) ? true : false ;
while ( $date_aux <= $end_date ) {
$weekday_num = date ( 'w' , $date_aux );
if ( $active_days [ $weekday_num ]) {
$day_num = date ( 'd' , $date_aux );
$month_num = date ( 'm' , $date_aux );
$year_num = date ( 'Y' , $date_aux );
$max_day_num = date ( 't' , $date_aux );
if ( strtotime ( $downtime_time_from ) > strtotime ( $downtime_time_to )) {
$dates = array ();
$dates [ 'date_from' ] = strtotime ( " $year_num - $month_num - $day_num $downtime_hour_from : $downtime_minute_from : $downtime_second_from " );
$dates [ 'date_to' ] = strtotime ( " $year_num - $month_num - $day_num 23:59:59 " );
$downtime_dates [] = $dates ;
$dates = array ();
if ( $day_num + 1 > $max_day_num ) {
if ( $month_num + 1 > 12 ) {
$dates [ 'date_from' ] = strtotime (( $year_num + 1 ) . " -01-01 00:00:00 " );
$dates [ 'date_to' ] = strtotime (( $year_num + 1 ) . " -01-01 $downtime_hour_to : $downtime_minute_to : $downtime_second_to " );
}
else {
$dates [ 'date_from' ] = strtotime ( " $year_num - " . ( $month_num + 1 ) . " -01 00:00:00 " );
$dates [ 'date_to' ] = strtotime ( " $year_num - " . ( $month_num + 1 ) . " -01 $downtime_hour_to : $downtime_minute_to : $downtime_second_to " );
}
}
else {
$dates [ 'date_from' ] = strtotime ( " $year_num - $month_num - " . ( $day_num + 1 ) . " 00:00:00 " );
$dates [ 'date_to' ] = strtotime ( " $year_num - $month_num - " . ( $day_num + 1 ) . " $downtime_hour_to : $downtime_minute_to : $downtime_second_to " );
}
$downtime_dates [] = $dates ;
}
else {
$dates = array ();
$dates [ 'date_from' ] = strtotime ( " $year_num - $month_num - $day_num $downtime_hour_from : $downtime_minute_from : $downtime_second_from " );
$dates [ 'date_to' ] = strtotime ( " $year_num - $month_num - $day_num $downtime_hour_to : $downtime_minute_to : $downtime_second_to " );
$downtime_dates [] = $dates ;
}
}
$date_aux += SECONDS_1DAY ;
}
}
}
}
if ( $check_services ) {
enterprise_include_once ( " include/functions_services.php " );
if ( function_exists ( " services_get_planned_downtimes_intervals " )) {
services_get_planned_downtimes_intervals ( $downtime_dates , $start_date , $end_date , false , $id_agent_module );
}
}
return $downtime_dates ;
}
/**
* Get the planned downtimes that affect the passed modules on an specific datetime range .
*
* @ param int Start date in utimestamp .
* @ param int End date in utimestamp .
* @ param array The agent modules ids .
*
* @ return Array with the planned downtimes that are executed in any moment of the range selected and affect the
* agent modules selected .
*/
function reporting_get_planned_downtimes ( $start_date , $end_date , $id_agent_modules = false ) {
$start_time = date ( " H:i:s " , $start_date );
$end_time = date ( " H:i:s " , $end_date );
$start_day = date ( " d " , $start_date );
$end_day = date ( " d " , $end_date );
$start_month = date ( " m " , $start_date );
$end_month = date ( " m " , $end_date );
if ( $start_date > $end_date ) {
return false ;
}
if ( $end_date - $start_date >= SECONDS_1MONTH ) {
// If the date range is larger than 1 month, every monthly planned downtime will be inside
$periodically_monthly_w = " type_periodicity = 'monthly' " ;
}
else {
// Check if the range is larger than the planned downtime execution, or if its start or end
// is inside the planned downtime execution.
// The start and end time is very important.
$periodically_monthly_w = " type_periodicity = 'monthly'
AND ((( periodically_day_from > '$start_day'
OR ( periodically_day_from = '$start_day'
AND periodically_time_from >= '$start_time' ))
AND ( periodically_day_to < '$end_day'
OR ( periodically_day_to = '$end_day'
AND periodically_time_to <= '$end_time' )))
OR (( periodically_day_from < '$start_day'
OR ( periodically_day_from = '$start_day'
AND periodically_time_from <= '$start_time' ))
AND ( periodically_day_to > '$start_day'
OR ( periodically_day_to = '$start_day'
AND periodically_time_to >= '$start_time' )))
OR (( periodically_day_from < '$end_day'
OR ( periodically_day_from = '$end_day'
AND periodically_time_from <= '$end_time' ))
AND ( periodically_day_to > '$end_day'
OR ( periodically_day_to = '$end_day'
AND periodically_time_to >= '$end_time' )))) " ;
}
$periodically_weekly_days = array ();
$date_aux = $start_date ;
$i = 0 ;
if (( $end_date - $start_date ) >= SECONDS_1WEEK ) {
// If the date range is larger than 7 days, every weekly planned downtime will be inside.
for ( $i = 0 ; $i < 7 ; $i ++ ) {
$weekday_actual = strtolower ( date ( 'l' , $date_aux ));
$periodically_weekly_days [] = " ( $weekday_actual = 1) " ;
$date_aux += SECONDS_1DAY ;
}
}
else if (( $end_date - $start_date ) <= SECONDS_1DAY && $start_day == $end_day ) {
// If the date range is smaller than 1 day, the start and end days can be equal or consecutive.
// If they are equal, the execution times have to be contained in the date range times or contain
// the start or end time of the date range.
$weekday_actual = strtolower ( date ( 'l' , $start_date ));
$periodically_weekly_days [] = " ( $weekday_actual = 1
AND (( periodically_time_from > '$start_time' AND periodically_time_to < '$end_time' )
OR ( periodically_time_from = '$start_time'
OR ( periodically_time_from < '$start_time'
AND periodically_time_to >= '$start_time' ))
OR ( periodically_time_from = '$end_time'
OR ( periodically_time_from < '$end_time'
AND periodically_time_to >= '$end_time' )))) " ;
}
else {
while ( $date_aux <= $end_date && $i < 7 ) {
$weekday_actual = strtolower ( date ( 'l' , $date_aux ));
$day_num_actual = date ( 'd' , $date_aux );
if ( $date_aux == $start_date ) {
$periodically_weekly_days [] = " ( $weekday_actual = 1 AND periodically_time_to >= ' $start_time ') " ;
}
else if ( $day_num_actual == $end_day ) {
$periodically_weekly_days [] = " ( $weekday_actual = 1 AND periodically_time_from <= ' $end_time ') " ;
}
else {
$periodically_weekly_days [] = " ( $weekday_actual = 1) " ;
}
$date_aux += SECONDS_1DAY ;
$i ++ ;
}
}
if ( ! empty ( $periodically_weekly_days )) {
$periodically_weekly_w = " type_periodicity = 'weekly' AND ( " . implode ( " OR " , $periodically_weekly_days ) . " ) " ;
$periodically_condition = " (( $periodically_monthly_w ) OR ( $periodically_weekly_w )) " ;
}
else {
$periodically_condition = " ( $periodically_monthly_w ) " ;
}
if ( $id_agent_modules !== false ) {
if ( empty ( $id_agent_modules ))
return array ();
$id_agent_modules_str = implode ( " , " , $id_agent_modules );
$sql_downtime = " SELECT DISTINCT(tpdr.id), tpdr.*
FROM (
SELECT tpd .*
FROM tplanned_downtime tpd , tplanned_downtime_agents tpda , tagente_modulo tam
WHERE ( tpd . id = tpda . id_downtime
AND tpda . all_modules = 1
AND tpda . id_agent = tam . id_agente
AND tam . id_agente_modulo IN ( $id_agent_modules_str ))
AND (( type_execution = 'periodically'
AND $periodically_condition )
OR ( type_execution = 'once'
AND (( date_from >= '$start_date' AND date_to <= '$end_date' )
OR ( date_from <= '$start_date' AND date_to >= '$end_date' )
OR ( date_from <= '$start_date' AND date_to >= '$start_date' )
OR ( date_from <= '$end_date' AND date_to >= '$end_date' ))))
UNION ALL
SELECT tpd .*
FROM tplanned_downtime tpd , tplanned_downtime_modules tpdm
WHERE ( tpd . id = tpdm . id_downtime
AND tpdm . id_agent_module IN ( $id_agent_modules_str ))
AND (( type_execution = 'periodically'
AND $periodically_condition )
OR ( type_execution = 'once'
AND (( date_from >= '$start_date' AND date_to <= '$end_date' )
OR ( date_from <= '$start_date' AND date_to >= '$end_date' )
OR ( date_from <= '$start_date' AND date_to >= '$start_date' )
OR ( date_from <= '$end_date' AND date_to >= '$end_date' ))))
) tpdr
ORDER BY tpdr . id " ;
}
else {
$sql_downtime = " SELECT *
FROM tplanned_downtime tpd , tplanned_downtime_modules tpdm
WHERE ( type_execution = 'periodically'
AND $periodically_condition )
OR ( type_execution = 'once'
AND (( date_from >= '$start_date' AND date_to <= '$end_date' )
OR ( date_from <= '$start_date' AND date_to >= '$end_date' )
OR ( date_from <= '$start_date' AND date_to >= '$start_date' )
OR ( date_from <= '$end_date' AND date_to >= '$end_date' ))) " ;
}
$downtimes = db_get_all_rows_sql ( $sql_downtime );
if ( $downtimes == false ) {
$downtimes = array ();
}
return $downtimes ;
}
function reporting_get_stats_servers ( $tiny = true ) {
global $config ;
$server_performance = servers_get_performance ();
// Alerts table
$table_srv = html_get_predefined_table ();
$table_srv -> style [ 0 ] = $table_srv -> style [ 2 ] = 'text-align: right; padding: 5px;' ;
$table_srv -> style [ 1 ] = $table_srv -> style [ 3 ] = 'text-align: left; padding: 5px;' ;
$tdata = array ();
$tdata [ 0 ] = html_print_image ( 'images/module.png' , true , array ( 'title' => __ ( 'Total running modules' ), 'width' => '25px' ));
$tdata [ 1 ] = '<span class="big_data">' . format_numeric ( $server_performance [ " total_modules " ]) . '</span>' ;
$tdata [ 2 ] = '<span class="med_data">' . format_numeric ( $server_performance [ " total_modules_rate " ], 2 ) . '</span>' ;
$tdata [ 3 ] = html_print_image ( 'images/module.png' , true , array ( 'title' => __ ( 'Ratio' ) . ': ' . __ ( 'Modules by second' ), 'width' => '16px' )) . '/sec </span>' ;
$table_srv -> rowclass [] = '' ;
$table_srv -> data [] = $tdata ;
$tdata = array ();
$tdata [ 0 ] = '<hr style="border: 0; height: 1px; background: #DDD">' ;
$table_srv -> colspan [ count ( $table_srv -> data )][ 0 ] = 4 ;
$table_srv -> rowclass [] = '' ;
$table_srv -> data [] = $tdata ;
$tdata = array ();
$tdata [ 0 ] = html_print_image ( 'images/database.png' , true , array ( 'title' => __ ( 'Local modules' ), 'width' => '25px' ));
$tdata [ 1 ] = '<span class="big_data">' . format_numeric ( $server_performance [ " total_local_modules " ]) . '</span>' ;
$tdata [ 2 ] = '<span class="med_data">' .
format_numeric ( $server_performance [ " local_modules_rate " ], 2 ) . '</span>' ;
$tdata [ 3 ] = html_print_image ( 'images/module.png' , true , array ( 'title' => __ ( 'Ratio' ) . ': ' . __ ( 'Modules by second' ), 'width' => '16px' )) . '/sec </span>' ;
$table_srv -> rowclass [] = '' ;
$table_srv -> data [] = $tdata ;
if ( $tiny ) {
$tdata = array ();
$tdata [ 0 ] = html_print_image ( 'images/network.png' , true , array ( 'title' => __ ( 'Remote modules' ), 'width' => '25px' ));
$tdata [ 1 ] = '<span class="big_data">' . format_numeric ( $server_performance [ " total_remote_modules " ]) . '</span>' ;
$tdata [ 2 ] = '<span class="med_data">' . format_numeric ( $server_performance [ " remote_modules_rate " ], 2 ) . '</span>' ;
$tdata [ 3 ] = html_print_image ( 'images/module.png' , true , array ( 'title' => __ ( 'Ratio' ) . ': ' . __ ( 'Modules by second' ), 'width' => '16px' )) . '/sec </span>' ;
$table_srv -> rowclass [] = '' ;
$table_srv -> data [] = $tdata ;
}
else {
if ( isset ( $server_performance [ " total_network_modules " ])) {
$tdata = array ();
$tdata [ 0 ] = html_print_image ( 'images/network.png' , true , array ( 'title' => __ ( 'Network modules' ), 'width' => '25px' ));
$tdata [ 1 ] = '<span class="big_data">' . format_numeric ( $server_performance [ " total_network_modules " ]) . '</span>' ;
$tdata [ 2 ] = '<span class="med_data">' .
format_numeric ( $server_performance [ " network_modules_rate " ], 2 ) .
'</span>' ;
$tdata [ 3 ] = html_print_image ( 'images/module.png' , true , array ( 'title' => __ ( 'Ratio' ) . ': ' . __ ( 'Modules by second' ), 'width' => '16px' )) . '/sec </span>' ;
$table_srv -> rowclass [] = '' ;
$table_srv -> data [] = $tdata ;
}
if ( isset ( $server_performance [ " total_plugin_modules " ])) {
$tdata = array ();
$tdata [ 0 ] = html_print_image ( 'images/plugin.png' , true , array ( 'title' => __ ( 'Plugin modules' ), 'width' => '25px' ));
$tdata [ 1 ] = '<span class="big_data">' . format_numeric ( $server_performance [ " total_plugin_modules " ]) . '</span>' ;
$tdata [ 2 ] = '<span class="med_data">' . format_numeric ( $server_performance [ " plugin_modules_rate " ], 2 ) . '</span>' ;
$tdata [ 3 ] = html_print_image ( 'images/module.png' , true , array ( 'title' => __ ( 'Ratio' ) . ': ' . __ ( 'Modules by second' ), 'width' => '16px' )) . '/sec </span>' ;
$table_srv -> rowclass [] = '' ;
$table_srv -> data [] = $tdata ;
}
if ( isset ( $server_performance [ " total_prediction_modules " ])) {
$tdata = array ();
$tdata [ 0 ] = html_print_image ( 'images/chart_bar.png' , true , array ( 'title' => __ ( 'Prediction modules' ), 'width' => '25px' ));
$tdata [ 1 ] = '<span class="big_data">' . format_numeric ( $server_performance [ " total_prediction_modules " ]) . '</span>' ;
$tdata [ 2 ] = '<span class="med_data">' . format_numeric ( $server_performance [ " prediction_modules_rate " ], 2 ) . '</span>' ;
$tdata [ 3 ] = html_print_image ( 'images/module.png' , true , array ( 'title' => __ ( 'Ratio' ) . ': ' . __ ( 'Modules by second' ), 'width' => '16px' )) . '/sec </span>' ;
$table_srv -> rowclass [] = '' ;
$table_srv -> data [] = $tdata ;
}
if ( isset ( $server_performance [ " total_wmi_modules " ])) {
$tdata = array ();
$tdata [ 0 ] = html_print_image ( 'images/wmi.png' , true , array ( 'title' => __ ( 'WMI modules' ), 'width' => '25px' ));
$tdata [ 1 ] = '<span class="big_data">' . format_numeric ( $server_performance [ " total_wmi_modules " ]) . '</span>' ;
$tdata [ 2 ] = '<span class="med_data">' . format_numeric ( $server_performance [ " wmi_modules_rate " ], 2 ) . '</span>' ;
$tdata [ 3 ] = html_print_image ( 'images/module.png' , true , array ( 'title' => __ ( 'Ratio' ) . ': ' . __ ( 'Modules by second' ), 'width' => '16px' )) . '/sec </span>' ;
$table_srv -> rowclass [] = '' ;
$table_srv -> data [] = $tdata ;
}
if ( isset ( $server_performance [ " total_web_modules " ])) {
$tdata = array ();
$tdata [ 0 ] = html_print_image ( 'images/world.png' , true , array ( 'title' => __ ( 'Web modules' ), 'width' => '25px' ));
$tdata [ 1 ] = '<span class="big_data">' .
format_numeric ( $server_performance [ " total_web_modules " ]) .
'</span>' ;
$tdata [ 2 ] = '<span class="med_data">' .
format_numeric ( $server_performance [ " web_modules_rate " ], 2 ) .
'</span>' ;
$tdata [ 3 ] = html_print_image ( 'images/module.png' , true , array ( 'title' => __ ( 'Ratio' ) . ': ' . __ ( 'Modules by second' ), 'width' => '16px' )) . '/sec </span>' ;
$table_srv -> rowclass [] = '' ;
$table_srv -> data [] = $tdata ;
}
$tdata = array ();
$tdata [ 0 ] = '<hr style="border: 0; height: 1px; background: #DDD">' ;
$table_srv -> colspan [ count ( $table_srv -> data )][ 0 ] = 4 ;
$table_srv -> rowclass [] = '' ;
$table_srv -> data [] = $tdata ;
switch ( $config [ " dbtype " ]) {
case " mysql " :
$system_events = db_get_value_sql (
' SELECT SQL_NO_CACHE COUNT ( id_evento )
FROM tevento ' );
break ;
case " postgresql " :
case " oracle " :
$system_events = db_get_value_sql (
' SELECT COUNT ( id_evento )
FROM tevento ' );
break ;
}
$tdata = array ();
$tdata [ 0 ] = html_print_image ( 'images/lightning_go.png' , true ,
array ( 'title' => __ ( 'Total events' ), 'width' => '25px' ));
$tdata [ 1 ] = '<span class="big_data">' .
format_numeric ( $system_events ) . '</span>' ;
$table_srv -> colspan [ count ( $table_srv -> data )][ 1 ] = 3 ;
$table_srv -> rowclass [] = '' ;
$table_srv -> data [] = $tdata ;
}
$output = ' < fieldset class = " databox tactical_set " >
< legend > ' .
__ ( 'Server performance' ) .
'</legend>' .
html_print_table ( $table_srv , true ) . '</fieldset>' ;
return $output ;
}
function reporting_get_stats_modules_status ( $data , $graph_width = 250 , $graph_height = 150 , $links = false , $data_agents = false ) {
global $config ;
// Link URLS
if ( $links === false ) {
$urls = array ();
$urls [ 'monitor_critical' ] = " index.php? " .
" sec=estado&sec2=operation/agentes/status_monitor& " .
" refr=60&status= " . AGENT_MODULE_STATUS_CRITICAL_BAD . " &pure= " . $config [ 'pure' ];
$urls [ 'monitor_warning' ] = " index.php? " .
" sec=estado&sec2=operation/agentes/status_monitor& " .
" refr=60&status= " . AGENT_MODULE_STATUS_WARNING . " &pure= " . $config [ 'pure' ];
$urls [ 'monitor_ok' ] = " index.php? " .
" sec=estado&sec2=operation/agentes/status_monitor& " .
" refr=60&status= " . AGENT_MODULE_STATUS_NORMAL . " &pure= " . $config [ 'pure' ];
$urls [ 'monitor_unknown' ] = " index.php? " .
" sec=estado&sec2=operation/agentes/status_monitor& " .
" refr=60&status= " . AGENT_MODULE_STATUS_UNKNOWN . " &pure= " . $config [ 'pure' ];
$urls [ 'monitor_not_init' ] = " index.php? " .
" sec=estado&sec2=operation/agentes/status_monitor& " .
" refr=60&status= " . AGENT_MODULE_STATUS_NOT_INIT . " &pure= " . $config [ 'pure' ];
}
else {
$urls = array ();
$urls [ 'monitor_critical' ] = $links [ 'monitor_critical' ];
$urls [ 'monitor_warning' ] = $links [ 'monitor_warning' ];
$urls [ 'monitor_ok' ] = $links [ 'monitor_ok' ];
$urls [ 'monitor_unknown' ] = $links [ 'monitor_unknown' ];
$urls [ 'monitor_not_init' ] = $links [ 'monitor_not_init' ];
}
// Modules by status table
$table_mbs = html_get_predefined_table ();
$tdata = array ();
$tdata [ 0 ] = html_print_image ( 'images/module_critical.png' , true , array ( 'title' => __ ( 'Monitor critical' )));
$tdata [ 1 ] = $data [ " monitor_critical " ] <= 0 ? '-' : $data [ " monitor_critical " ];
$tdata [ 1 ] = '<a style="color: ' . COL_CRITICAL . ';" class="big_data" href="' . $urls [ 'monitor_critical' ] . '">' . $tdata [ 1 ] . '</a>' ;
$tdata [ 2 ] = html_print_image ( 'images/module_warning.png' , true , array ( 'title' => __ ( 'Monitor warning' )));
$tdata [ 3 ] = $data [ " monitor_warning " ] <= 0 ? '-' : $data [ " monitor_warning " ];
$tdata [ 3 ] = '<a style="color: ' . COL_WARNING_DARK . ';" class="big_data" href="' . $urls [ 'monitor_warning' ] . '">' . $tdata [ 3 ] . '</a>' ;
$table_mbs -> rowclass [] = '' ;
$table_mbs -> data [] = $tdata ;
$tdata = array ();
$tdata [ 0 ] = html_print_image ( 'images/module_ok.png' , true , array ( 'title' => __ ( 'Monitor normal' )));
$tdata [ 1 ] = $data [ " monitor_ok " ] <= 0 ? '-' : $data [ " monitor_ok " ];
$tdata [ 1 ] = '<a style="color: ' . COL_NORMAL . ';" class="big_data" href="' . $urls [ " monitor_ok " ] . '">' . $tdata [ 1 ] . '</a>' ;
$tdata [ 2 ] = html_print_image ( 'images/module_unknown.png' , true , array ( 'title' => __ ( 'Monitor unknown' )));
$tdata [ 3 ] = $data [ " monitor_unknown " ] <= 0 ? '-' : $data [ " monitor_unknown " ];
$tdata [ 3 ] = '<a style="color: ' . COL_UNKNOWN . ';" class="big_data" href="' . $urls [ " monitor_unknown " ] . '">' . $tdata [ 3 ] . '</a>' ;
$table_mbs -> rowclass [] = '' ;
$table_mbs -> data [] = $tdata ;
$tdata = array ();
$tdata [ 0 ] = html_print_image ( 'images/module_notinit.png' , true , array ( 'title' => __ ( 'Monitor not init' )));
$tdata [ 1 ] = $data [ " monitor_not_init " ] <= 0 ? '-' : $data [ " monitor_not_init " ];
$tdata [ 1 ] = '<a style="color: ' . COL_NOTINIT . ';" class="big_data" href="' . $urls [ " monitor_not_init " ] . '">' . $tdata [ 1 ] . '</a>' ;
$tdata [ 2 ] = $tdata [ 3 ] = '' ;
$table_mbs -> rowclass [] = '' ;
$table_mbs -> data [] = $tdata ;
if ( $data [ " monitor_checks " ] > 0 ) {
$tdata = array ();
$table_mbs -> colspan [ count ( $table_mbs -> data )][ 0 ] = 4 ;
$table_mbs -> cellstyle [ count ( $table_mbs -> data )][ 0 ] = 'text-align: center;' ;
$tdata [ 0 ] = '<div id="outter_status_pie" style="height: ' . $graph_height . 'px">' .
'<div id="status_pie" style="margin: auto; width: ' . $graph_width . 'px;">' .
graph_agent_status ( false , $graph_width , $graph_height , true , true , $data_agents ) .
'</div></div>' ;
$table_mbs -> rowclass [] = '' ;
$table_mbs -> data [] = $tdata ;
}
if ( ! defined ( " METACONSOLE " )){
$output = '
< fieldset class = " databox tactical_set " >
< legend > ' .
__ ( 'Monitors by status' ) .
'</legend>' .
html_print_table ( $table_mbs , true ) .
'</fieldset>' ;
}
else {
$table_mbs -> class = " tactical_view " ;
$table_mbs -> style = array ();
$output = '
< fieldset class = " tactical_set " >
< legend > ' .
__ ( 'Monitors by status' ) .
'</legend>' .
html_print_table ( $table_mbs , true ) .
'</fieldset>' ;
}
return $output ;
}
function reporting_get_stats_summary ( $data , $graph_width , $graph_height ) {
global $config ;
// Alerts table
$table_sum = html_get_predefined_table ();
$tdata = array ();
$table_sum -> colspan [ count ( $table_sum -> data )][ 0 ] = 2 ;
$table_sum -> colspan [ count ( $table_sum -> data )][ 2 ] = 2 ;
$table_sum -> cellstyle [ count ( $table_sum -> data )][ 0 ] = 'text-align: center;' ;
$table_sum -> cellstyle [ count ( $table_sum -> data )][ 2 ] = 'text-align: center;' ;
$tdata [ 0 ] = '<span class="med_data" style="color: #666">' . __ ( 'Module status' ) . '</span>' ;
$tdata [ 2 ] = '<span class="med_data" style="color: #666">' . __ ( 'Alert level' ) . '</span>' ;
$table_sum -> rowclass [] = '' ;
$table_sum -> data [] = $tdata ;
$tdata = array ();
$table_sum -> colspan [ count ( $table_sum -> data )][ 0 ] = 2 ;
$table_sum -> colspan [ count ( $table_sum -> data )][ 2 ] = 2 ;
$table_sum -> cellstyle [ count ( $table_sum -> data )][ 0 ] = 'text-align: center;' ;
$table_sum -> cellstyle [ count ( $table_sum -> data )][ 2 ] = 'text-align: center;' ;
if ( $data [ " monitor_checks " ] > 0 ) {
$tdata [ 0 ] = '<div style="margin: auto; width: ' . $graph_width . 'px;">' . graph_agent_status ( false , $graph_width , $graph_height , true , true ) . '</div>' ;
}
else {
$tdata [ 2 ] = html_print_image ( 'images/image_problem.png' , true , array ( 'width' => $graph_width ));
}
if ( $data [ " monitor_alerts " ] > 0 ) {
$tdata [ 2 ] = '<div style="margin: auto; width: ' . $graph_width . 'px;">' . graph_alert_status ( $data [ " monitor_alerts " ], $data [ " monitor_alerts_fired " ], $graph_width , $graph_height , true , true ) . '</div>' ;
}
else {
$tdata [ 2 ] = html_print_image ( 'images/image_problem.png' , true , array ( 'width' => $graph_width ));
}
$table_sum -> rowclass [] = '' ;
$table_sum -> data [] = $tdata ;
$output = ' < fieldset class = " databox tactical_set " >
< legend > ' .
__ ( 'Summary' ) .
'</legend>' .
html_print_table ( $table_sum , true ) . '</fieldset>' ;
return $output ;
}
function reporting_get_stats_alerts ( $data , $links = false ) {
global $config ;
// Link URLS
$mobile = false ;
if ( isset ( $data [ 'mobile' ])) {
if ( $data [ 'mobile' ]) {
$mobile = true ;
}
}
if ( $mobile ) {
$urls = array ();
$urls [ 'monitor_alerts' ] = " index.php?page=alerts&status=all_enabled " ;
$urls [ 'monitor_alerts_fired' ] = " index.php?page=alerts&status=fired " ;
}
else {
$urls = array ();
if ( $links ) {
$urls [ 'monitor_alerts' ] = " index.php?sec=estado&sec2=operation/agentes/alerts_status&pure= " . $config [ 'pure' ];
$urls [ 'monitor_alerts_fired' ] = " index.php?sec=estado&sec2=operation/agentes/alerts_status&filter=fired&pure= " . $config [ 'pure' ];
} else {
$urls [ 'monitor_alerts' ] = " index.php?sec=estado&sec2=operation/agentes/alerts_status&refr=60 " ;
$urls [ 'monitor_alerts_fired' ] = " index.php?sec=estado&sec2=operation/agentes/alerts_status&refr=60&filter=fired " ;
}
}
// Alerts table
$table_al = html_get_predefined_table ();
$tdata = array ();
$tdata [ 0 ] = html_print_image ( 'images/bell.png' , true , array ( 'title' => __ ( 'Defined alerts' )));
$tdata [ 1 ] = $data [ " monitor_alerts " ] <= 0 ? '-' : $data [ " monitor_alerts " ];
$tdata [ 1 ] = '<a class="big_data" href="' . $urls [ " monitor_alerts " ] . '">' . $tdata [ 1 ] . '</a>' ;
$tdata [ 2 ] = html_print_image ( 'images/bell_error.png' , true , array ( 'title' => __ ( 'Fired alerts' )));
$tdata [ 3 ] = $data [ " monitor_alerts_fired " ] <= 0 ? '-' : $data [ " monitor_alerts_fired " ];
$tdata [ 3 ] = '<a style="color: ' . COL_ALERTFIRED . ';" class="big_data" href="' . $urls [ " monitor_alerts_fired " ] . '">' . $tdata [ 3 ] . '</a>' ;
$table_al -> rowclass [] = '' ;
$table_al -> data [] = $tdata ;
if ( ! defined ( 'METACONSOLE' )){
$output = ' < fieldset class = " databox tactical_set " >
< legend > ' .
__ ( 'Defined and fired alerts' ) .
'</legend>' .
html_print_table ( $table_al , true ) . '</fieldset>' ;
} else {
$table_al -> class = " tactical_view " ;
$table_al -> style = array ();
$output = ' < fieldset class = " tactical_set " >
< legend > ' .
__ ( 'Defined and fired alerts' ) .
'</legend>' .
html_print_table ( $table_al , true ) . '</fieldset>' ;
}
return $output ;
}
function reporting_get_stats_users ( $data ) {
global $config ;
// Link URLS
$urls = array ();
if ( check_acl ( $config [ 'id_user' ], 0 , " UM " )) {
$urls [ 'defined_users' ] = " index.php?sec=gusuarios&sec2=godmode/users/user_list " ;
}
else {
$urls [ 'defined_users' ] = 'javascript:' ;
}
// Users table
$table_us = html_get_predefined_table ();
$tdata = array ();
$tdata [ 0 ] = html_print_image ( 'images/user_green.png' , true , array ( 'title' => __ ( 'Defined users' )));
$tdata [ 1 ] = count ( get_users ());
$tdata [ 1 ] = '<a class="big_data" href="' . $urls [ " defined_users " ] . '">' . $tdata [ 1 ] . '</a>' ;
$tdata [ 2 ] = $tdata [ 3 ] = ' ' ;
$table_us -> rowclass [] = '' ;
$table_us -> data [] = $tdata ;
$output = ' < fieldset class = " databox tactical_set " >
< legend > ' .
__ ( 'Users' ) .
'</legend>' .
html_print_table ( $table_us , true ) . '</fieldset>' ;
return $output ;
}
function reporting_get_stats_agents_monitors ( $data ) {
global $config ;
// Link URLS
$mobile = false ;
if ( isset ( $data [ 'mobile' ])) {
if ( $data [ 'mobile' ]) {
$mobile = true ;
}
}
if ( $mobile ) {
$urls = array ();
$urls [ 'total_agents' ] = " index.php?page=agents " ;
$urls [ 'monitor_checks' ] = " index.php?page=modules " ;
}
else {
$urls = array ();
$urls [ 'total_agents' ] = " index.php?sec=estado&sec2=operation/agentes/estado_agente&refr=60 " ;
$urls [ 'monitor_checks' ] = " index.php?sec=estado&sec2=operation/agentes/status_monitor&refr=60&status=-1 " ;
}
// Agents and modules table
$table_am = html_get_predefined_table ();
$tdata = array ();
$tdata [ 0 ] = html_print_image ( 'images/agent.png' , true , array ( 'title' => __ ( 'Total agents' )));
$tdata [ 1 ] = $data [ " total_agents " ] <= 0 ? '-' : $data [ " total_agents " ];
$tdata [ 1 ] = '<a class="big_data" href="' . $urls [ 'total_agents' ] . '">' . $tdata [ 1 ] . '</a>' ;
$tdata [ 2 ] = html_print_image ( 'images/module.png' , true , array ( 'title' => __ ( 'Monitor checks' )));
$tdata [ 3 ] = $data [ " monitor_checks " ] <= 0 ? '-' : $data [ " monitor_checks " ];
$tdata [ 3 ] = '<a class="big_data" href="' . $urls [ 'monitor_checks' ] . '">' . $tdata [ 3 ] . '</a>' ;
$table_am -> rowclass [] = '' ;
$table_am -> data [] = $tdata ;
$output = ' < fieldset class = " databox tactical_set " >
< legend > ' .
__ ( 'Total agents and monitors' ) .
'</legend>' .
html_print_table ( $table_am , true ) . '</fieldset>' ;
return $output ;
}
function reporting_get_stats_indicators ( $data , $width = 280 , $height = 20 , $html = true ) {
$table_ind = html_get_predefined_table ();
$servers = array ();
$servers [ " all " ] = ( int ) db_get_value ( 'COUNT(id_server)' , 'tserver' );
$servers [ " up " ] = ( int ) servers_check_status ();
$servers [ " down " ] = $servers [ " all " ] - $servers [ " up " ];
if ( $servers [ " all " ] == 0 ) {
$servers [ " health " ] = 0 ;
}
else {
$servers [ " health " ] = $servers [ " up " ] / ( $servers [ " all " ] / 100 );
}
if ( $html ) {
$tdata [ 0 ] = ' < fieldset class = " databox tactical_set " >
< legend > ' .
__ ( 'Server health' ) . ui_print_help_tip ( sprintf ( __ ( '%d Downed servers' ), $servers [ " down " ]), true ) .
'</legend>' .
progress_bar ( $servers [ " health " ], $width , $height , '' , 0 ) . '</fieldset>' ;
$table_ind -> rowclass [] = '' ;
$table_ind -> data [] = $tdata ;
$tdata [ 0 ] = ' < fieldset class = " databox tactical_set " >
< legend > ' .
__ ( 'Monitor health' ) . ui_print_help_tip ( sprintf ( __ ( '%d Not Normal monitors' ), $data [ " monitor_not_normal " ]), true ) .
'</legend>' .
progress_bar ( $data [ " monitor_health " ], $width , $height , $data [ " monitor_health " ] . '% ' . __ ( 'of monitors up' ), 0 ) . '</fieldset>' ;
$table_ind -> rowclass [] = '' ;
$table_ind -> data [] = $tdata ;
$tdata [ 0 ] = ' < fieldset class = " databox tactical_set " >
< legend > ' .
__ ( 'Module sanity' ) . ui_print_help_tip ( sprintf ( __ ( '%d Not inited monitors' ), $data [ " monitor_not_init " ]), true ) .
'</legend>' .
progress_bar ( $data [ " module_sanity " ], $width , $height , $data [ " module_sanity " ] . '% ' . __ ( 'of total modules inited' ), 0 ) . '</fieldset>' ;
$table_ind -> rowclass [] = '' ;
$table_ind -> data [] = $tdata ;
$tdata [ 0 ] = ' < fieldset class = " databox tactical_set " >
< legend > ' .
__ ( 'Alert level' ) . ui_print_help_tip ( sprintf ( __ ( '%d Fired alerts' ), $data [ " monitor_alerts_fired " ]), true ) .
'</legend>' .
progress_bar ( $data [ " alert_level " ], $width , $height , $data [ " alert_level " ] . '% ' . __ ( 'of defined alerts not fired' ), 0 ) . '</fieldset>' ;
$table_ind -> rowclass [] = '' ;
$table_ind -> data [] = $tdata ;
return html_print_table ( $table_ind , true );
}
else {
$return = array ();
$return [ 'server_health' ] = array (
'title' => __ ( 'Server health' ),
'graph' => progress_bar ( $servers [ " health " ], $width , $height , '' , 0 ));
$return [ 'monitor_health' ] = array (
'title' => __ ( 'Monitor health' ),
'graph' => progress_bar ( $data [ " monitor_health " ], $width , $height , $data [ " monitor_health " ] . '% ' . __ ( 'of monitors up' ), 0 ));
$return [ 'module_sanity' ] = array (
'title' => __ ( 'Module sanity' ),
'graph' => progress_bar ( $data [ " module_sanity " ], $width , $height , $data [ " module_sanity " ] . '% ' . __ ( 'of total modules inited' ), 0 ));
$return [ 'alert_level' ] = array (
'title' => __ ( 'Alert level' ),
'graph' => progress_bar ( $data [ " alert_level " ], $width , $height , $data [ " alert_level " ] . '% ' . __ ( 'of defined alerts not fired' ), 0 ));
return $return ;
}
}
/**
* Get general statistical info on a group
*
* @ param int Group Id to get info from . 0 = all
*
* @ return array Group statistics
*/
function reporting_get_group_stats ( $id_group = 0 , $access = 'AR' ) {
global $config ;
$data = array ();
$data [ " monitor_checks " ] = 0 ;
$data [ " monitor_not_init " ] = 0 ;
$data [ " monitor_unknown " ] = 0 ;
$data [ " monitor_ok " ] = 0 ;
$data [ " monitor_bad " ] = 0 ; // Critical + Unknown + Warning
$data [ " monitor_warning " ] = 0 ;
$data [ " monitor_critical " ] = 0 ;
$data [ " monitor_not_normal " ] = 0 ;
$data [ " monitor_alerts " ] = 0 ;
$data [ " monitor_alerts_fired " ] = 0 ;
$data [ " monitor_alerts_fire_count " ] = 0 ;
$data [ " total_agents " ] = 0 ;
$data [ " total_alerts " ] = 0 ;
$data [ " total_checks " ] = 0 ;
$data [ " alerts " ] = 0 ;
$data [ " agents_unknown " ] = 0 ;
$data [ " monitor_health " ] = 100 ;
$data [ " alert_level " ] = 100 ;
$data [ " module_sanity " ] = 100 ;
$data [ " server_sanity " ] = 100 ;
$data [ " total_not_init " ] = 0 ;
$data [ " monitor_non_init " ] = 0 ;
$data [ " agent_ok " ] = 0 ;
$data [ " agent_warning " ] = 0 ;
$data [ " agent_critical " ] = 0 ;
$data [ " agent_unknown " ] = 0 ;
$data [ " agent_not_init " ] = 0 ;
$cur_time = get_system_time ();
//Check for access credentials using check_acl. More overhead, much safer
if ( ! check_acl ( $config [ " id_user " ], $id_group , $access )) {
return $data ;
}
if ( $id_group == 0 ) {
$id_group = array_keys (
users_get_groups ( $config [ 'id_user' ], $access , false ));
}
// -----------------------------------------------------------------
// Server processed stats. NOT realtime (taken from tgroup_stat)
// -----------------------------------------------------------------
if ( $config [ " realtimestats " ] == 0 ) {
if ( ! is_array ( $id_group )){
$my_group = $id_group ;
$id_group = array ();
$id_group [ 0 ] = $my_group ;
}
foreach ( $id_group as $group ) {
$group_stat = db_get_all_rows_sql ( " SELECT *
FROM tgroup_stat , tgrupo
WHERE tgrupo . id_grupo = tgroup_stat . id_group
AND tgroup_stat . id_group = $group
ORDER BY nombre " );
$data [ " monitor_checks " ] += $group_stat [ 0 ][ " modules " ];
$data [ " agent_not_init " ] += $group_stat [ 0 ][ " non-init " ];
$data [ " agent_unknown " ] += $group_stat [ 0 ][ " unknown " ];
$data [ " agent_ok " ] += $group_stat [ 0 ][ " normal " ];
$data [ " agent_warning " ] += $group_stat [ 0 ][ " warning " ];
$data [ " agent_critical " ] += $group_stat [ 0 ][ " critical " ];
$data [ " monitor_alerts " ] += $group_stat [ 0 ][ " alerts " ];
$data [ " monitor_alerts_fired " ] += $group_stat [ 0 ][ " alerts_fired " ];
$data [ " monitor_alerts_fire_count " ] += $group_stat [ 0 ][ " alerts_fired " ];
$data [ " total_checks " ] += $group_stat [ 0 ][ " modules " ];
$data [ " total_alerts " ] += $group_stat [ 0 ][ " alerts " ];
$data [ " total_agents " ] += $group_stat [ 0 ][ " agents " ];
$data [ " agents_unknown " ] += $group_stat [ 0 ][ " agents_unknown " ];
$data [ " utimestamp " ] = $group_stat [ 0 ][ " utimestamp " ];
// This fields are not in database
$data [ " monitor_ok " ] += ( int ) groups_get_normal_monitors ( $group );
$data [ " monitor_warning " ] += ( int ) groups_get_warning_monitors ( $group );
$data [ " monitor_critical " ] += ( int ) groups_get_critical_monitors ( $group );
$data [ " monitor_unknown " ] += ( int ) groups_get_unknown_monitors ( $group );
$data [ " monitor_not_init " ] += ( int ) groups_get_not_init_monitors ( $group );
}
// -------------------------------------------------------------------
// Realtime stats, done by PHP Console
// -------------------------------------------------------------------
}
else {
if ( ! is_array ( $id_group )) {
$my_group = $id_group ;
$id_group = array ();
$id_group [ 0 ] = $my_group ;
}
// Store the groups where we are quering
$covered_groups = array ();
$group_array = array ();
foreach ( $id_group as $group ) {
$children = groups_get_childrens ( $group );
//Show empty groups only if they have children with agents
//$group_array = array();
foreach ( $children as $sub ) {
// If the group is quering previously, we ingore it
if ( ! in_array ( $sub [ 'id_grupo' ], $covered_groups )) {
array_push ( $covered_groups , $sub [ 'id_grupo' ]);
array_push ( $group_array , $sub [ 'id_grupo' ]);
}
}
// Add id of this group to create the clause
// If the group is quering previously, we ingore it
if ( ! in_array ( $group , $covered_groups )) {
array_push ( $covered_groups , $group );
array_push ( $group_array , $group );
}
// If there are not groups to query, we jump to nextone
if ( empty ( $group_array )) {
continue ;
}
}
if ( ! empty ( $group_array )) {
// FOR THE FUTURE: Split the groups into groups with tags restrictions and groups without it
// To calculate in the light way the non tag restricted and in the heavy way the others
/*
$group_restricted_data = tags_get_acl_tags ( $config [ 'id_user' ], $group_array , $access , 'data' );
$tags_restricted_groups = array_keys ( $group_restricted_data );
$no_tags_restricted_groups = $group_array ;
foreach ( $no_tags_restricted_groups as $k => $v ) {
if ( in_array ( $v , $tags_restricted_groups )) {
unset ( $no_tags_restricted_groups [ $k ]);
}
}
*/
if ( ! empty ( $group_array )) {
// Get monitor NOT INIT, except disabled AND async modules
$data [ " monitor_not_init " ] += ( int ) groups_get_not_init_monitors ( $group_array , array (), array (), false , false , true );
// Get monitor OK, except disabled and non-init
$data [ " monitor_ok " ] += ( int ) groups_get_normal_monitors ( $group_array , array (), array (), false , false , true );
// Get monitor CRITICAL, except disabled and non-init
$data [ " monitor_critical " ] += ( int ) groups_get_critical_monitors ( $group_array , array (), array (), false , false , true );
// Get monitor WARNING, except disabled and non-init
$data [ " monitor_warning " ] += ( int ) groups_get_warning_monitors ( $group_array , array (), array (), false , false , true );
// Get monitor UNKNOWN, except disabled and non-init
$data [ " monitor_unknown " ] += ( int ) groups_get_unknown_monitors ( $group_array , array (), array (), false , false , true );
// Get alerts configured, except disabled
$data [ " monitor_alerts " ] += groups_monitor_alerts ( $group_array ) ;
// Get alert configured currently FIRED, except disabled
$data [ " monitor_alerts_fired " ] += groups_monitor_fired_alerts ( $group_array );
// Calculate totals using partial counts from above
// Get TOTAL non-init modules, except disabled ones and async modules
$data [ " total_not_init " ] += $data [ " monitor_not_init " ];
// Get TOTAL agents in a group
$data [ " total_agents " ] += ( int ) groups_get_total_agents ( $group_array , array (), array (), false , false , true );
// Get Agents OK
$data [ " agent_ok " ] += ( int ) groups_get_normal_agents ( $group_array , array (), array (), false , false , true );
// Get Agents Warning
$data [ " agent_warning " ] += ( int ) groups_get_warning_agents ( $group_array , array (), array (), false , false , true );
// Get Agents Critical
$data [ " agent_critical " ] += ( int ) groups_get_critical_agents ( $group_array , array (), array (), false , false , true );
// Get Agents Unknown
$data [ " agent_unknown " ] += ( int ) groups_get_unknown_agents ( $group_array , array (), array (), false , false , true );
// Get Agents Not init
$data [ " agent_not_init " ] += ( int ) groups_get_not_init_agents ( $group_array , array (), array (), false , false , true );
}
// Get total count of monitors for this group, except disabled.
$data [ " monitor_checks " ] = $data [ " monitor_not_init " ] + $data [ " monitor_unknown " ] + $data [ " monitor_warning " ] + $data [ " monitor_critical " ] + $data [ " monitor_ok " ];
// Calculate not_normal monitors
$data [ " monitor_not_normal " ] += $data [ " monitor_checks " ] - $data [ " monitor_ok " ];
}
// Get total count of monitors for this group, except disabled.
$data [ " monitor_checks " ] = $data [ " monitor_not_init " ] + $data [ " monitor_unknown " ] + $data [ " monitor_warning " ] + $data [ " monitor_critical " ] + $data [ " monitor_ok " ];
/*
Monitor health ( percentage )
Data health ( percentage )
Global health ( percentage )
Module sanity ( percentage )
Alert level ( percentage )
Server Sanity 0 % Uninitialized modules
*/
}
if ( $data [ " monitor_unknown " ] > 0 && $data [ " monitor_checks " ] > 0 ) {
$data [ " monitor_health " ] = format_numeric ( 100 - ( $data [ " monitor_not_normal " ] / ( $data [ " monitor_checks " ] / 100 )), 1 );
}
else {
$data [ " monitor_health " ] = 100 ;
}
if ( $data [ " monitor_not_init " ] > 0 && $data [ " monitor_checks " ] > 0 ) {
$data [ " module_sanity " ] = format_numeric ( 100 - ( $data [ " monitor_not_init " ] / ( $data [ " monitor_checks " ] / 100 )), 1 );
}
else {
$data [ " module_sanity " ] = 100 ;
}
if ( isset ( $data [ " alerts " ])) {
if ( $data [ " monitor_alerts_fired " ] > 0 && $data [ " alerts " ] > 0 ) {
$data [ " alert_level " ] = format_numeric ( 100 - ( $data [ " monitor_alerts_fired " ] / ( $data [ " alerts " ] / 100 )), 1 );
}
else {
$data [ " alert_level " ] = 100 ;
}
}
else {
$data [ " alert_level " ] = 100 ;
$data [ " alerts " ] = 0 ;
}
$data [ " monitor_bad " ] = $data [ " monitor_critical " ] + $data [ " monitor_warning " ];
if ( $data [ " monitor_bad " ] > 0 && $data [ " monitor_checks " ] > 0 ) {
$data [ " global_health " ] = format_numeric ( 100 - ( $data [ " monitor_bad " ] / ( $data [ " monitor_checks " ] / 100 )), 1 );
}
else {
$data [ " global_health " ] = 100 ;
}
$data [ " server_sanity " ] = format_numeric ( 100 - $data [ " module_sanity " ], 1 );
$data [ 'alert_fired' ] = 0 ;
if ( $data [ " monitor_alerts_fired " ] > 0 ) {
$data [ 'alert_fired' ] = 1 ;
}
if ( $data [ " monitor_critical " ] > 0 ) {
$data [ 'status' ] = 'critical' ;
}
elseif ( $data [ " monitor_warning " ] > 0 ) {
$data [ 'status' ] = 'warning' ;
}
elseif (( $data [ " monitor_unknown " ] > 0 ) || ( $data [ " agents_unknown " ] > 0 )) {
$data [ 'status' ] = 'unknown' ;
}
elseif ( $data [ " monitor_ok " ] > 0 ) {
$data [ 'status' ] = 'ok' ;
}
elseif ( $data [ " agent_not_init " ] > 0 ) {
$data [ 'status' ] = 'not_init' ;
}
else {
$data [ 'status' ] = 'none' ;
}
return ( $data );
}
/**
* Get an event reporting table .
*
* It construct a table object with all the events happened in a group
* during a period of time .
*
* @ param int Group id to get the report .
* @ param int Period of time to get the report .
* @ param int Beginning date of the report
* @ param int Flag to return or echo the report table ( echo by default ) .
*
* @ return object A table object
*/
function reporting_event_reporting ( $id_group , $period , $date = 0 , $return = false ) {
if ( empty ( $date )) {
$date = get_system_time ();
}
elseif ( ! is_numeric ( $date )) {
$date = strtotime ( $date );
}
$table -> data = array ();
$table -> head = array ();
$table -> head [ 0 ] = __ ( 'Status' );
$table -> head [ 1 ] = __ ( 'Event name' );
$table -> head [ 2 ] = __ ( 'User ID' );
$table -> head [ 3 ] = __ ( 'Timestamp' );
$events = events_get_group_events ( $id_group , $period , $date );
if ( empty ( $events )) {
$events = array ();
}
foreach ( $events as $event ) {
$data = array ();
if ( $event [ " estado " ] == 0 )
$data [ 0 ] = html_print_image ( " images/dot_red.png " , true );
else
$data [ 0 ] = html_print_image ( " images/dot_green.png " , true );
$data [ 1 ] = $event [ 'evento' ];
$data [ 2 ] = $event [ 'id_usuario' ] != '0' ? $event [ 'id_usuario' ] : '' ;
$data [ 3 ] = $event [ " timestamp " ];
array_push ( $table -> data , $data );
}
if ( empty ( $return ))
html_print_table ( $table );
return $table ;
}
/**
* Get a table report from a alerts fired array .
*
* @ param array Alerts fired array .
* @ see function get_alerts_fired ()
*
* @ return object A table object with a report of the fired alerts .
*/
function reporting_get_fired_alerts_table ( $alerts_fired ) {
$agents = array ();
global $config ;
require_once ( $config [ " homedir " ] . '/include/functions_alerts.php' );
foreach ( array_keys ( $alerts_fired ) as $id_alert ) {
$alert_module = alerts_get_alert_agent_module ( $id_alert );
$template = alerts_get_alert_template ( $id_alert );
/* Add alerts fired to $agents_fired_alerts indexed by id_agent */
$id_agent = db_get_value ( 'id_agente' , 'tagente_modulo' ,
'id_agente_modulo' , $alert_module [ 'id_agent_module' ]);
if ( ! isset ( $agents [ $id_agent ])) {
$agents [ $id_agent ] = array ();
}
array_push ( $agents [ $id_agent ], array ( $alert_module , $template ));
}
$table -> data = array ();
$table -> head = array ();
$table -> head [ 0 ] = __ ( 'Agent' );
$table -> head [ 1 ] = __ ( 'Alert description' );
$table -> head [ 2 ] = __ ( 'Times fired' );
$table -> head [ 3 ] = __ ( 'Priority' );
foreach ( $agents as $id_agent => $alerts ) {
$data = array ();
foreach ( $alerts as $tuple ) {
$alert_module = $tuple [ 0 ];
$template = $tuple [ 1 ];
if ( ! isset ( $data [ 0 ]))
$data [ 0 ] = agents_get_name ( $id_agent );
else
$data [ 0 ] = '' ;
$data [ 1 ] = $template [ 'name' ];
$data [ 2 ] = $alerts_fired [ $alert_module [ 'id' ]];
$data [ 3 ] = get_alert_priority ( $alert_module [ 'priority' ]);
array_push ( $table -> data , $data );
}
}
return $table ;
}
/**
* Get a report for alerts of agent .
*
* It prints the numbers of alerts defined , fired and not fired of agent .
*
* @ param int $id_agent Agent to get info of the alerts .
* @ param int $period Period of time of the desired alert report .
* @ param int $date Beggining date of the report ( current date by default ) .
* @ param bool $return Flag to return or echo the report ( echo by default ) .
* @ param bool Flag to return the html or table object , by default html .
*
* @ return mixed A table object ( XHTML ) or object table is false the html .
*/
function reporting_alert_reporting_agent ( $id_agent , $period = 0 , $date = 0 , $return = true , $html = true ) {
if ( ! is_numeric ( $date )) {
$date = strtotime ( $date );
}
if ( empty ( $date )) {
$date = get_system_time ();
}
$table -> width = '99%' ;
$table -> data = array ();
$table -> head = array ();
$table -> head [ 0 ] = __ ( 'Module' );
$table -> head [ 1 ] = __ ( 'Template' );
$table -> head [ 2 ] = __ ( 'Actions' );
$table -> head [ 3 ] = __ ( 'Fired' );
$alerts = agents_get_alerts ( $id_agent );
if ( isset ( $alerts [ 'simple' ])) {
$i = 0 ;
if ( $alerts [ 'simple' ] === false )
$alerts [ 'simple' ] = array ();
foreach ( $alerts [ 'simple' ] as $alert ) {
$data = array ();
$data [ 0 ] = db_get_value_filter ( 'nombre' , 'tagente_modulo' , array ( 'id_agente_modulo' => $alert [ 'id_agent_module' ]));
$data [ 1 ] = db_get_value_filter ( 'name' , 'talert_templates' , array ( 'id' => $alert [ 'id_alert_template' ]));
$actions = db_get_all_rows_sql ( ' SELECT name
FROM talert_actions
WHERE id IN ( SELECT id_alert_action
FROM talert_template_module_actions
WHERE id_alert_template_module = ' . $alert[' id '] . ' ); ' );
$data [ 2 ] = '<ul class="action_list">' ;
if ( $actions === false ) {
$row = db_get_row_sql ( ' SELECT id_alert_action
FROM talert_templates
WHERE id IN ( SELECT id_alert_template
FROM talert_template_modules
WHERE id = ' . $alert[' id '] . ' ) ' );
$id_action = 0 ;
if ( ! empty ( $row ))
$id_action = $row [ 'id_alert_action' ];
// Prevent from void action
if ( empty ( $id_action ))
$id_action = 0 ;
$actions = db_get_all_rows_sql ( ' SELECT name
FROM talert_actions
WHERE id = ' . $id_action );
}
if ( $actions === false )
$actions = array ();
foreach ( $actions as $action ) {
$data [ 2 ] .= '<li>' . $action [ 'name' ] . '</li>' ;
}
$data [ 2 ] .= '</ul>' ;
$data [ 3 ] = '<ul style="list-style-type: disc; margin-left: 10px;">' ;
$firedTimes = get_agent_alert_fired ( $id_agent , $alert [ 'id' ], ( int ) $period , ( int ) $date );
if ( $firedTimes === false ) {
$firedTimes = array ();
}
if ( $firedTimes === false )
$firedTimes = array ();
foreach ( $firedTimes as $fireTime ) {
$data [ 3 ] .= '<li>' . $fireTime [ 'timestamp' ] . '</li>' ;
}
$data [ 3 ] .= '</ul>' ;
if ( $alert [ 'disabled' ]) {
$table -> rowstyle [ $i ] = 'color: grey; font-style: italic;' ;
}
$i ++ ;
array_push ( $table -> data , $data );
}
}
if ( $html ) {
return html_print_table ( $table , $return );
}
else {
return $table ;
}
}
/**
* Get a report for alerts of group .
*
* It prints the numbers of alerts defined , fired and not fired of agent .
*
* @ param int $id_agent_module Module to get info of the alerts .
* @ param int $period Period of time of the desired alert report .
* @ param int $date Beggining date of the report ( current date by default ) .
* @ param bool $return Flag to return or echo the report ( echo by default ) .
* @ param bool Flag to return the html or table object , by default html .
*
* @ return mixed A table object ( XHTML ) or object table is false the html .
*/
function reporting_alert_reporting_group ( $id_group , $period = 0 , $date = 0 , $return = true , $html = true ) {
if ( ! is_numeric ( $date )) {
$date = strtotime ( $date );
}
if ( empty ( $date )) {
$date = get_system_time ();
}
$table -> width = '99%' ;
$table -> data = array ();
$table -> head = array ();
$table -> head [ 0 ] = __ ( 'Agent' );
$table -> head [ 1 ] = __ ( 'Module' );
$table -> head [ 2 ] = __ ( 'Template' );
$table -> head [ 3 ] = __ ( 'Actions' );
$table -> head [ 4 ] = __ ( 'Fired' );
if ( $id_group == 0 ) {
$alerts = db_get_all_rows_sql ( '
SELECT *
FROM talert_template_modules
WHERE disabled = 0
AND id_agent_module IN (
SELECT id_agente_modulo
FROM tagente_modulo ) ' );
}
else {
$alerts = db_get_all_rows_sql ( '
SELECT *
FROM talert_template_modules
WHERE disabled = 0
AND id_agent_module IN (
SELECT id_agente_modulo
FROM tagente_modulo
WHERE id_agente IN (
SELECT id_agente
FROM tagente WHERE id_grupo = ' . $id_group . ' )) ' );
}
if ( $alerts === false ) {
$alerts = array ();
}
$i = 0 ;
foreach ( $alerts as $alert ) {
$data = array ();
$data [] = io_safe_output (
agents_get_name (
agents_get_agent_id_by_module_id (
$alert [ 'id_agent_module' ])));
$data [] = io_safe_output (
modules_get_agentmodule_name ( $alert [ 'id_agent_module' ]));
$data [] = db_get_value_filter ( 'name' ,
'talert_templates' ,
array ( 'id' => $alert [ 'id_alert_template' ]));
$actions = db_get_all_rows_sql ( ' SELECT name
FROM talert_actions
WHERE id IN ( SELECT id_alert_action
FROM talert_template_module_actions
WHERE id_alert_template_module = ' . $alert[' id_agent_module '] . ' ); ' );
$list = '<ul class="action_list">' ;
if ( $actions === false ) {
$row = db_get_row_sql ( ' SELECT id_alert_action
FROM talert_templates
WHERE id IN ( SELECT id_alert_template
FROM talert_template_modules
WHERE id = ' . $alert[' id '] . ' ) ' );
$id_action = 0 ;
if ( ! empty ( $row ))
$id_action = $row [ 'id_alert_action' ];
// Prevent from void action
if ( empty ( $id_action ))
$id_action = 0 ;
$actions = db_get_all_rows_sql ( ' SELECT name
FROM talert_actions
WHERE id = ' . $id_action );
}
if ( $actions == false )
$actions = array ();
foreach ( $actions as $action ) {
$list .= '<li>' . $action [ 'name' ] . '</li>' ;
}
$list .= '</ul>' ;
$data [] = $list ;
$list = '<ul style="list-style-type: disc; margin-left: 10px;">' ;
$firedTimes = get_module_alert_fired (
$alert [ 'id_agent_module' ],
$alert [ 'id' ], ( int ) $period , ( int ) $date );
if ( $firedTimes === false ) {
$firedTimes = array ();
}
foreach ( $firedTimes as $fireTime ) {
$list .= '<li>' . $fireTime [ 'timestamp' ] . '</li>' ;
}
$list .= '</ul>' ;
if ( $alert [ 'disabled' ]) {
$table -> rowstyle [ $i ] = 'color: grey; font-style: italic;' ;
}
$i ++ ;
$data [] = $list ;
array_push ( $table -> data , $data );
}
if ( $html ) {
return html_print_table ( $table , $return );
}
else {
return $table ;
}
}
/**
* Get a report for alerts of module .
*
* It prints the numbers of alerts defined , fired and not fired of agent .
*
* @ param int $id_agent_module Module to get info of the alerts .
* @ param int $period Period of time of the desired alert report .
* @ param int $date Beggining date of the report ( current date by default ) .
* @ param bool $return Flag to return or echo the report ( echo by default ) .
* @ param bool Flag to return the html or table object , by default html .
*
* @ return mixed A table object ( XHTML ) or object table is false the html .
*/
function reporting_alert_reporting_module ( $id_agent_module , $period = 0 , $date = 0 , $return = true , $html = true ) {
if ( ! is_numeric ( $date )) {
$date = strtotime ( $date );
}
if ( empty ( $date )) {
$date = get_system_time ();
}
$table -> width = '99%' ;
$table -> data = array ();
$table -> head = array ();
$table -> head [ 1 ] = __ ( 'Template' );
$table -> head [ 2 ] = __ ( 'Actions' );
$table -> head [ 3 ] = __ ( 'Fired' );
$alerts = db_get_all_rows_sql ( ' SELECT * , t1 . id as id_alert_template_module
FROM talert_template_modules AS t1
INNER JOIN talert_templates AS t2 ON t1 . id_alert_template = t2 . id
WHERE id_agent_module = ' . $id_agent_module );
if ( $alerts === false ) {
$alerts = array ();
}
$i = 0 ;
foreach ( $alerts as $alert ) {
$data = array ();
$data [ 1 ] = db_get_value_filter ( 'name' , 'talert_templates' , array ( 'id' => $alert [ 'id_alert_template' ]));
$actions = db_get_all_rows_sql ( ' SELECT name
FROM talert_actions
WHERE id IN ( SELECT id_alert_action
FROM talert_template_module_actions
WHERE id_alert_template_module = ' . $alert[' id_alert_template_module '] . ' ); ' );
$data [ 2 ] = '<ul class="action_list">' ;
if ( $actions === false ) {
$row = db_get_row_sql ( ' SELECT id_alert_action
FROM talert_templates
WHERE id IN ( SELECT id_alert_template
FROM talert_template_modules
WHERE id = ' . $alert[' id_alert_template_module '] . ' ) ' );
$id_action = 0 ;
if ( ! empty ( $row ))
$id_action = $row [ 'id_alert_action' ];
// Prevent from void action
if ( empty ( $id_action ))
$id_action = 0 ;
$actions = db_get_all_rows_sql ( ' SELECT name
FROM talert_actions
WHERE id = ' . $id_action );
}
if ( $actions === false ) {
$actions = array ();
}
foreach ( $actions as $action ) {
$data [ 2 ] .= '<li>' . $action [ 'name' ] . '</li>' ;
}
$data [ 2 ] .= '</ul>' ;
$data [ 3 ] = '<ul style="list-style-type: disc; margin-left: 10px;">' ;
$firedTimes = get_module_alert_fired ( $id_agent_module , $alert [ 'id_alert_template_module' ], ( int ) $period , ( int ) $date );
if ( $firedTimes === false ) {
$firedTimes = array ();
}
foreach ( $firedTimes as $fireTime ) {
$data [ 3 ] .= '<li>' . $fireTime [ 'timestamp' ] . '</li>' ;
}
$data [ 3 ] .= '</ul>' ;
if ( $alert [ 'disabled' ]) {
$table -> rowstyle [ $i ] = 'color: grey; font-style: italic;' ;
}
$i ++ ;
array_push ( $table -> data , $data );
}
if ( $html ) {
return html_print_table ( $table , $return );
}
else {
return $table ;
}
}
/**
* Get a report for alerts in a group of agents .
*
* It prints the numbers of alerts defined , fired and not fired in a group .
* It also prints all the alerts that were fired grouped by agents .
*
* @ param int $id_group Group to get info of the alerts .
* @ param int $period Period of time of the desired alert report .
* @ param int $date Beggining date of the report ( current date by default ) .
* @ param bool $return Flag to return or echo the report ( echo by default ) .
*
* @ return string
*/
function reporting_alert_reporting ( $id_group , $period = 0 , $date = 0 , $return = false ) {
global $config ;
$output = '' ;
$alerts = get_group_alerts ( $id_group );
$alerts_fired = get_alerts_fired ( $alerts , $period , $date );
$fired_percentage = 0 ;
if ( sizeof ( $alerts ) > 0 )
$fired_percentage = round ( sizeof ( $alerts_fired ) / sizeof ( $alerts ) * 100 , 2 );
$not_fired_percentage = 100 - $fired_percentage ;
$data = array ();
$data [ __ ( 'Alerts fired' )] = $fired_percentage ;
$data [ __ ( 'Alerts not fired' )] = $not_fired_percentage ;
$output .= pie3d_graph ( false , $data , 280 , 150 ,
__ ( " other " ),
ui_get_full_url ( false , false , false , false ) . '/' ,
ui_get_full_url ( false , false , false , false ) . " /images/logo_vertical_water.png " ,
$config [ 'fontpath' ], $config [ 'font_size' ]);
$output .= '<strong>' . __ ( 'Alerts fired' ) . ': ' . sizeof ( $alerts_fired ) . '</strong><br />' ;
$output .= '<strong>' . __ ( 'Total alerts monitored' ) . ': ' . sizeof ( $alerts ) . '</strong><br />' ;
if ( ! sizeof ( $alerts_fired )) {
if ( ! $return )
echo $output ;
return $output ;
}
$table = reporting_get_fired_alerts_table ( $alerts_fired );
$table -> width = '100%' ;
$table -> class = 'databox' ;
$table -> size = array ();
$table -> size [ 0 ] = '100px' ;
$table -> style = array ();
$table -> style [ 0 ] = 'font-weight: bold' ;
$output .= html_print_table ( $table , true );
if ( ! $return )
echo $output ;
return $output ;
}
/**
* Get a report for monitors modules in a group of agents .
*
* It prints the numbers of monitors defined , showing those which went up and down , in a group .
* It also prints all the down monitors in the group .
*
* @ param int $id_group Group to get info of the monitors .
* @ param int $period Period of time of the desired monitor report .
* @ param int $date Beginning date of the report in UNIX time ( current date by default ) .
* @ param bool $return Flag to return or echo the report ( by default ) .
*
* @ return string
*/
function reporting_monitor_health ( $id_group , $period = 0 , $date = 0 , $return = false ) {
if ( empty ( $date )) //If date is 0, false or empty
$date = get_system_time ();
$datelimit = $date - $period ;
$output = '' ;
$monitors = modules_get_monitors_in_group ( $id_group );
if ( empty ( $monitors )) //If monitors has returned false or an empty array
return ;
$monitors_down = modules_get_monitors_down ( $monitors , $period , $date );
$down_percentage = round ( count ( $monitors_down ) / count ( $monitors ) * 100 , 2 );
$not_down_percentage = 100 - $down_percentage ;
$output .= '<strong>' . __ ( 'Total monitors' ) . ': ' . count ( $monitors ) . '</strong><br />' ;
$output .= '<strong>' . __ ( 'Monitors down on period' ) . ': ' . count ( $monitors_down ) . '</strong><br />' ;
$table = reporting_get_monitors_down_table ( $monitors_down );
$table -> width = '100%' ;
$table -> class = 'databox' ;
$table -> size = array ();
$table -> size [ 0 ] = '100px' ;
$table -> style = array ();
$table -> style [ 0 ] = 'font-weight: bold' ;
$table -> size = array ();
$table -> size [ 0 ] = '100px' ;
$output .= html_print_table ( $table , true );
$data = array ();
$data [ __ ( 'Monitors OK' )] = $down_percentage ;
$data [ __ ( 'Monitors BAD' )] = $not_down_percentage ;
$output .= pie3d_graph ( false , $data , 280 , 150 ,
__ ( " other " ),
ui_get_full_url ( false , false , false , false ) . '/' ,
ui_get_full_url ( false , false , false , false ) . " /images/logo_vertical_water.png " ,
$config [ 'fontpath' ], $config [ 'font_size' ]);
if ( ! $return )
echo $output ;
return $output ;
}
/**
* Get a report table with all the monitors down .
*
* @ param array An array with all the monitors down
* @ see function modules_get_monitors_down ()
*
* @ return object A table object with a monitors down report .
*/
function reporting_get_monitors_down_table ( $monitors_down ) {
$table -> data = array ();
$table -> head = array ();
$table -> head [ 0 ] = __ ( 'Agent' );
$table -> head [ 1 ] = __ ( 'Monitor' );
$agents = array ();
if ( $monitors_down ) {
foreach ( $monitors_down as $monitor ) {
/* Add monitors fired to $agents_fired_alerts indexed by id_agent */
$id_agent = $monitor [ 'id_agente' ];
if ( ! isset ( $agents [ $id_agent ])) {
$agents [ $id_agent ] = array ();
}
array_push ( $agents [ $id_agent ], $monitor );
$monitors_down ++ ;
}
foreach ( $agents as $id_agent => $monitors ) {
$data = array ();
foreach ( $monitors as $monitor ) {
if ( ! isset ( $data [ 0 ]))
$data [ 0 ] = agents_get_name ( $id_agent );
else
$data [ 0 ] = '' ;
if ( $monitor [ 'descripcion' ] != '' ) {
$data [ 1 ] = $monitor [ 'descripcion' ];
}
else {
$data [ 1 ] = $monitor [ 'nombre' ];
}
array_push ( $table -> data , $data );
}
}
}
return $table ;
}
/**
* Get a general report of a group of agents .
*
* It shows the number of agents and no more things right now .
*
* @ param int Group to get the report
* @ param bool Flag to return or echo the report ( by default ) .
*
* @ return HTML string with group report
*/
function reporting_print_group_reporting ( $id_group , $return = false ) {
$agents = agents_get_group_agents ( $id_group , false , " none " );
$output = '<strong>' .
sprintf ( __ ( 'Agents in group: %s' ), count ( $agents )) .
'</strong><br />' ;
if ( $return === false )
echo $output ;
return $output ;
}
/**
* Get a report table of the fired alerts group by agents .
*
* @ param int Agent id to generate the report .
* @ param int Period of time of the report .
* @ param int Beginning date of the report in UNIX time ( current date by default ) .
*
* @ return object A table object with the alert reporting ..
*/
function reporting_get_agent_alerts_table ( $id_agent , $period = 0 , $date = 0 ) {
global $config ;
$table -> data = array ();
$table -> head = array ();
$table -> head [ 0 ] = __ ( 'Type' );
$table -> head [ 1 ] = __ ( 'Description' );
$table -> head [ 2 ] = __ ( 'Value' );
$table -> head [ 3 ] = __ ( 'Threshold' );
$table -> head [ 4 ] = __ ( 'Last fired' );
$table -> head [ 5 ] = __ ( 'Times fired' );
require_once ( $config [ " homedir " ] . '/include/functions_alerts.php' );
$alerts = agents_get_alerts ( $id_agent );
foreach ( $alerts [ 'simple' ] as $alert ) {
$fires = get_alert_fires_in_period ( $alert [ 'id' ], $period , $date );
if ( ! $fires ) {
continue ;
}
$template = alerts_get_alert_template ( $alert [ 'id_alert_template' ]);
$data = array ();
$data [ 0 ] = alerts_get_alert_templates_type_name ( $template [ 'type' ]);
$data [ 1 ] = $template [ 'name' ];
switch ( $template [ 'type' ]) {
case 'regex' :
if ( $template [ 'matches_value' ])
$data [ 2 ] = '≃ "' . $template [ 'value' ] . '"' ;
else
$data [ 2 ] = '≄ "' . $template [ 'value' ] . '"' ;
break ;
case 'equal' :
case 'not_equal' :
$data [ 2 ] = $template [ 'value' ];
break ;
case 'max-min' :
$data [ 2 ] = __ ( 'Min.' ) . ': ' . $template [ 'min_value' ] . ' ' ;
$data [ 2 ] .= __ ( 'Max.' ) . ': ' . $template [ 'max_value' ] . ' ' ;
break ;
case 'max' :
$data [ 2 ] = $template [ 'max_value' ];
break ;
case 'min' :
$data [ 2 ] = $template [ 'min_value' ];
break ;
}
$data [ 3 ] = $template [ 'time_threshold' ];
$data [ 4 ] = ui_print_timestamp ( get_alert_last_fire_timestamp_in_period ( $alert [ 'id' ], $period , $date ), true );
$data [ 5 ] = $fires ;
array_push ( $table -> data , $data );
}
return $table ;
}
/**
* Get a report of monitors in an agent .
*
* @ param int Agent id to get the report
* @ param int Period of time of the report .
* @ param int Beginning date of the report in UNIX time ( current date by default ) .
*
* @ return object A table object with the report .
*/
function reporting_get_agent_monitors_table ( $id_agent , $period = 0 , $date = 0 ) {
$n_a_string = __ ( 'N/A' ) . '(*)' ;
$table -> head = array ();
$table -> head [ 0 ] = __ ( 'Monitor' );
$table -> head [ 1 ] = __ ( 'Last failure' );
$table -> data = array ();
$monitors = modules_get_monitors_in_agent ( $id_agent );
if ( $monitors === false ) {
return $table ;
}
foreach ( $monitors as $monitor ) {
$downs = modules_get_monitor_downs_in_period ( $monitor [ 'id_agente_modulo' ], $period , $date );
if ( ! $downs ) {
continue ;
}
$data = array ();
if ( $monitor [ 'descripcion' ] != $n_a_string && $monitor [ 'descripcion' ] != '' )
$data [ 0 ] = $monitor [ 'descripcion' ];
else
$data [ 0 ] = $monitor [ 'nombre' ];
$data [ 1 ] = modules_get_last_down_timestamp_in_period ( $monitor [ 'id_agente_modulo' ], $period , $date );
array_push ( $table -> data , $data );
}
return $table ;
}
/**
* Get a report of all the modules in an agent .
*
* @ param int Agent id to get the report .
* @ param int Period of time of the report
* @ param int Beginning date of the report in UNIX time ( current date by default ) .
*
* @ return object
*/
function reporting_get_agent_modules_table ( $id_agent , $period = 0 , $date = 0 ) {
$table -> data = array ();
$n_a_string = __ ( 'N/A' ) . '(*)' ;
$modules = agents_get_modules ( $id_agent , array ( " nombre " , " descripcion " ));
if ( $modules === false )
$modules = array ();
$data = array ();
foreach ( $modules as $module ) {
if ( $module [ 'descripcion' ] != $n_a_string && $module [ 'descripcion' ] != '' )
$data [ 0 ] = $module [ 'descripcion' ];
else
$data [ 0 ] = $module [ 'nombre' ];
array_push ( $table -> data , $data );
}
return $table ;
}
/**
* Get a detailed report of an agent
*
* @ param int Agent to get the report .
* @ param int Period of time of the desired report .
* @ param int Beginning date of the report in UNIX time ( current date by default ) .
* @ param bool Flag to return or echo the report ( by default ) .
*
* @ return string
*/
function reporting_get_agent_detailed ( $id_agent , $period = 0 , $date = 0 , $return = false ) {
$output = '' ;
$n_a_string = __ ( 'N/A(*)' );
/* Show modules in agent */
$output .= '<div class="agent_reporting">' ;
$output .= '<h3 style="text-decoration: underline">' .
__ ( 'Agent' ) . ' - ' . agents_get_name ( $id_agent ) . '</h3>' ;
$output .= '<h4>' . __ ( 'Modules' ) . '</h3>' ;
$table_modules = reporting_get_agent_modules_table ( $id_agent , $period , $date );
$table_modules -> width = '99%' ;
$output .= html_print_table ( $table_modules , true );
/* Show alerts in agent */
$table_alerts = reporting_get_agent_alerts_table ( $id_agent , $period , $date );
$table_alerts -> width = '99%' ;
if ( sizeof ( $table_alerts -> data )) {
$output .= '<h4>' . __ ( 'Alerts' ) . '</h4>' ;
$output .= html_print_table ( $table_alerts , true );
}
/* Show monitor status in agent (if any) */
$table_monitors = reporting_get_agent_monitors_table ( $id_agent , $period , $date );
if ( sizeof ( $table_monitors -> data ) == 0 ) {
$output .= '</div>' ;
if ( ! $return )
echo $output ;
return $output ;
}
$table_monitors -> width = '99%' ;
$table_monitors -> align = array ();
$table_monitors -> align [ 1 ] = 'right' ;
$table_monitors -> size = array ();
$table_monitors -> align [ 1 ] = '10%' ;
$output .= '<h4>' . __ ( 'Monitors' ) . '</h4>' ;
$output .= html_print_table ( $table_monitors , true );
$output .= '</div>' ;
if ( ! $return )
echo $output ;
return $output ;
}
/**
* Get a detailed report of agents in a group .
*
* @ param mixed Group ( s ) to get the report
* @ param int Period
* @ param int Timestamp to start from
* @ param bool Flag to return or echo the report ( by default ) .
*
* @ return string
*/
function reporting_agents_get_group_agents_detailed ( $id_group , $period = 0 , $date = 0 , $return = false ) {
$agents = agents_get_group_agents ( $id_group , false , " none " );
$output = '' ;
foreach ( $agents as $agent_id => $agent_name ) {
$output .= reporting_get_agent_detailed ( $agent_id , $period , $date , true );
}
if ( $return === false )
echo $output ;
return $output ;
}
/**
* Get a detailed report of summarized events per agent
*
* It construct a table object with all the grouped events happened in an agent
* during a period of time .
*
* @ param mixed Agent id ( s ) to get the report from .
* @ param int Period of time ( in seconds ) to get the report .
* @ param int Beginning date ( unixtime ) of the report
* @ param bool Flag to return or echo the report table ( echo by default ) .
*
* @ return A table object ( XHTML )
*/
function reporting_get_agents_detailed_event ( $id_agents , $period = 0 ,
$date = 0 , $return = false , $filter_event_validated = false ,
$filter_event_critical = false , $filter_event_warning = false , $filter_event_no_validated = false ) {
global $config ;
$id_agents = ( array ) safe_int ( $id_agents , 1 );
if ( ! is_numeric ( $date )) {
$date = strtotime ( $date );
}
if ( empty ( $date )) {
$date = get_system_time ();
}
$table -> width = '99%' ;
$table -> align = array ();
$table -> align [ 0 ] = 'center' ;
$table -> align [ 1 ] = 'center' ;
$table -> align [ 3 ] = 'center' ;
$table -> data = array ();
$table -> head = array ();
$table -> head [ 0 ] = __ ( 'Status' );
$table -> head [ 1 ] = __ ( 'Count' );
$table -> head [ 2 ] = __ ( 'Name' );
$table -> head [ 3 ] = __ ( 'Type' );
$table -> head [ 4 ] = __ ( 'Criticity' );
$table -> head [ 5 ] = __ ( 'Val. by' );
$table -> head [ 6 ] = __ ( 'Timestamp' );
$events = array ();
foreach ( $id_agents as $id_agent ) {
$event = events_get_agent ( $id_agent ,
( int ) $period ,
( int ) $date ,
$filter_event_validated , $filter_event_critical ,
$filter_event_warning , $filter_event_no_validated );
if ( ! empty ( $event )) {
array_push ( $events , $event );
}
}
if ( $events ) {
$note = '' ;
if ( count ( $events ) >= 1000 ) {
$note .= '* ' . __ ( 'Maximum of events shown' ) . ' (1000)<br>' ;
}
foreach ( $events as $eventRow ) {
foreach ( $eventRow as $k => $event ) {
//First pass along the class of this row
$table -> cellclass [ $k ][ 1 ] = $table -> cellclass [ $k ][ 2 ] =
$table -> cellclass [ $k ][ 4 ] = $table -> cellclass [ $k ][ 5 ] =
$table -> cellclass [ $k ][ 6 ] =
get_priority_class ( $event [ " criticity " ]);
$data = array ();
// Colored box
switch ( $event [ 'estado' ]) {
case 0 :
$img_st = " images/star.png " ;
$title_st = __ ( 'New event' );
break ;
case 1 :
$img_st = " images/tick.png " ;
$title_st = __ ( 'Event validated' );
break ;
case 2 :
$img_st = " images/hourglass.png " ;
$title_st = __ ( 'Event in process' );
break ;
}
$data [] = html_print_image ( $img_st , true ,
array ( " class " => " image_status " ,
" width " => 16 ,
" title " => $title_st ));
$data [] = $event [ 'event_rep' ];
$data [] = ui_print_truncate_text (
io_safe_output ( $event [ 'evento' ]),
140 , false , true );
//$data[] = $event['event_type'];
$data [] = events_print_type_img ( $event [ " event_type " ], true );
$data [] = get_priority_name ( $event [ 'criticity' ]);
if ( empty ( $event [ 'id_usuario' ]) && $event [ 'estado' ] == EVENT_VALIDATE ) {
$data [] = '<i>' . __ ( 'System' ) . '</i>' ;
}
else {
$user_name = db_get_value ( 'fullname' , 'tusuario' , 'id_user' , $event [ 'id_usuario' ]);
$data [] = io_safe_output ( $user_name );
}
$data [] = '<font style="font-size: 6pt;">' .
date ( $config [ 'date_format' ], $event [ 'timestamp_rep' ]) . '</font>' ;
array_push ( $table -> data , $data );
}
}
}
if ( $events )
return html_print_table ( $table , $return ) . $note ;
}
/**
* Gets a detailed reporting of groups ' s events .
*
* @ param unknown_type $id_group Id of the group .
* @ param unknown_type $period Time period of the report .
* @ param unknown_type $date Date of the report .
* @ param unknown_type $return Whether to return or not .
* @ param unknown_type $html Whether to return HTML code or not .
*
* @ return string Report of groups ' s events
*/
function reporting_get_group_detailed_event ( $id_group , $period = 0 ,
$date = 0 , $return = false , $html = true ,
$filter_event_validated = false , $filter_event_critical = false ,
$filter_event_warning = false , $filter_event_no_validated = false ) {
global $config ;
if ( ! is_numeric ( $date )) {
$date = strtotime ( $date );
}
if ( empty ( $date )) {
$date = get_system_time ();
}
$table -> width = '99%' ;
$table -> align = array ();
$table -> align [ 0 ] = 'center' ;
$table -> align [ 2 ] = 'center' ;
$table -> data = array ();
$table -> head = array ();
$table -> head [ 0 ] = __ ( 'Status' );
$table -> head [ 1 ] = __ ( 'Name' );
$table -> head [ 2 ] = __ ( 'Type' );
$table -> head [ 3 ] = __ ( 'Agent' );
$table -> head [ 4 ] = __ ( 'Criticity' );
$table -> head [ 5 ] = __ ( 'Val. by' );
$table -> head [ 6 ] = __ ( 'Timestamp' );
$events = events_get_group_events ( $id_group , $period , $date ,
$filter_event_validated , $filter_event_critical ,
$filter_event_warning , $filter_event_no_validated );
if ( $events ) {
$note = '' ;
if ( count ( $events ) >= 1000 ) {
$note .= '* ' . __ ( 'Maximum of events shown' ) . ' (1000)<br>' ;
}
foreach ( $events as $k => $event ) {
//First pass along the class of this row
$table -> cellclass [ $k ][ 1 ] = $table -> cellclass [ $k ][ 3 ] =
$table -> cellclass [ $k ][ 4 ] = $table -> cellclass [ $k ][ 5 ] =
$table -> cellclass [ $k ][ 6 ] =
get_priority_class ( $event [ " criticity " ]);
$data = array ();
// Colored box
switch ( $event [ 'estado' ]) {
case 0 :
$img_st = " images/star.png " ;
$title_st = __ ( 'New event' );
break ;
case 1 :
$img_st = " images/tick.png " ;
$title_st = __ ( 'Event validated' );
break ;
case 2 :
$img_st = " images/hourglass.png " ;
$title_st = __ ( 'Event in process' );
break ;
}
$data [] = html_print_image ( $img_st , true ,
array ( " class " => " image_status " ,
" width " => 16 ,
" title " => $title_st ,
" id " => 'status_img_' . $event [ " id_evento " ]));
$data [] = ui_print_truncate_text (
io_safe_output ( $event [ 'evento' ]),
140 , false , true );
//$data[1] = $event['event_type'];
$data [] = events_print_type_img ( $event [ " event_type " ], true );
if ( ! empty ( $event [ 'id_agente' ]))
$data [] = agents_get_name ( $event [ 'id_agente' ]);
else
$data [] = __ ( 'Pandora System' );
$data [] = get_priority_name ( $event [ 'criticity' ]);
if ( empty ( $event [ 'id_usuario' ]) && $event [ 'estado' ] == EVENT_VALIDATE ) {
$data [] = '<i>' . __ ( 'System' ) . '</i>' ;
}
else {
$user_name = db_get_value ( 'fullname' , 'tusuario' , 'id_user' , $event [ 'id_usuario' ]);
$data [] = io_safe_output ( $user_name );
}
$data [] = '<font style="font-size: 6pt;">' .
date ( $config [ 'date_format' ], $event [ 'timestamp_rep' ]) .
'</font>' ;
array_push ( $table -> data , $data );
}
if ( $html ) {
return html_print_table ( $table , $return ) . $note ;
}
else {
return $table ;
}
}
else {
return false ;
}
}
/**
* Get a detailed report of summarized events per agent
*
* It construct a table object with all the grouped events happened in an agent
* during a period of time .
*
* @ param mixed Module id to get the report from .
* @ param int Period of time ( in seconds ) to get the report .
* @ param int Beginning date ( unixtime ) of the report
* @ param bool Flag to return or echo the report table ( echo by default ) .
* @ param bool Flag to return the html or table object , by default html .
*
* @ return mixed A table object ( XHTML ) or object table is false the html .
*/
function reporting_get_module_detailed_event ( $id_modules , $period = 0 , $date = 0 , $return = false , $html = true ) {
global $config ;
$id_modules = ( array ) safe_int ( $id_modules , 1 );
if ( ! is_numeric ( $date )) {
$date = strtotime ( $date );
}
if ( empty ( $date )) {
$date = get_system_time ();
}
$table -> width = '99%' ;
$table -> data = array ();
$table -> head = array ();
$table -> head [ 0 ] = __ ( 'Status' );
$table -> head [ 1 ] = __ ( 'Event name' );
$table -> head [ 2 ] = __ ( 'Event type' );
$table -> head [ 3 ] = __ ( 'Criticity' );
$table -> head [ 4 ] = __ ( 'Count' );
$table -> head [ 5 ] = __ ( 'Timestamp' );
$table -> style [ 0 ] = 'text-align: center;' ;
$table -> style [ 4 ] = 'text-align: center;' ;
$events = array ();
foreach ( $id_modules as $id_module ) {
$event = events_get_module ( $id_module , ( int ) $period , ( int ) $date );
if ( ! empty ( $event )) {
array_push ( $events , $event );
}
}
if ( $events ) {
$note = '' ;
if ( count ( $events ) >= 1000 ) {
$note .= '* ' . __ ( 'Maximum of events shown' ) . ' (1000)<br>' ;
}
foreach ( $events as $eventRow ) {
foreach ( $eventRow as $k => $event ) {
//$k = count($table->data);
$table -> cellclass [ $k ][ 1 ] = $table -> cellclass [ $k ][ 2 ] =
$table -> cellclass [ $k ][ 3 ] = $table -> cellclass [ $k ][ 4 ] =
$table -> cellclass [ $k ][ 5 ] = get_priority_class ( $event [ " criticity " ]);
$data = array ();
// Colored box
switch ( $event [ 'estado' ]) {
case 0 :
$img_st = " images/star.png " ;
$title_st = __ ( 'New event' );
break ;
case 1 :
$img_st = " images/tick.png " ;
$title_st = __ ( 'Event validated' );
break ;
case 2 :
$img_st = " images/hourglass.png " ;
$title_st = __ ( 'Event in process' );
break ;
}
$data [ 0 ] = html_print_image ( $img_st , true ,
array ( " class " => " image_status " ,
" width " => 16 ,
" title " => $title_st ,
" id " => 'status_img_' . $event [ " id_evento " ]));
$data [ 1 ] = io_safe_output ( $event [ 'evento' ]);
$data [ 2 ] = $event [ 'event_type' ];
$data [ 3 ] = get_priority_name ( $event [ 'criticity' ]);
$data [ 4 ] = $event [ 'event_rep' ];
$data [ 5 ] = date ( $config [ 'date_format' ], $event [ 'timestamp_rep' ]);
array_push ( $table -> data , $data );
}
}
if ( $html ) {
return html_print_table ( $table , $return ) . $note ;
}
else {
return $table ;
}
}
else {
return false ;
}
}
/**
* Get a detailed report of the modules of the agent
*
* @ param int $id_agent Agent id to get the report for .
* @ param string $filter filter for get partial modules .
*
* @ return array An array
*/
function reporting_get_agent_module_info ( $id_agent , $filter = false ) {
global $config ;
$return = array ();
$return [ " last_contact " ] = 0 ; //Last agent contact
$return [ " status " ] = STATUS_AGENT_NO_DATA ;
$return [ " status_img " ] = ui_print_status_image ( STATUS_AGENT_NO_DATA , __ ( 'Agent without data' ), true );
$return [ " alert_status " ] = " notfired " ;
$return [ " alert_value " ] = STATUS_ALERT_NOT_FIRED ;
$return [ " alert_img " ] = ui_print_status_image ( STATUS_ALERT_NOT_FIRED , __ ( 'Alert not fired' ), true );
$return [ " agent_group " ] = agents_get_agent_group ( $id_agent );
if ( ! check_acl ( $config [ " id_user " ], $return [ " agent_group " ], " AR " )) {
return $return ;
}
if ( $filter != '' ) {
$filter = 'AND ' ;
}
$filter = 'disabled = 0' ;
$modules = agents_get_modules ( $id_agent , false , $filter , true , false );
if ( $modules === false ) {
return $return ;
}
$now = get_system_time ();
// Get modules status for this agent
$agent = db_get_row ( " tagente " , " id_agente " , $id_agent );
$return [ " total_count " ] = $agent [ " total_count " ];
$return [ " normal_count " ] = $agent [ " normal_count " ];
$return [ " warning_count " ] = $agent [ " warning_count " ];
$return [ " critical_count " ] = $agent [ " critical_count " ];
$return [ " unknown_count " ] = $agent [ " unknown_count " ];
$return [ " fired_count " ] = $agent [ " fired_count " ];
$return [ " notinit_count " ] = $agent [ " notinit_count " ];
if ( $return [ " total_count " ] > 0 ) {
if ( $return [ " critical_count " ] > 0 ) {
$return [ " status " ] = STATUS_AGENT_CRITICAL ;
$return [ " status_img " ] = ui_print_status_image ( STATUS_AGENT_CRITICAL , __ ( 'At least one module in CRITICAL status' ), true );
}
else if ( $return [ " warning_count " ] > 0 ) {
$return [ " status " ] = STATUS_AGENT_WARNING ;
$return [ " status_img " ] = ui_print_status_image ( STATUS_AGENT_WARNING , __ ( 'At least one module in WARNING status' ), true );
}
else if ( $return [ " unknown_count " ] > 0 ) {
$return [ " status " ] = STATUS_AGENT_DOWN ;
$return [ " status_img " ] = ui_print_status_image ( STATUS_AGENT_DOWN , __ ( 'At least one module is in UKNOWN status' ), true );
}
else {
$return [ " status " ] = STATUS_AGENT_OK ;
$return [ " status_img " ] = ui_print_status_image ( STATUS_AGENT_OK , __ ( 'All Monitors OK' ), true );
}
}
//Alert not fired is by default
if ( $return [ " fired_count " ] > 0 ) {
$return [ " alert_status " ] = " fired " ;
$return [ " alert_img " ] = ui_print_status_image ( STATUS_ALERT_FIRED , __ ( 'Alert fired' ), true );
$return [ " alert_value " ] = STATUS_ALERT_FIRED ;
}
elseif ( groups_give_disabled_group ( $return [ " agent_group " ])) {
$return [ " alert_status " ] = " disabled " ;
$return [ " alert_value " ] = STATUS_ALERT_DISABLED ;
$return [ " alert_img " ] = ui_print_status_image ( STATUS_ALERT_DISABLED , __ ( 'Alert disabled' ), true );
}
return $return ;
}
/**
* This is the callback sorting function for SLA values descending
*
* @ param array $a Array element 1 to compare
* @ param array $b Array element 2 to compare
*
*/
function sla_value_desc_cmp ( $a , $b ) {
// This makes 'Unknown' values the lastest
if ( preg_match ( '/^(.)*Unknown(.)*$/' , $a [ 5 ]))
$a [ 6 ] = - 1 ;
if ( preg_match ( '/^(.)*Unknown(.)*$/' , $b [ 5 ]))
$b [ 6 ] = - 1 ;
return ( $a [ 6 ] < $b [ 6 ]) ? 1 : 0 ;
}
/**
* This is the callback sorting function for SLA values ascending
*
* @ param array $a Array element 1 to compare
* @ param array $b Array element 2 to compare
*
*/
function sla_value_asc_cmp ( $a , $b ) {
// This makes 'Unknown' values the lastest
if ( preg_match ( '/^(.)*Unknown(.)*$/' , $a [ 5 ]))
$a [ 6 ] = - 1 ;
if ( preg_match ( '/^(.)*Unknown(.)*$/' , $b [ 5 ]))
$b [ 6 ] = - 1 ;
return ( $a [ 6 ] > $b [ 6 ]) ? 1 : 0 ;
}
/**
* Make the header for each content .
*/
function reporting_header_content ( $mini , $content , $report , & $table , $title = false , $name = false , $period = false ) {
global $config ;
if ( $mini ) {
$sizh = '' ;
$sizhfin = '' ;
}
else {
$sizh = '<h4>' ;
$sizhfin = '</h4>' ;
}
$data = array ();
$count_empty = 0 ;
if ( $title !== false ) {
$data [] = $sizh . $title . $sizhfin ;
}
else $count_empty ++ ;
if ( $name !== false ) {
$data [] = $sizh . $name . $sizhfin ;
}
else $count_empty ++ ;
if ( $period !== false && $content [ 'period' ] > 0 ) {
$data [] = $sizh . $period . $sizhfin ;
}
else if ( $content [ 'period' ] == 0 ) {
$es = json_decode ( $content [ 'external_source' ], true );
if ( $es [ 'date' ] == 0 ) {
$date = __ ( 'Last data' );
}
else {
$date = date ( $config [ " date_format " ], $es [ 'date' ]);
}
$data [] = " <div style='text-align: right;'> " . $sizh . $date . $sizhfin . " </div> " ;
}
else {
$data [] = " <div style='text-align: right;'> " . $sizh .
" ( " . human_time_description_raw ( $content [ 'period' ]) . " ) " .
__ ( " From: " ) . " " . date ( $config [ " date_format " ], $report [ " datetime " ] - $content [ 'period' ]) . " <br /> " .
__ ( " To: " ) . " " . date ( $config [ " date_format " ], $report [ " datetime " ]) . " <br /> " .
$sizhfin . " </div> " ;
}
$table -> colspan [ 0 ][ 2 - $count_empty ] = 1 + $count_empty ;
array_push ( $table -> data , $data );
}
/**
* This function is used once , in reporting_viewer . php , the HTML report render
* file . This function proccess each report item and write the render in the
* table record .
*
* @ param array $content Record of treport_content table for current item
* @ param array $table HTML Table row
* @ param array $report Report contents , with some added fields .
* @ param array $mini Mini flag for reduce the size .
*
*/
function reporting_render_report_html_item ( $content , $table , $report , $mini = false ) {
global $config ;
global $graphic_type ;
$only_image = ( bool ) $config [ 'flash_charts' ] ? false : true ;
if ( $mini ) {
$sizem = '1.5' ;
$sizgraph_w = '450' ;
$sizgraph_h = '100' ;
}
else {
$sizem = '3' ;
$sizgraph_w = '900' ;
$sizgraph_h = '230' ;
}
// Disable remote connections for netflow report items
if ( $content [ 'type' ] != 'netflow_area' &&
$content [ 'type' ] != 'netflow_pie' &&
$content [ 'type' ] != 'netflow_data' &&
$content [ 'type' ] != 'netflow_statistics' &&
$content [ 'type' ] != 'netflow_summary' ) {
$remote_connection = 1 ;
}
else {
$remote_connection = 0 ;
}
$server_name = $content [ 'server_name' ];
if (( $config [ 'metaconsole' ] == 1 ) && $server_name != '' && defined ( 'METACONSOLE' ) && $remote_connection == 1 ) {
$connection = metaconsole_get_connection ( $server_name );
if ( metaconsole_load_external_db ( $connection ) != NOERR ) {
//ui_print_error_message ("Error connecting to ".$server_name);
}
}
$module_name = db_get_value ( 'nombre' , 'tagente_modulo' , 'id_agente_modulo' , $content [ 'id_agent_module' ]);
if ( $content [ 'id_agent_module' ] != 0 ) {
$agent_name = modules_get_agentmodule_agent_name ( $content [ 'id_agent_module' ]);
}
else {
$agent_name = agents_get_name ( $content [ 'id_agent' ]);
}
$item_title = $content [ 'name' ];
switch ( $content [ " type " ]) {
case 1 :
case 'simple_graph' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Simple graph' );
}
reporting_header_content ( $mini , $content , $report , $table ,
$item_title ,
ui_print_truncate_text ( $agent_name , 'agent_medium' , false ) . ' <br> ' .
ui_print_truncate_text ( $module_name , 'module_medium' , false ));
//RUNNING
$next_row = 1 ;
// Put description at the end of the module (if exists)
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
}
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$table -> cellstyle [ $next_row ][ 0 ] = 'text-align: center;' ;
$data = array ();
$moduletype_name = modules_get_moduletype_name (
modules_get_agentmodule_type (
$content [ 'id_agent_module' ]));
$only_avg = true ;
// Due to database compatibility problems, the 'only_avg' value
// is stored into the json contained into the 'style' column.
if ( isset ( $content [ 'style' ])) {
$style_json = io_safe_output ( $content [ 'style' ]);
$style = json_decode ( $style_json , true );
if ( isset ( $style [ 'only_avg' ])) {
$only_avg = ( bool ) $style [ 'only_avg' ];
}
}
if ( preg_match ( " /string/ " , $moduletype_name )) {
$urlImage = ui_get_full_url ( false , false , false , false );
$data [ 0 ] = grafico_modulo_string ( $content [ 'id_agent_module' ], $content [ 'period' ],
false , $sizgraph_w , $sizgraph_h , '' , '' , false , $only_avg , false ,
$report [ " datetime " ], $only_image , $urlImage );
}
else {
$data [ 0 ] = grafico_modulo_sparse (
$content [ 'id_agent_module' ],
$content [ 'period' ],
false ,
$sizgraph_w ,
$sizgraph_h ,
'' ,
'' ,
false ,
$only_avg ,
true ,
$report [ " datetime " ],
'' ,
0 ,
0 ,
true ,
$only_image ,
ui_get_full_url ( false , false , false , false ),
1 ,
false ,
'' ,
false ,
true );
}
array_push ( $table -> data , $data );
break ;
case 'projection_graph' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Projection graph' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( $agent_name , 'agent_medium' , false ) . ' <br> ' .
ui_print_truncate_text ( $module_name , 'module_medium' , false ));
//RUNNING
$table -> colspan [ 1 ][ 0 ] = 4 ;
set_time_limit ( 500 );
$next_row = 1 ;
// Put description at the end of the module (if exists)
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
}
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$table -> cellstyle [ $next_row ][ 0 ] = 'text-align: center;' ;
$data = array ();
$output_projection = forecast_projection_graph ( $content [ 'id_agent_module' ], $content [ 'period' ], $content [ 'top_n_value' ]);
// If projection doesn't have data then don't draw graph
if ( $output_projection == NULL ) {
$output_projection = false ;
}
$modules = array ( $content [ 'id_agent_module' ]);
$weights = array ();
$data [ 0 ] = graphic_combined_module (
$modules ,
$weights ,
$content [ 'period' ],
$sizgraph_w , $sizgraph_h ,
'Projection%20Sample%20Graph' ,
'' ,
0 ,
0 ,
0 ,
0 ,
$report [ " datetime " ],
true ,
ui_get_full_url ( false , false , false , false ) . '/' ,
1 ,
// Important parameter, this tell to graphic_combined_module function that is a projection graph
$output_projection ,
$content [ 'top_n_value' ]
);
array_push ( $table -> data , $data );
break ;
case 'prediction_date' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Prediction date' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( $agent_name , 'agent_medium' , false ) . ' <br> ' .
ui_print_truncate_text ( $module_name , 'module_medium' , false ));
//RUNNING
$table -> colspan [ 1 ][ 0 ] = 4 ;
set_time_limit ( 500 );
// Put description at the end of the module (if exists)
$table -> colspan [ 2 ][ 0 ] = 4 ;
if ( $content [ " description " ] != " " ){
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$intervals_text = $content [ 'text' ];
$max_interval = substr ( $intervals_text , 0 , strpos ( $intervals_text , ';' ));
$min_interval = substr ( $intervals_text , strpos ( $intervals_text , ';' ) + 1 );
$value = forecast_prediction_date ( $content [ 'id_agent_module' ], $content [ 'period' ], $max_interval , $min_interval );
if ( $value === false ) {
$value = __ ( 'Unknown' );
}
else {
$value = date ( 'd M Y H:i:s' , $value );
}
$data [ 0 ] = '<p style="font: bold ' . $sizem . 'em Arial, Sans-serif; color: #000000;">' . $value . '</p>' ;
array_push ( $table -> data , $data );
break ;
case 'simple_baseline_graph' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Simple baseline graph' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( $agent_name , 'agent_medium' , false ) . ' <br> ' .
ui_print_truncate_text ( $module_name , 'module_medium' , false ));
//RUNNING
$table -> colspan [ 1 ][ 0 ] = 4 ;
// Put description at the end of the module (if exists)
$table -> colspan [ 2 ][ 0 ] = 4 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
$data = array ();
$data [ 0 ] = grafico_modulo_sparse ( $content [ 'id_agent_module' ], $content [ 'period' ],
false , $sizgraph_w , $sizgraph_h , '' , '' , false , true , true ,
$report [ " datetime " ], '' , true , 0 , true , $only_image ,
ui_get_full_url ( false , false , false , false ));
/* $data [ 0 ] = graphic_combined_module (
$modules ,
$weights ,
$content [ 'period' ],
$sizgraph_w , $sizgraph_h ,
'Combined%20Sample%20Graph' ,
'' ,
0 ,
0 ,
0 ,
$graph [ " stacked " ],
$report [ " datetime " ]); */
array_push ( $table -> data , $data );
break ;
case 2 :
case 'custom_graph' :
case 'automatic_custom_graph' :
$graph = db_get_row ( " tgraph " , " id_graph " , $content [ 'id_gs' ]);
if ( empty ( $item_title )) {
$item_title = __ ( 'Custom graph' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( $graph [ 'name' ], 'item_title' , false ));
//RUNNING
// Put description at the end of the module (if exists)
$table -> colspan [ 2 ][ 0 ] = 3 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
$result = db_get_all_rows_field_filter ( " tgraph_source " ,
" id_graph " , $content [ 'id_gs' ]);
$modules = array ();
$weights = array ();
if ( $result === false )
$result = array ();
foreach ( $result as $content2 ) {
array_push ( $modules , $content2 [ 'id_agent_module' ]);
array_push ( $weights , $content2 [ " weight " ]);
}
// Increase the height to fix the leyend rise
$sizgraph_h += count ( $modules ) * 15 ;
$table -> colspan [ 1 ][ 0 ] = 3 ;
$data = array ();
require_once ( $config [ " homedir " ] . '/include/functions_graph.php' );
$data [ 0 ] = graphic_combined_module (
$modules ,
$weights ,
$content [ 'period' ],
$sizgraph_w , $sizgraph_h ,
'Combined%20Sample%20Graph' ,
'' ,
0 ,
0 ,
0 ,
$graph [ " stacked " ],
$report [ " datetime " ],
$only_image ,
ui_get_full_url ( false , false , false , false ));
array_push ( $table -> data , $data );
break ;
case 'SLA_monthly' :
if ( function_exists ( " reporting_enterprise_sla_monthly " ))
reporting_enterprise_sla_monthly ( $mini , $content , $report , $table , $item_title );
break ;
case 'SLA_services' :
if ( function_exists ( " reporting_enterprise_sla_services " ))
reporting_enterprise_sla_services ( $mini , $content , $report , $table , $item_title );
break ;
case 3 :
case 'SLA' :
if ( empty ( $item_title )) {
$item_title = __ ( 'S.L.A.' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title );
$edge_interval = 10 ;
// What show?
$show_table = $content [ 'show_graph' ] == 0 || $content [ 'show_graph' ] == 1 ;
$show_graphs = $content [ 'show_graph' ] == 1 || $content [ 'show_graph' ] == 2 ;
//RUNNING
$table -> style [ 1 ] = 'text-align: right' ;
// Put description at the end of the module (if exists)
$table -> colspan [ 0 ][ 1 ] = 2 ;
$next_row = 1 ;
if ( $content [ " description " ] != " " ) {
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
$slas = db_get_all_rows_field_filter ( 'treport_content_sla_combined' ,
'id_report_content' , $content [ 'id_rc' ]);
if ( $slas === false ) {
$data = array ();
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
$data [ 0 ] = __ ( 'There are no SLAs defined' );
array_push ( $table -> data , $data );
$slas = array ();
break ;
}
elseif ( $show_table ) {
$table1 -> width = '99%' ;
$table1 -> data = array ();
$table1 -> head = array ();
$table1 -> head [ 0 ] = __ ( 'Agent' );
$table1 -> head [ 1 ] = __ ( 'Module' );
$table1 -> head [ 2 ] = __ ( 'Max/Min Values' );
$table1 -> head [ 3 ] = __ ( 'SLA Limit' );
$table1 -> head [ 4 ] = __ ( 'SLA Compliance' );
$table1 -> head [ 5 ] = __ ( 'Status' );
// $table1->head[6] = __('Criticity');
$table1 -> style [ 0 ] = 'text-align: left' ;
$table1 -> style [ 1 ] = 'text-align: left' ;
$table1 -> style [ 2 ] = 'text-align: right' ;
$table1 -> style [ 3 ] = 'text-align: right' ;
$table1 -> style [ 4 ] = 'text-align: right' ;
$table1 -> style [ 5 ] = 'text-align: right' ;
// $table1->style[6] = 'text-align: center';
}
// Table Planned Downtimes
require_once ( $config [ 'homedir' ] . '/include/functions_planned_downtimes.php' );
$metaconsole_on = ( $config [ 'metaconsole' ] == 1 ) && defined ( 'METACONSOLE' );
$downtime_malformed = false ;
$planned_downtimes_empty = true ;
$malformed_planned_downtimes_empty = true ;
if ( $metaconsole_on ) {
$id_agent_modules_by_server = array ();
foreach ( $slas as $sla ) {
$server = $sla [ 'server_name' ];
if ( empty ( $server ))
continue ;
if ( ! isset ( $id_agent_modules_by_server [ $server ]))
$id_agent_modules_by_server [ $server ] = array ();
$id_agent_modules_by_server [ $server ][] = $sla [ 'id_agent_module' ];
}
$planned_downtimes_by_server = array ();
$malformed_planned_downtimes_by_server = array ();
foreach ( $id_agent_modules_by_server as $server => $id_agent_modules ) {
//Metaconsole connection
if ( ! empty ( $server )) {
$connection = metaconsole_get_connection ( $server );
if ( ! metaconsole_load_external_db ( $connection )) {
continue ;
}
$planned_downtimes_by_server [ $server ] = reporting_get_planned_downtimes (( $report [ 'datetime' ] - $content [ 'period' ]), $report [ 'datetime' ], $id_agent_modules );
$malformed_planned_downtimes_by_server [ $server ] = planned_downtimes_get_malformed ();
if ( ! empty ( $planned_downtimes_by_server [ $server ]))
$planned_downtimes_empty = false ;
if ( ! empty ( $malformed_planned_downtimes_by_server [ $server ]))
$malformed_planned_downtimes_empty = false ;
//Restore db connection
metaconsole_restore_db ();
}
}
if ( ! $planned_downtimes_empty ) {
$table_planned_downtimes = new StdClass ();
$table_planned_downtimes -> width = '100%' ;
$table_planned_downtimes -> title = __ ( 'This SLA has been affected by the following planned downtimes' );
$table_planned_downtimes -> head = array ();
$table_planned_downtimes -> head [ 0 ] = __ ( 'Server' );
$table_planned_downtimes -> head [ 1 ] = __ ( 'Name' );
$table_planned_downtimes -> head [ 2 ] = __ ( 'Description' );
$table_planned_downtimes -> head [ 3 ] = __ ( 'Execution' );
$table_planned_downtimes -> head [ 4 ] = __ ( 'Dates' );
$table_planned_downtimes -> headstyle = array ();
$table_planned_downtimes -> style = array ();
$table_planned_downtimes -> cellstyle = array ();
$table_planned_downtimes -> data = array ();
foreach ( $planned_downtimes_by_server as $server => $planned_downtimes ) {
foreach ( $planned_downtimes as $planned_downtime ) {
$data = array ();
$data [ 0 ] = $server ;
$data [ 1 ] = $planned_downtime [ 'name' ];
$data [ 2 ] = $planned_downtime [ 'description' ];
$data [ 3 ] = ucfirst ( $planned_downtime [ 'type_execution' ]);
$data [ 4 ] = " " ;
switch ( $planned_downtime [ 'type_execution' ]) {
case 'once' :
$data [ 3 ] = date ( " Y-m-d H:i " , $planned_downtime [ 'date_from' ]) .
" " . __ ( 'to' ) . " " .
date ( " Y-m-d H:i " , $planned_downtime [ 'date_to' ]);
break ;
case 'periodically' :
switch ( $planned_downtime [ 'type_periodicity' ]) {
case 'weekly' :
$data [ 4 ] = __ ( 'Weekly:' );
$data [ 4 ] .= " " ;
if ( $planned_downtime [ 'monday' ]) {
$data [ 4 ] .= __ ( 'Mon' );
$data [ 4 ] .= " " ;
}
if ( $planned_downtime [ 'tuesday' ]) {
$data [ 4 ] .= __ ( 'Tue' );
$data [ 4 ] .= " " ;
}
if ( $planned_downtime [ 'wednesday' ]) {
$data [ 4 ] .= __ ( 'Wed' );
$data [ 4 ] .= " " ;
}
if ( $planned_downtime [ 'thursday' ]) {
$data [ 4 ] .= __ ( 'Thu' );
$data [ 4 ] .= " " ;
}
if ( $planned_downtime [ 'friday' ]) {
$data [ 4 ] .= __ ( 'Fri' );
$data [ 4 ] .= " " ;
}
if ( $planned_downtime [ 'saturday' ]) {
$data [ 4 ] .= __ ( 'Sat' );
$data [ 4 ] .= " " ;
}
if ( $planned_downtime [ 'sunday' ]) {
$data [ 4 ] .= __ ( 'Sun' );
$data [ 4 ] .= " " ;
}
$data [ 4 ] .= " ( " . $planned_downtime [ 'periodically_time_from' ];
$data [ 4 ] .= " - " . $planned_downtime [ 'periodically_time_to' ] . " ) " ;
break ;
case 'monthly' :
$data [ 4 ] = __ ( 'Monthly:' ) . " " ;
$data [ 4 ] .= __ ( 'From day' ) . " " . $planned_downtime [ 'periodically_day_from' ];
$data [ 4 ] .= " " . strtolower ( __ ( 'To day' )) . " " ;
$data [ 4 ] .= $planned_downtime [ 'periodically_day_to' ];
$data [ 4 ] .= " ( " . $planned_downtime [ 'periodically_time_from' ];
$data [ 4 ] .= " - " . $planned_downtime [ 'periodically_time_to' ] . " ) " ;
break ;
}
break ;
}
if ( ! $malformed_planned_downtimes_empty
&& isset ( $malformed_planned_downtimes_by_server [ $server ])
&& isset ( $malformed_planned_downtimes_by_server [ $server ][ $planned_downtime [ 'id' ]])) {
$next_row_num = count ( $table_planned_downtimes -> data );
$table_planned_downtimes -> cellstyle [ $next_row_num ][ 0 ] = 'color: red' ;
$table_planned_downtimes -> cellstyle [ $next_row_num ][ 1 ] = 'color: red' ;
$table_planned_downtimes -> cellstyle [ $next_row_num ][ 2 ] = 'color: red' ;
$table_planned_downtimes -> cellstyle [ $next_row_num ][ 3 ] = 'color: red' ;
$table_planned_downtimes -> cellstyle [ $next_row_num ][ 4 ] = 'color: red' ;
if ( ! $downtime_malformed )
$downtime_malformed = true ;
}
$table_planned_downtimes -> data [] = $data ;
}
}
}
}
else {
$id_agent_modules = array ();
foreach ( $slas as $sla ) {
if ( ! empty ( $sla [ 'id_agent_module' ]))
$id_agent_modules [] = $sla [ 'id_agent_module' ];
}
$planned_downtimes = reporting_get_planned_downtimes (( $report [ 'datetime' ] - $content [ 'period' ]), $report [ 'datetime' ], $id_agent_modules );
$malformed_planned_downtimes = planned_downtimes_get_malformed ();
if ( ! empty ( $planned_downtimes ))
$planned_downtimes_empty = false ;
if ( ! empty ( $malformed_planned_downtimes ))
$malformed_planned_downtimes_empty = false ;
if ( ! $planned_downtimes_empty ) {
$table_planned_downtimes = new StdClass ();
$table_planned_downtimes -> width = '100%' ;
$table_planned_downtimes -> title = __ ( 'This SLA has been affected by the following planned downtimes' );
$table_planned_downtimes -> head = array ();
$table_planned_downtimes -> head [ 0 ] = __ ( 'Name' );
$table_planned_downtimes -> head [ 1 ] = __ ( 'Description' );
$table_planned_downtimes -> head [ 2 ] = __ ( 'Execution' );
$table_planned_downtimes -> head [ 3 ] = __ ( 'Dates' );
$table_planned_downtimes -> headstyle = array ();
$table_planned_downtimes -> style = array ();
$table_planned_downtimes -> cellstyle = array ();
$table_planned_downtimes -> data = array ();
foreach ( $planned_downtimes as $planned_downtime ) {
$data = array ();
$data [ 0 ] = $planned_downtime [ 'name' ];
$data [ 1 ] = $planned_downtime [ 'description' ];
$data [ 2 ] = ucfirst ( $planned_downtime [ 'type_execution' ]);
$data [ 3 ] = " " ;
switch ( $planned_downtime [ 'type_execution' ]) {
case 'once' :
$data [ 3 ] = date ( " Y-m-d H:i " , $planned_downtime [ 'date_from' ]) .
" " . __ ( 'to' ) . " " .
date ( " Y-m-d H:i " , $planned_downtime [ 'date_to' ]);
break ;
case 'periodically' :
switch ( $planned_downtime [ 'type_periodicity' ]) {
case 'weekly' :
$data [ 3 ] = __ ( 'Weekly:' );
$data [ 3 ] .= " " ;
if ( $planned_downtime [ 'monday' ]) {
$data [ 3 ] .= __ ( 'Mon' );
$data [ 3 ] .= " " ;
}
if ( $planned_downtime [ 'tuesday' ]) {
$data [ 3 ] .= __ ( 'Tue' );
$data [ 3 ] .= " " ;
}
if ( $planned_downtime [ 'wednesday' ]) {
$data [ 3 ] .= __ ( 'Wed' );
$data [ 3 ] .= " " ;
}
if ( $planned_downtime [ 'thursday' ]) {
$data [ 3 ] .= __ ( 'Thu' );
$data [ 3 ] .= " " ;
}
if ( $planned_downtime [ 'friday' ]) {
$data [ 3 ] .= __ ( 'Fri' );
$data [ 3 ] .= " " ;
}
if ( $planned_downtime [ 'saturday' ]) {
$data [ 3 ] .= __ ( 'Sat' );
$data [ 3 ] .= " " ;
}
if ( $planned_downtime [ 'sunday' ]) {
$data [ 3 ] .= __ ( 'Sun' );
$data [ 3 ] .= " " ;
}
$data [ 3 ] .= " ( " . $planned_downtime [ 'periodically_time_from' ];
$data [ 3 ] .= " - " . $planned_downtime [ 'periodically_time_to' ] . " ) " ;
break ;
case 'monthly' :
$data [ 3 ] = __ ( 'Monthly:' ) . " " ;
$data [ 3 ] .= __ ( 'From day' ) . " " . $planned_downtime [ 'periodically_day_from' ];
$data [ 3 ] .= " " . strtolower ( __ ( 'To day' )) . " " ;
$data [ 3 ] .= $planned_downtime [ 'periodically_day_to' ];
$data [ 3 ] .= " ( " . $planned_downtime [ 'periodically_time_from' ];
$data [ 3 ] .= " - " . $planned_downtime [ 'periodically_time_to' ] . " ) " ;
break ;
}
break ;
}
if ( ! $malformed_planned_downtimes_empty && isset ( $malformed_planned_downtimes [ $planned_downtime [ 'id' ]])) {
$next_row_num = count ( $table_planned_downtimes -> data );
$table_planned_downtimes -> cellstyle [ $next_row_num ][ 0 ] = 'color: red' ;
$table_planned_downtimes -> cellstyle [ $next_row_num ][ 1 ] = 'color: red' ;
$table_planned_downtimes -> cellstyle [ $next_row_num ][ 2 ] = 'color: red' ;
$table_planned_downtimes -> cellstyle [ $next_row_num ][ 3 ] = 'color: red' ;
if ( ! $downtime_malformed )
$downtime_malformed = true ;
}
$table_planned_downtimes -> data [] = $data ;
}
}
}
if ( $downtime_malformed ) {
$info_malformed = ui_print_error_message (
__ ( 'This item is affected by a malformed planned downtime' ) . " . " .
__ ( 'Go to the planned downtimes section to solve this' ) . " . " , '' , true );
$data = array ();
$data [ 0 ] = $info_malformed ;
$data [ 0 ] .= html_print_table ( $table_planned_downtimes , true );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
array_push ( $table -> data , $data );
break ;
}
$data_graph = array ();
// $data_horin_graph = array();
$data_graph [ __ ( 'Inside limits' )] = 0 ;
$data_graph [ __ ( 'Out of limits' )] = 0 ;
$data_graph [ __ ( 'On the edge' )] = 0 ;
$data_graph [ __ ( 'Unknown' )] = 0 ;
// $data_horin_graph[__('Inside limits')] = 0;
// $data_horin_graph[__('Out of limits')] = 0;
// $data_horin_graph[__('On the edge')] = 0;
// $data_horin_graph[__('Unknown')] = 0;
$data_graph [ __ ( 'Plannified downtime' )] = 0 ;
$urlImage = ui_get_full_url ( false , true , false , false );
$sla_failed = false ;
$total_SLA = 0 ;
$total_result_SLA = 'ok' ;
$sla_showed = array ();
$sla_showed_values = array ();
foreach ( $slas as $sla ) {
$server_name = $sla [ 'server_name' ];
//Metaconsole connection
if (( $config [ 'metaconsole' ] == 1 ) && $server_name != '' && defined ( 'METACONSOLE' )) {
$connection = metaconsole_get_connection ( $server_name );
if ( ! metaconsole_load_external_db ( $connection )) {
//ui_print_error_message ("Error connecting to ".$server_name);
continue ;
}
}
if ( modules_is_disable_agent ( $sla [ 'id_agent_module' ])) {
continue ;
}
//Get the sla_value in % and store it on $sla_value
$sla_value = reporting_get_agentmodule_sla (
$sla [ 'id_agent_module' ], $content [ 'period' ],
$sla [ 'sla_min' ], $sla [ 'sla_max' ],
$report [ " datetime " ], $content ,
$content [ 'time_from' ], $content [ 'time_to' ]);
if (( $config [ 'metaconsole' ] == 1 ) && defined ( 'METACONSOLE' )) {
//Restore db connection
metaconsole_restore_db ();
}
//Do not show right modules if 'only_display_wrong' is active
if ( $content [ 'only_display_wrong' ] == 1 &&
$sla_value >= $sla [ 'sla_limit' ]) {
continue ;
}
$sla_showed [] = $sla ;
$sla_showed_values [] = $sla_value ;
}
// SLA items sorted descending ()
if ( $content [ 'top_n' ] == 2 ) {
arsort ( $sla_showed_values );
}
// SLA items sorted ascending
else if ( $content [ 'top_n' ] == 1 ) {
asort ( $sla_showed_values );
}
// Slice graphs calculation
if ( $show_graphs && ! empty ( $slas )) {
$tableslice -> width = '99%' ;
$tableslice -> style [ 0 ] = 'text-align: right' ;
$tableslice -> data = array ();
}
foreach ( $sla_showed_values as $k => $sla_value ) {
$sla = $sla_showed [ $k ];
$server_name = $sla [ 'server_name' ];
//Metaconsole connection
if (( $config [ 'metaconsole' ] == 1 ) && ( $server_name != '' ) && defined ( 'METACONSOLE' )) {
$connection = metaconsole_get_connection ( $server_name );
if ( metaconsole_connect ( $connection ) != NOERR ) {
//ui_print_error_message ("Error connecting to ".$server_name);
continue ;
}
}
//Fill the array data_graph for the pie graph
// if ($sla_value === false) {
// $data_graph[__('Unknown')]++;
// // $data_horin_graph[__('Unknown')]['g']++;
// }
// # Fix : 100% accurance is 'inside limits' although 10% was not overrun
// else if (($sla_value == 100 && $sla_value >= $sla['sla_limit']) ) {
// $data_graph[__('Inside limits')]++;
// $data_horin_graph[__('Inside limits')]['g']++;
// }
// else if ($sla_value <= ($sla['sla_limit']+10) && $sla_value >= ($sla['sla_limit']-10)) {
// $data_graph[__('On the edge')]++;
// $data_horin_graph[__('On the edge')]['g']++;
// }
// else if ($sla_value > ($sla['sla_limit']+10)) {
// $data_graph[__('Inside limits')]++;
// $data_horin_graph[__('Inside limits')]['g']++;
// }
// else if ($sla_value < ($sla['sla_limit']-10)) {
// $data_graph[__('Out of limits')]++;
// $data_horin_graph[__('Out of limits')]['g']++;
// }
// if ($sla_value === false) {
// if ($total_result_SLA != 'fail')
// $total_result_SLA = 'unknown';
// }
// else if ($sla_value < $sla['sla_limit']) {
// $total_result_SLA = 'fail';
// }
$total_SLA += $sla_value ;
if ( $show_table ) {
$data = array ();
$data [ 0 ] = modules_get_agentmodule_agent_name ( $sla [ 'id_agent_module' ]);
$data [ 1 ] = modules_get_agentmodule_name ( $sla [ 'id_agent_module' ]);
$data [ 2 ] = $sla [ 'sla_max' ] . '/' ;
$data [ 2 ] .= $sla [ 'sla_min' ];
$data [ 3 ] = $sla [ 'sla_limit' ] . '%' ;
if ( $sla_value === false ) {
$data [ 4 ] = '<span style="font: bold ' . $sizem . 'em Arial, Sans-serif; color: ' . COL_UNKNOWN . ';">' ;
$data [ 5 ] = '<span style="font: bold ' . $sizem . 'em Arial, Sans-serif; color: ' . COL_UNKNOWN . ';">' . __ ( 'Unknown' ) . '</span>' ;
// $data[6] = html_print_image('images/status_sets/default/severity_maintenance.png',true,array('title'=>__('Unknown')));
}
else {
$data [ 4 ] = '' ;
$data [ 5 ] = '' ;
// $data[6] = '';
if ( $sla_value >= $sla [ 'sla_limit' ]) {
$data [ 4 ] = '<span style="font: bold ' . $sizem . 'em Arial, Sans-serif; color: ' . COL_NORMAL . ';">' ;
$data [ 5 ] = '<span style="font: bold ' . $sizem . 'em Arial, Sans-serif; color: ' . COL_NORMAL . ';">' . __ ( 'OK' ) . '</span>' ;
}
else {
$sla_failed = true ;
$data [ 4 ] = '<span style="font: bold ' . $sizem . 'em Arial, Sans-serif; color: ' . COL_CRITICAL . ';">' ;
$data [ 5 ] = '<span style="font: bold ' . $sizem . 'em Arial, Sans-serif; color: ' . COL_CRITICAL . ';">' . __ ( 'Fail' ) . '</span>' ;
}
// Print icon with status including edge
# Fix : 100% accurance is 'inside limits' although 10% was not overrun
// if (($sla_value == 100 && $sla_value >= $sla['sla_limit']) || ($sla_value > ($sla['sla_limit'] + $edge_interval))) {
// $data[6] = html_print_image('images/status_sets/default/severity_normal.png',true,array('title'=>__('Inside limits')));
// }
// elseif (($sla_value <= $sla['sla_limit'] + $edge_interval)
// && ($sla_value >= $sla['sla_limit'] - $edge_interval)) {
// $data[6] = html_print_image('images/status_sets/default/severity_warning.png',true,array('title'=>__('On the edge')));
// }
// else {
// $data[6] = html_print_image('images/status_sets/default/severity_critical.png',true,array('title'=>__('Out of limits')));
// }
$data [ 4 ] .= format_numeric ( $sla_value , 2 ) . " % " ;
}
$data [ 4 ] .= " </span> " ;
array_push ( $table1 -> data , $data );
}
// Slice graphs calculation
if ( $show_graphs ) {
$dataslice = array ();
$dataslice [ 0 ] = modules_get_agentmodule_agent_name ( $sla [ 'id_agent_module' ]);
$dataslice [ 0 ] .= " <br> " ;
$dataslice [ 0 ] .= modules_get_agentmodule_name ( $sla [ 'id_agent_module' ]);
$dataslice [ 1 ] = graph_sla_slicebar ( $sla [ 'id_agent_module' ], $content [ 'period' ],
$sla [ 'sla_min' ], $sla [ 'sla_max' ], $report [ 'datetime' ], $content , $content [ 'time_from' ],
$content [ 'time_to' ], 650 , 25 , $urlImage , 1 , false , false );
array_push ( $tableslice -> data , $dataslice );
}
if ( $config [ 'metaconsole' ] == 1 && defined ( 'METACONSOLE' )) {
//Restore db connection
metaconsole_restore_db ();
}
}
if ( $show_table ) {
$data = array ();
$data [ 0 ] = html_print_table ( $table1 , true );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
array_push ( $table -> data , $data );
}
// $data = array();
// $data_pie_graph = json_encode ($data_graph);
if ( $show_graphs && ! empty ( $slas )) {
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
$data = array ();
$data [ 0 ] = html_print_table ( $tableslice , true );
array_push ( $table -> data , $data );
}
if ( ! empty ( $table_planned_downtimes )) {
$data = array ();
$data [ 0 ] = html_print_table ( $table_planned_downtimes , true );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
array_push ( $table -> data , $data );
}
break ;
case 6 :
case 'monitor_report' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Monitor report' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( $agent_name , 'agent_medium' , false ) .
' <br> ' . ui_print_truncate_text ( $module_name , 'module_medium' , false ));
//RUNNING
$next_row = 1 ;
// Put description at the end of the module (if exists)
if ( $content [ " description " ] != " " ) {
$table -> colspan [ 1 ][ 0 ] = 3 ;
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
$next_row ++ ;
}
$data = array ();
2015-12-31 13:37:56 +01:00
$module = modules_get_agentmodule ( $content [ 'id_agent_module' ]);
$monitor_value = reporting_get_agentmodule_monitor ( $content [ 'id_agent_module' ], $content [ 'period' ],
$module [ 'min_critical' ], $module [ 'max_critical' ], $report [ " datetime " ]);
2015-03-18 17:51:47 +01:00
if ( $monitor_value === false ) {
$monitor_value = __ ( 'Unknown' );
}
else {
$monitor_value = format_numeric ( $monitor_value );
}
$table -> colspan [ $next_row ][ 0 ] = 2 ;
$data [ 0 ] = '<p style="font: bold ' . $sizem . 'em Arial, Sans-serif; color: ' . COL_NORMAL . ';">' ;
$data [ 0 ] .= html_print_image ( " images/module_ok.png " , true ) . ' ' . __ ( 'OK' ) . ': ' . $monitor_value . ' %</p>' ;
if ( $monitor_value !== __ ( 'Unknown' )) {
$monitor_value = format_numeric ( 100 - $monitor_value , 2 ) ;
}
$data [ 1 ] = '<p style="font: bold ' . $sizem . 'em Arial, Sans-serif; color: ' . COL_CRITICAL . ';">' ;
$data [ 1 ] .= html_print_image ( " images/module_critical.png " , true ) . ' ' . __ ( 'Not OK' ) . ': ' . $monitor_value . ' % ' . '</p>' ;
array_push ( $table -> data , $data );
break ;
case 7 :
case 'avg_value' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Avg. Value' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( $agent_name , 'agent_medium' , false ) .
' <br> ' . ui_print_truncate_text ( $module_name , 'module_medium' , false ));
//RUNNING
// Put description at the end of the module (if exists)
$table -> colspan [ 1 ][ 0 ] = 3 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$unit = db_get_value ( 'unit' , 'tagente_modulo' , 'id_agente_modulo' , $content [ 'id_agent_module' ]);
$value = reporting_get_agentmodule_data_average ( $content [ 'id_agent_module' ], $content [ 'period' ], $report [ " datetime " ]);
if ( $value === false ) {
$value = __ ( 'Unknown' );
}
else {
$value = format_for_graph ( $value , 2 ) . " " . $unit ;
}
$data [ 0 ] = '<p style="font: bold ' . $sizem . 'em Arial, Sans-serif; color: #000000;">' . $value . '</p>' ;
array_push ( $table -> data , $data );
break ;
case 8 :
case 'max_value' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Max. Value' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( $agent_name , 'agent_medium' , false ) .
' <br> ' . ui_print_truncate_text ( $module_name , 'module_medium' , false ));
//RUNNING
// Put description at the end of the module (if exists)
$table -> colspan [ 1 ][ 0 ] = 3 ;
if ( $content [ " description " ] != " " ){
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$value = reporting_get_agentmodule_data_max ( $content [ 'id_agent_module' ], $content [ 'period' ], $report [ " datetime " ]);
$unit = db_get_value ( 'unit' , 'tagente_modulo' , 'id_agente_modulo' , $content [ 'id_agent_module' ]);
$data [ 0 ] = '<p style="font: bold ' . $sizem . 'em Arial, Sans-serif; color: #000000;">' .
format_for_graph ( $value , 2 ) . " " . $unit . '</p>' ;
array_push ( $table -> data , $data );
break ;
case 9 :
case 'min_value' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Min. Value' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( $agent_name , 'agent_medium' , false ) .
2015-08-18 13:02:07 +02:00
' <br> ' . ui_print_truncate_text ( $module_name , 'module_medium' , false ));
2015-03-18 17:51:47 +01:00
//RUNNING
// Put description at the end of the module (if exists)
$table -> colspan [ 1 ][ 0 ] = 3 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$value = reporting_get_agentmodule_data_min ( $content [ 'id_agent_module' ], $content [ 'period' ], $report [ " datetime " ]);
$unit = db_get_value ( 'unit' , 'tagente_modulo' , 'id_agente_modulo' , $content [ 'id_agent_module' ]);
if ( $value === false ) {
$value = __ ( 'Unknown' );
}
else {
$value = format_for_graph ( $value , 2 ) . " " . $unit ;
}
$data [ 0 ] = '<p style="font: bold ' . $sizem . 'em Arial, Sans-serif; color: #000000;">' . $value . '</p>' ;
array_push ( $table -> data , $data );
break ;
case 10 :
case 'sumatory' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Summatory' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( $agent_name , 'agent_medium' , false ) .
' <br> ' . ui_print_truncate_text ( $module_name , 'module_medium' , false ));
//RUNNING
$next_row = 1 ;
// Put description at the end of the module (if exists)
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
}
$table -> colspan [ $next_row ][ 0 ] = 3 ;
2015-08-18 13:02:07 +02:00
2015-03-18 17:51:47 +01:00
$data = array ();
$unit = db_get_value ( 'unit' , 'tagente_modulo' , 'id_agente_modulo' , $content [ 'id_agent_module' ]);
$value = reporting_get_agentmodule_data_sum ( $content [ 'id_agent_module' ], $content [ 'period' ], $report [ " datetime " ]);
if ( $value === false ) {
$value = __ ( 'Unknown' );
}
else {
$value = format_for_graph ( $value , 2 ) . " " . $unit ;
}
$data [ 0 ] = '<p style="font: bold ' . $sizem . 'em Arial, Sans-serif; color: #000000;">' . $value . '</p>' ;
array_push ( $table -> data , $data );
break ;
case 'agent_detailed_event' :
case 'event_report_agent' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Agent detailed event' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( agents_get_name ( $content [ 'id_agent' ]), 'agent_medium' , false ));
$style = json_decode ( io_safe_output ( $content [ 'style' ]), true );
$filter_event_no_validated = $style [ 'filter_event_no_validated' ];
$filter_event_validated = $style [ 'filter_event_validated' ];
$filter_event_critical = $style [ 'filter_event_critical' ];
$filter_event_warning = $style [ 'filter_event_warning' ];
$event_graph_by_agent = $style [ 'event_graph_by_agent' ];
$event_graph_by_user_validator = $style [ 'event_graph_by_user_validator' ];
$event_graph_by_criticity = $style [ 'event_graph_by_criticity' ];
$event_graph_validated_vs_unvalidated = $style [ 'event_graph_validated_vs_unvalidated' ];
$next_row = 1 ;
// Put description at the end of the module (if exists)
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
}
$data = array ();
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
$data [ 0 ] = reporting_get_agents_detailed_event (
$content [ 'id_agent' ], $content [ 'period' ],
$report [ " datetime " ], true ,
$filter_event_validated ,
$filter_event_critical ,
$filter_event_warning ,
$filter_event_no_validated );
2015-08-18 13:02:07 +02:00
if ( ! empty ( $data [ 0 ])) {
2015-03-18 17:51:47 +01:00
array_push ( $table -> data , $data );
2015-08-18 13:02:07 +02:00
2015-03-18 17:51:47 +01:00
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
}
if ( $event_graph_by_user_validator ) {
$data_graph = reporting_get_count_events_validated_by_user (
array ( 'id_agent' => $content [ 'id_agent' ]), $content [ 'period' ],
$report [ " datetime " ],
$filter_event_validated ,
$filter_event_critical ,
$filter_event_warning ,
$filter_event_no_validated );
$table_event_graph = null ;
$table_event_graph -> width = '100%' ;
$table_event_graph -> style [ 0 ] = 'text-align: center;' ;
$table_event_graph -> head [ 0 ] = __ ( 'Events validated by user' );
$table_event_graph -> data [ 0 ][ 0 ] = pie3d_graph (
false , $data_graph , 500 , 150 , __ ( " other " ), " " ,
ui_get_full_url ( false , false , false , false ) . " /images/logo_vertical_water.png " ,
$config [ 'fontpath' ], $config [ 'font_size' ]);
$data [ 0 ] = html_print_table ( $table_event_graph , true );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
array_push ( $table -> data , $data );
}
if ( $event_graph_by_criticity ) {
$data_graph = reporting_get_count_events_by_criticity (
array ( 'id_agent' => $content [ 'id_agent' ]), $content [ 'period' ],
$report [ " datetime " ],
$filter_event_validated ,
$filter_event_critical ,
$filter_event_warning ,
$filter_event_no_validated );
$colors = get_criticity_pie_colors ( $data_graph );
$table_event_graph = null ;
$table_event_graph -> width = '100%' ;
$table_event_graph -> style [ 0 ] = 'text-align: center;' ;
$table_event_graph -> head [ 0 ] = __ ( 'Events by criticity' );
$table_event_graph -> data [ 0 ][ 0 ] = pie3d_graph (
false , $data_graph , 500 , 150 , __ ( " other " ), " " ,
ui_get_full_url ( false , false , false , false ) . " /images/logo_vertical_water.png " ,
$config [ 'fontpath' ], $config [ 'font_size' ], 1 , false , $colors );
$data [ 0 ] = html_print_table ( $table_event_graph , true );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
array_push ( $table -> data , $data );
}
if ( $event_graph_validated_vs_unvalidated ) {
$data_graph = reporting_get_count_events_validated (
array ( 'id_agent' => $content [ 'id_agent' ]), $content [ 'period' ],
$report [ " datetime " ],
$filter_event_validated ,
$filter_event_critical ,
$filter_event_warning ,
$filter_event_no_validated );
$table_event_graph = null ;
$table_event_graph -> width = '100%' ;
$table_event_graph -> style [ 0 ] = 'text-align: center;' ;
$table_event_graph -> head [ 0 ] = __ ( 'Amount events validated' );
$table_event_graph -> data [ 0 ][ 0 ] = pie3d_graph (
false , $data_graph , 500 , 150 , __ ( " other " ), " " ,
ui_get_full_url ( false , false , false , false ) . " /images/logo_vertical_water.png " ,
$config [ 'fontpath' ], $config [ 'font_size' ]);
$data [ 0 ] = html_print_table ( $table_event_graph , true );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
array_push ( $table -> data , $data );
}
break ;
case 'text' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Text' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
" " , " " );
$next_row = 1 ;
if ( $content [ " description " ] != " " ){
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
}
$data [ 0 ] = html_entity_decode ( $content [ 'text' ]);
array_push ( $table -> data , $data );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
break ;
case 'sql' :
if ( empty ( $item_title )) {
$item_title = __ ( 'SQL' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
" " , " " );
$next_row = 1 ;
// Put description at the end of the module (if exists)
if ( $content [ " description " ] != " " ){
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
}
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$table2 -> class = 'databox' ;
$table2 -> width = '100%' ;
//Create the head
$table2 -> head = array ();
if ( $content [ 'header_definition' ] != '' ) {
$table2 -> head = explode ( '|' , $content [ 'header_definition' ]);
}
if ( $content [ 'treport_custom_sql_id' ] != 0 ) {
switch ( $config [ " dbtype " ]) {
case " mysql " :
$sql = io_safe_output ( db_get_value_filter ( '`sql`' , 'treport_custom_sql' , array ( 'id' => $content [ 'treport_custom_sql_id' ])));
break ;
case " postgresql " :
$sql = io_safe_output ( db_get_value_filter ( '"sql"' , 'treport_custom_sql' , array ( 'id' => $content [ 'treport_custom_sql_id' ])));
break ;
case " oracle " :
$sql = io_safe_output ( db_get_value_filter ( 'sql' , 'treport_custom_sql' , array ( 'id' => $content [ 'treport_custom_sql_id' ])));
break ;
}
}
else {
$sql = io_safe_output ( $content [ 'external_source' ]);
}
// Do a security check on SQL coming from the user
$sql = check_sql ( $sql );
if ( $sql != '' ) {
$result = db_get_all_rows_sql ( $sql );
if ( $result === false ) {
$result = array ();
}
if ( isset ( $result [ 0 ])) {
if ( count ( $result [ 0 ]) > count ( $table2 -> head )) {
$table2 -> head = array_pad ( $table2 -> head , count ( $result [ 0 ]), ' ' );
}
}
$table2 -> data = array ();
foreach ( $result as $row ) {
array_push ( $table2 -> data , $row );
}
}
else {
$table2 -> data = array ();
array_push ( $table2 -> data , array ( " id_user " => " <div class='nf'>[ " . __ ( 'Illegal query' ) . " ]<br> " .
__ ( 'Due security restrictions, there are some tokens or words you cannot use' ) .
': *, delete, drop, alter, modify, union, password, pass, insert ' . __ ( 'or' ) . " update.</div> " ));
}
$cellContent = html_print_table ( $table2 , true );
array_push ( $table -> data , array ( $cellContent ));
break ;
case 'sql_graph_vbar' :
case 'sql_graph_hbar' :
case 'sql_graph_pie' :
$sizgraph_h = 300 ;
if ( $content [ 'type' ] == 'sql_graph_vbar' ) {
$sizgraph_h = 400 ;
}
if ( $config [ 'metaconsole' ] == 1 && defined ( 'METACONSOLE' ))
metaconsole_restore_db ();
if ( empty ( $item_title )) {
$item_title = __ ( 'User defined graph' ) . " ( " . __ ( $content [ " type " ]) . " ) " ;
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
" " , " " );
// Put description at the end of the module (if exists)
$next_row = 1 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
}
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$table2 -> class = 'databox' ;
$table2 -> width = '100%' ;
//Create the head
$table2 -> head = array ();
if ( $content [ 'header_definition' ] != '' ) {
$table2 -> head = explode ( '|' , $content [ 'header_definition' ]);
}
$data = array ();
$data [ 0 ] = graph_custom_sql_graph (
$content [ " id_rc " ],
$sizgraph_w ,
$sizgraph_h ,
$content [ " type " ],
true ,
ui_get_full_url ( false , false , false , false ));
array_push ( $table -> data , $data );
break ;
case 'event_report_group' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Group detailed event' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( groups_get_name ( $content [ 'id_group' ], true ), 60 , false ));
$next_row = 1 ;
// Put description at the end of the module (if exists)
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
}
$data = array ();
$style = json_decode ( io_safe_output ( $content [ 'style' ]), true );
$filter_event_no_validated = $style [ 'filter_event_no_validated' ];
$filter_event_validated = $style [ 'filter_event_validated' ];
$filter_event_critical = $style [ 'filter_event_critical' ];
$filter_event_warning = $style [ 'filter_event_warning' ];
$event_graph_by_agent = $style [ 'event_graph_by_agent' ];
$event_graph_by_user_validator = $style [ 'event_graph_by_user_validator' ];
$event_graph_by_criticity = $style [ 'event_graph_by_criticity' ];
$event_graph_validated_vs_unvalidated = $style [ 'event_graph_validated_vs_unvalidated' ];
$data [ 0 ] = reporting_get_group_detailed_event (
$content [ 'id_group' ], $content [ 'period' ],
$report [ " datetime " ], true , true ,
$filter_event_validated ,
$filter_event_critical ,
$filter_event_warning ,
$filter_event_no_validated );
2015-08-18 13:02:07 +02:00
if ( ! empty ( $data [ 0 ])) {
2015-03-18 17:51:47 +01:00
array_push ( $table -> data , $data );
2015-08-18 13:02:07 +02:00
2015-03-18 17:51:47 +01:00
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
}
if ( $event_graph_by_agent ) {
$data_graph = reporting_get_count_events_by_agent (
$content [ 'id_group' ], $content [ 'period' ],
$report [ " datetime " ],
$filter_event_validated ,
$filter_event_critical ,
$filter_event_warning ,
$filter_event_no_validated );
$table_event_graph = null ;
$table_event_graph -> width = '100%' ;
$table_event_graph -> style [ 0 ] = 'text-align: center;' ;
$table_event_graph -> head [ 0 ] = __ ( 'Events by agent' );
$table_event_graph -> data [ 0 ][ 0 ] = pie3d_graph (
false , $data_graph , 500 , 150 , __ ( " other " ), " " ,
ui_get_full_url ( false , false , false , false ) . " /images/logo_vertical_water.png " ,
$config [ 'fontpath' ], $config [ 'font_size' ]);
$data [ 0 ] = html_print_table ( $table_event_graph , true );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
array_push ( $table -> data , $data );
}
if ( $event_graph_by_user_validator ) {
$data_graph = reporting_get_count_events_validated_by_user (
array ( 'id_group' => $content [ 'id_group' ]), $content [ 'period' ],
$report [ " datetime " ],
$filter_event_validated ,
$filter_event_critical ,
$filter_event_warning ,
$filter_event_no_validated );
$table_event_graph = null ;
$table_event_graph -> head [ 0 ] = __ ( 'Events validated by user' );
$table_event_graph -> width = '100%' ;
$table_event_graph -> style [ 0 ] = 'text-align: center;' ;
$table_event_graph -> data [ 0 ][ 0 ] = pie3d_graph (
false , $data_graph , 500 , 150 , __ ( " other " ), " " ,
ui_get_full_url ( false , false , false , false ) . " /images/logo_vertical_water.png " ,
$config [ 'fontpath' ], $config [ 'font_size' ]);
$data [ 0 ] = html_print_table ( $table_event_graph , true );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
array_push ( $table -> data , $data );
}
if ( $event_graph_by_criticity ) {
$data_graph = reporting_get_count_events_by_criticity (
array ( 'id_group' => $content [ 'id_group' ]), $content [ 'period' ],
$report [ " datetime " ],
$filter_event_validated ,
$filter_event_critical ,
$filter_event_warning ,
$filter_event_no_validated );
$colors = get_criticity_pie_colors ( $data_graph );
$table_event_graph = null ;
$table_event_graph -> head [ 0 ] = __ ( 'Events by criticity' );
$table_event_graph -> width = '100%' ;
$table_event_graph -> style [ 0 ] = 'text-align: center;' ;
$table_event_graph -> data [ 0 ][ 0 ] = pie3d_graph (
false , $data_graph , 500 , 150 , __ ( " other " ), " " ,
ui_get_full_url ( false , false , false , false ) . " /images/logo_vertical_water.png " ,
$config [ 'fontpath' ], $config [ 'font_size' ], 1 , false , $colors );
$data [ 0 ] = html_print_table ( $table_event_graph , true );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
array_push ( $table -> data , $data );
}
if ( $event_graph_validated_vs_unvalidated ) {
$data_graph = reporting_get_count_events_validated (
array ( 'id_group' => $content [ 'id_group' ]), $content [ 'period' ],
$report [ " datetime " ],
$filter_event_validated ,
$filter_event_critical ,
$filter_event_warning ,
$filter_event_no_validated );
$table_event_graph = null ;
$table_event_graph -> head [ 0 ] = __ ( 'Amount events validated' );
$table_event_graph -> width = '100%' ;
$table_event_graph -> style [ 0 ] = 'text-align: center;' ;
$table_event_graph -> data [ 0 ][ 0 ] = pie3d_graph (
false , $data_graph , 500 , 150 , __ ( " other " ), " " ,
ui_get_full_url ( false , false , false , false ) . " /images/logo_vertical_water.png " ,
$config [ 'fontpath' ], $config [ 'font_size' ]);
$data [ 0 ] = html_print_table ( $table_event_graph , true );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
array_push ( $table -> data , $data );
}
break ;
case 'event_report_module' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Module detailed event' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( $agent_name , 'agent_medium' , false ) .
' <br> ' . ui_print_truncate_text ( $module_name , 'module_medium' , false ));
// Put description at the end of the module (if exists)
$table -> colspan [ 1 ][ 0 ] = 3 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$data [ 0 ] = reporting_get_module_detailed_event ( $content [ 'id_agent_module' ], $content [ 'period' ], $report [ " datetime " ], true );
array_push ( $table -> data , $data );
break ;
case 'alert_report_group' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Alert report group' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text (
groups_get_name ( $content [ 'id_group' ], true ),
60 , false ));
// Put description at the end of the module (if exists)
$table -> colspan [ 1 ][ 0 ] = 3 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$data [ 0 ] = reporting_alert_reporting_group (
$content [ 'id_group' ], $content [ 'period' ],
$report [ " datetime " ], true );
array_push ( $table -> data , $data );
break ;
case 'alert_report_module' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Alert report module' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( $agent_name , 'agent_medium' , false ) .
' <br> ' . ui_print_truncate_text ( $module_name , 'module_medium' , false ));
// Put description at the end of the module (if exists)
$table -> colspan [ 1 ][ 0 ] = 3 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$data [ 0 ] = reporting_alert_reporting_module ( $content [ 'id_agent_module' ], $content [ 'period' ], $report [ " datetime " ], true );
array_push ( $table -> data , $data );
break ;
case 'alert_report_agent' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Alert report agent' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( $agent_name , 'agent_medium' , false ));
// Put description at the end of the module (if exists)
$table -> colspan [ 1 ][ 0 ] = 3 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$data [ 0 ] = reporting_alert_reporting_agent ( $content [ 'id_agent' ], $content [ 'period' ], $report [ " datetime " ], true );
array_push ( $table -> data , $data );
break ;
case 'url' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Import text from URL' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( $content [ " external_source " ], 'description' , false ));
$next_row = 1 ;
// Put description at the end of the module (if exists)
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
}
$data = array ();
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$data [ 0 ] = '<iframe id="item_' . $content [ 'id_rc' ] . '" src ="' . $content [ " external_source " ] . '" width="100%" height="100%"></iframe>' ;
// TODO: make this dynamic and get the height if the iframe to resize this item
$data [ 0 ] .= ' < script >
$ ( document ) . ready ( function () {
$ ( " #item_' . $content['id_rc'] . ' " ) . height ( 500 );
}); </ script > ' ;
array_push ( $table -> data , $data );
break ;
case 'database_serialized' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Serialize data' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
2015-08-18 13:02:07 +02:00
ui_print_truncate_text ( $agent_name , 'agent_medium' , false ) .
' <br> ' . ui_print_truncate_text ( $module_name , 'module_medium' , false ));
2015-03-18 17:51:47 +01:00
// Put description at the end of the module (if exists)
$next_row = 1 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
$table -> colspan [ $next_row ][ 0 ] = 3 ;
array_push ( $table -> data , $data_desc );
$next_row ++ ;
}
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$table2 -> class = 'databox alternate' ;
$table2 -> width = '100%' ;
//Create the head
$table2 -> head = array ();
if ( $content [ 'header_definition' ] != '' ) {
$table2 -> head = explode ( '|' , $content [ 'header_definition' ]);
}
else {
$table2 -> head [] = __ ( 'Data' );
}
array_unshift ( $table2 -> head , __ ( 'Date' ));
$datelimit = $report [ " datetime " ] - $content [ 'period' ];
$search_in_history_db = db_search_in_history_db ( $datelimit );
// This query gets information from the default and the historic database
$result = db_get_all_rows_sql ( ' SELECT *
FROM tagente_datos
WHERE id_agente_modulo = ' . $content[' id_agent_module '] . '
AND utimestamp > ' . $datelimit . '
AND utimestamp <= ' . $report [ " datetime " ], $search_in_history_db );
// Adds string data if there is no numeric data
if (( count ( $result ) < 0 ) or ( ! $result )) {
// This query gets information from the default and the historic database
$result = db_get_all_rows_sql ( ' SELECT *
FROM tagente_datos_string
WHERE id_agente_modulo = ' . $content[' id_agent_module '] . '
AND utimestamp > ' . $datelimit . '
AND utimestamp <= ' . $report [ " datetime " ], $search_in_history_db );
}
if ( $result === false ) {
$result = array ();
}
$table2 -> data = array ();
foreach ( $result as $row ) {
$date = date ( $config [ " date_format " ], $row [ 'utimestamp' ]);
$serialized = $row [ 'datos' ];
if ( empty ( $content [ 'line_separator' ]) ||
empty ( $serialized )) {
$rowsUnserialize = array ( $row [ 'datos' ]);
}
else {
$rowsUnserialize = explode ( $content [ 'line_separator' ], $serialized );
}
foreach ( $rowsUnserialize as $rowUnser ) {
if ( empty ( $content [ 'column_separator' ])) {
$columnsUnserialize = array ( $rowUnser );
}
else {
$columnsUnserialize = explode ( $content [ 'column_separator' ], $rowUnser );
}
array_unshift ( $columnsUnserialize , $date );
array_push ( $table2 -> data , $columnsUnserialize );
}
}
$cellContent = html_print_table ( $table2 , true );
array_push ( $table -> data , array ( $cellContent ));
break ;
case 'TTRT' :
if ( empty ( $item_title )) {
$item_title = __ ( 'TTRT' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( $agent_name , 'agent_medium' , false ) .
' <br> ' . ui_print_truncate_text ( $module_name , 'module_medium' , false ));
// Put description at the end of the module (if exists)
$table -> colspan [ 1 ][ 0 ] = 3 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$ttr = reporting_get_agentmodule_ttr ( $content [ 'id_agent_module' ], $content [ 'period' ], $report [ " datetime " ]);
if ( $ttr === false ) {
$ttr = __ ( 'Unknown' );
}
else if ( $ttr != 0 ) {
$ttr = human_time_description_raw ( $ttr );
}
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$data [ 0 ] = '<p style="font: bold ' . $sizem . 'em Arial, Sans-serif; color: #000000;">' . $ttr . '</p>' ;
array_push ( $table -> data , $data );
break ;
case 'TTO' :
if ( empty ( $item_title )) {
$item_title = __ ( 'TTO' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( $agent_name , 'agent_medium' , false ) .
' <br> ' . ui_print_truncate_text ( $module_name , 'module_medium' , false ));
// Put description at the end of the module (if exists)
$table -> colspan [ 1 ][ 0 ] = 3 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$tto = reporting_get_agentmodule_tto ( $content [ 'id_agent_module' ],
$content [ 'period' ], $report [ " datetime " ]);
if ( $tto === false ) {
$tto = __ ( 'Unknown' );
}
else if ( $tto != 0 ) {
$tto = human_time_description_raw ( $tto );
}
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$data [ 0 ] = '<p style="font: bold ' . $sizem . 'em Arial, Sans-serif; color: #000000;">' . $tto . '</p>' ;
array_push ( $table -> data , $data );
break ;
case 'MTBF' :
if ( empty ( $item_title )) {
$item_title = __ ( 'MTBF' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( $agent_name , 'agent_medium' , false ) .
' <br> ' . ui_print_truncate_text ( $module_name , 'module_medium' , false ));
// Put description at the end of the module (if exists)
$table -> colspan [ 1 ][ 0 ] = 3 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$mtbf = reporting_get_agentmodule_mtbf ( $content [ 'id_agent_module' ], $content [ 'period' ], $report [ " datetime " ]);
if ( $mtbf === false ) {
$mtbf = __ ( 'Unknown' );
}
else if ( $mtbf != 0 ) {
$mtbf = human_time_description_raw ( $mtbf );
}
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$data [ 0 ] = '<p style="font: bold ' . $sizem . 'em Arial, Sans-serif; color: #000000;">' . $mtbf . '</p>' ;
array_push ( $table -> data , $data );
break ;
case 'MTTR' :
if ( empty ( $item_title )) {
$item_title = __ ( 'MTTR' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
ui_print_truncate_text ( $agent_name , 'agent_medium' , false ) .
' <br> ' . ui_print_truncate_text ( $module_name , 'module_medium' , false ));
// Put description at the end of the module (if exists)
$table -> colspan [ 1 ][ 0 ] = 3 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$mttr = reporting_get_agentmodule_mttr ( $content [ 'id_agent_module' ], $content [ 'period' ], $report [ " datetime " ]);
if ( $mttr === false ) {
$mttr = __ ( 'Unknown' );
}
else if ( $mttr != 0 ) {
$mttr = human_time_description_raw ( $mttr );
}
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$data [ 0 ] = '<p style="font: bold ' . $sizem . 'em Arial, Sans-serif; color: #000000;">' . $mttr . '</p>' ;
array_push ( $table -> data , $data );
break ;
case 'group_report' :
$group_name = groups_get_name ( $content [ 'id_group' ], true );
$group_stats = reporting_get_group_stats ( $content [ 'id_group' ]);
// Get events of the last 8 hours
$events = events_get_group_events ( $content [ 'id_group' ], 28800 , $report [ 'datetime' ]);
if ( $events === false ) {
$events = array ();
}
if ( empty ( $item_title )) {
$item_title = __ ( 'Group report' ) . ': "' . $group_name . '"' ;
}
reporting_header_content ( $mini , $content , $report , $table , $item_title );
$table -> colspan [ 1 ][ 0 ] = 3 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
$table -> colspan [ 2 ][ 0 ] = 3 ;
$table -> data [ 2 ][ 0 ] =
" <table width='100%'>
< tr >
< td ></ td >
< td colspan = '3' >< div class = 'cellBold cellCenter' > " .
__ ( 'Total' ) . " </div></td>
< td colspan = '3' >< div class = 'cellBold cellCenter' > " .
__ ( 'Unknown' ) . " </div></td>
</ tr >
< tr >
< td >< div class = 'cellBold cellCenter' > " .
__ ( 'Agents' ) . " </div></td>
< td colspan = '3' >< div class = 'cellBold cellCenter cellWhite cellBorder1 cellBig' > " .
$group_stats [ 'total_agents' ] . " </div></td>
< td colspan = '3' >< div class = 'cellBold cellCenter cellUnknown cellBorder1 cellBig' > " .
$group_stats [ 'agents_unknown' ] . " </div></td>
</ tr >
< tr >
< td ></ td >
< td >< div class = 'cellBold cellCenter' > " .
__ ( 'Total' ) . " </div></td>
< td >< div class = 'cellBold cellCenter' > " .
__ ( 'Normal' ) . " </div></td>
< td >< div class = 'cellBold cellCenter' > " .
__ ( 'Critical' ) . " </div></td>
< td >< div class = 'cellBold cellCenter' > " .
__ ( 'Warning' ) . " </div></td>
< td >< div class = 'cellBold cellCenter' > " .
__ ( 'Unknown' ) . " </div></td>
< td >< div class = 'cellBold cellCenter' > " .
__ ( 'Not init' ) . " </div></td>
</ tr >
< tr >
< td >< div class = 'cellBold cellCenter' > " .
__ ( 'Monitors' ) . " </div></td>
< td >< div class = 'cellBold cellCenter cellWhite cellBorder1 cellBig' > " .
$group_stats [ 'monitor_checks' ] . " </div></td>
< td >< div class = 'cellBold cellCenter cellNormal cellBorder1 cellBig' > " .
$group_stats [ 'monitor_ok' ] . " </div></td>
< td >< div class = 'cellBold cellCenter cellCritical cellBorder1 cellBig' > " .
$group_stats [ 'monitor_critical' ] . " </div></td>
< td >< div class = 'cellBold cellCenter cellWarning cellBorder1 cellBig' > " .
$group_stats [ 'monitor_warning' ] . " </div></td>
< td >< div class = 'cellBold cellCenter cellUnknown cellBorder1 cellBig' > " .
$group_stats [ 'monitor_unknown' ] . " </div></td>
< td >< div class = 'cellBold cellCenter cellNotInit cellBorder1 cellBig' > " .
$group_stats [ 'monitor_not_init' ] . " </div></td>
</ tr >
< tr >
< td ></ td >
< td colspan = '3' >< div class = 'cellBold cellCenter' > " .
__ ( 'Defined' ) . " </div></td>
< td colspan = '3' >< div class = 'cellBold cellCenter' > " .
__ ( 'Fired' ) . " </div></td>
</ tr >
< tr >
< td >< div class = 'cellBold cellCenter' > " .
__ ( 'Alerts' ) . " </div></td>
< td colspan = '3' >< div class = 'cellBold cellCenter cellWhite cellBorder1 cellBig' > " .
$group_stats [ 'monitor_alerts' ] . " </div></td>
< td colspan = '3' >< div class = 'cellBold cellCenter cellAlert cellBorder1 cellBig' > " .
$group_stats [ 'monitor_alerts_fired' ] . " </div></td>
</ tr >
< tr >
< td ></ td >
< td colspan = '6' >< div class = 'cellBold cellCenter' > " .
__ ( 'Last 8 hours' ) . " </div></td>
</ tr >
< tr >
< td >< div class = 'cellBold cellCenter' > " .
__ ( 'Events' ) . " </div></td>
< td colspan = '6' >< div class = 'cellBold cellCenter cellWhite cellBorder1 cellBig' > " .
count ( $events ) . " </div></td>
</ tr >
</ table > " ;
break ;
case 'network_interfaces_report' :
reporting_network_interfaces_table ( $content , $report , $mini , $item_title , $table );
break ;
case 'general' :
if ( empty ( $item_title )) {
$item_title = __ ( 'General' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title );
$group_by_agent = $content [ 'group_by_agent' ];
$order_uptodown = $content [ 'order_uptodown' ];
$table -> style [ 1 ] = 'text-align: right' ;
// Put description at the end of the module (if exists)
$table -> colspan [ 1 ][ 0 ] = 3 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
switch ( $group_by_agent ) {
//0 means not group by agent
case 0 :
$sql = sprintf ( "
SELECT id_agent_module ,
server_name , operation
FROM treport_content_item
WHERE id_report_content = % d " ,
$content [ 'id_rc' ]);
$generals = db_process_sql ( $sql );
if ( $generals === false ) {
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$data [ 0 ] =
__ ( 'There are no Agent/Modules defined' );
array_push ( $table -> data , $data );
break ;
}
$table1 -> width = '99%' ;
$table1 -> data = array ();
$table1 -> head = array ();
$table1 -> head [ 0 ] = __ ( 'Agent' );
$table1 -> head [ 1 ] = __ ( 'Module' );
if ( $content [ 'period' ] != 0 ) {
$table1 -> head [ 2 ] = __ ( 'Operation' );
}
$table1 -> head [ 3 ] = __ ( 'Value' );
$table1 -> style [ 0 ] = 'text-align: left' ;
$table1 -> style [ 1 ] = 'text-align: left' ;
$table1 -> style [ 2 ] = 'text-align: left' ;
$table1 -> style [ 3 ] = 'text-align: left' ;
$data_res = array ();
foreach ( $generals as $key => $row ) {
//Metaconsole connection
$server_name = $row [ 'server_name' ];
if (( $config [ 'metaconsole' ] == 1 ) && $server_name != '' && defined ( 'METACONSOLE' )) {
$connection = metaconsole_get_connection ( $server_name );
if ( metaconsole_load_external_db ( $connection ) != NOERR ) {
//ui_print_error_message ("Error connecting to ".$server_name);
continue ;
}
}
if ( modules_is_disable_agent ( $row [ 'id_agent_module' ])) {
continue ;
}
$mod_name = modules_get_agentmodule_name ( $row [ 'id_agent_module' ]);
$ag_name = modules_get_agentmodule_agent_name ( $row [ 'id_agent_module' ]);
if ( $content [ 'period' ] == 0 ) {
$data_res [ $key ] =
modules_get_last_value ( $row [ 'id_agent_module' ]);
}
else {
switch ( $row [ 'operation' ]) {
case 'sum' :
$data_res [ $key ] =
reporting_get_agentmodule_data_sum (
$row [ 'id_agent_module' ], $content [ 'period' ], $report [ " datetime " ]);
break ;
case 'max' :
$data_res [ $key ] =
reporting_get_agentmodule_data_max (
$row [ 'id_agent_module' ], $content [ 'period' ]);
break ;
case 'min' :
$data_res [ $key ] =
reporting_get_agentmodule_data_min (
$row [ 'id_agent_module' ], $content [ 'period' ]);
break ;
case 'avg' :
default :
$data_res [ $key ] =
reporting_get_agentmodule_data_average (
$row [ 'id_agent_module' ], $content [ 'period' ]);
break ;
}
}
$unit = db_get_value ( 'unit' , 'tagente_modulo' ,
'id_agente_modulo' ,
$row [ 'id_agent_module' ]);
$id_agent_module [ $key ] = $row [ 'id_agent_module' ];
$agent_name [ $key ] = $ag_name ;
$module_name [ $key ] = $mod_name ;
$units [ $key ] = $unit ;
$operations [ $key ] = $row [ 'operation' ];
//Restore dbconnection
if (( $config [ 'metaconsole' ] == 1 ) && $server_name != '' && defined ( 'METACONSOLE' )) {
metaconsole_restore_db ();
}
}
//Order by data descending, ascending or without order
if (( $order_uptodown == 0 ) || ( $order_uptodown == 1 )
|| ( $order_uptodown == 2 )) {
switch ( $order_uptodown ) {
//Descending
case 1 :
array_multisort ( $data_res , SORT_DESC ,
$agent_name , SORT_ASC , $module_name ,
SORT_ASC , $id_agent_module ,
SORT_ASC , $operations , SORT_ASC );
break ;
//Ascending
case 2 :
array_multisort ( $data_res , SORT_ASC ,
$agent_name , SORT_ASC , $module_name ,
SORT_ASC , $id_agent_module ,
SORT_ASC , $operations , SORT_ASC );
break ;
}
$i = 0 ;
foreach ( $data_res as $d ) {
$data = array ();
$data [ 0 ] = $agent_name [ $i ];
$data [ 1 ] = $module_name [ $i ];
if ( $content [ 'period' ] != 0 ) {
switch ( $operations [ $i ]) {
case 'sum' :
$op = __ ( 'Summatory' );
break ;
case 'min' :
$op = __ ( 'Minimal' );
break ;
case 'max' :
$op = __ ( 'Maximun' );
break ;
case 'avg' :
default :
$op = __ ( 'Rate' );
break ;
}
$data [ 2 ] = $op ;
}
if ( $d === false ) {
$data [ 3 ] = '--' ;
}
else {
if ( ! is_numeric ( $d )) {
$data [ 3 ] = $d ;
}
else {
$data [ 3 ] = format_for_graph ( $d , 2 ) . " " .
$units [ $i ];
}
}
array_push ( $table1 -> data , $data );
$i ++ ;
}
}
//Order by agent name
elseif ( $order_uptodown == 3 ) {
array_multisort ( $agent_name , SORT_ASC ,
$data_res , SORT_ASC , $module_name , SORT_ASC ,
$id_agent_module , SORT_ASC , $operations ,
SORT_ASC );
$i = 0 ;
foreach ( $agent_name as $a ) {
$data = array ();
$data [ 0 ] = $agent_name [ $i ];
$data [ 1 ] = $module_name [ $i ];
switch ( $operations [ $i ]) {
case 'sum' :
$op = __ ( 'Summatory' );
break ;
case 'min' :
$op = __ ( 'Minimal' );
break ;
case 'max' :
$op = __ ( 'Maximun' );
break ;
case 'avg' :
default :
$op = __ ( 'Average' );
break ;
}
$data [ 2 ] = $op ;
if ( $data_res [ $i ] === false ) {
$data [ 3 ] = '--' ;
}
else {
$data [ 3 ] =
format_for_graph ( $data_res [ $i ], 2 )
. " " . $units [ $i ];
}
array_push ( $table1 -> data , $data );
$i ++ ;
}
}
$table -> colspan [ 2 ][ 0 ] = 3 ;
$data = array ();
$data [ 0 ] = html_print_table ( $table1 , true );
array_push ( $table -> data , $data );
break ;
//1 means group by agent
case 1 :
//Get the data
$sql_data = sprintf ( " SELECT id_agent_module,
server_name , operation
FROM treport_content_item
WHERE id_report_content = % d " ,
$content [ 'id_rc' ]);
$generals = db_process_sql ( $sql_data );
if ( $generals === false ) {
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$data [ 0 ] = __ ( 'There are no Agent/Modules defined' );
array_push ( $table -> data , $data );
break ;
}
$list_modules = array ();
$data = array ();
foreach ( $generals as $g ) {
//Metaconsole connection
$server_name = $g [ 'server_name' ];
if (( $config [ 'metaconsole' ] == 1 ) && $server_name != '' && defined ( 'METACONSOLE' )) {
$connection = metaconsole_get_connection ( $server_name );
if ( metaconsole_load_external_db ( $connection ) != NOERR ) {
//ui_print_error_message ("Error connecting to ".$server_name);
continue ;
}
}
if ( modules_is_disable_agent ( $g [ 'id_agent_module' ])) {
continue ;
}
$agent_name = modules_get_agentmodule_agent_name ( $g [ 'id_agent_module' ]);
$module_name = modules_get_agentmodule_name ( $g [ 'id_agent_module' ]);
$unit = db_get_value ( 'unit' , 'tagente_modulo' , 'id_agente_modulo' , $g [ 'id_agent_module' ]);
if ( $content [ 'period' ] == 0 ) {
$value_res =
modules_get_last_value ( $g [ 'id_agent_module' ]);
}
else {
switch ( $g [ 'operation' ]) {
case 'sum' :
$value_res = reporting_get_agentmodule_data_sum ( $g [ 'id_agent_module' ], $content [ 'period' ], $report [ " datetime " ]);
break ;
case 'max' :
$value_res = reporting_get_agentmodule_data_max ( $g [ 'id_agent_module' ], $content [ 'period' ]);
break ;
case 'min' :
$value_res = reporting_get_agentmodule_data_min ( $g [ 'id_agent_module' ], $content [ 'period' ]);
break ;
case 'avg' :
default :
$value_res = reporting_get_agentmodule_data_average ( $g [ 'id_agent_module' ], $content [ 'period' ]);
break ;
}
}
if ( $value_res === false ) {
$data [ $agent_name ][ $module_name ] = '--' ;
}
else {
if ( ! is_numeric ( $value_res )) {
$data [ $agent_name ][ $module_name ] = $value_res ;
}
else {
$data [ $agent_name ][ $module_name ] = format_for_graph ( $value_res , 2 ) . " " . $unit ;
}
}
// Save the modules
$list_modules [ $module_name ] = null ;
// Restore dbconnection
if (( $config [ 'metaconsole' ] == 1 ) && $server_name != '' && defined ( 'METACONSOLE' )) {
metaconsole_restore_db ();
}
}
$table2 -> width = '99%' ;
$table2 -> data = array ();
$table2 -> head = array ();
$table2 -> head [ 0 ] = __ ( 'Agent' );
$table2 -> style [ 0 ] = 'text-align: left' ;
$i = 1 ;
foreach ( array_keys ( $list_modules ) as $module ) {
$table2 -> head [ $i ] =
ui_print_truncate_text ( $module , 20 , false );
$table2 -> style [ $i ] = 'text-align: center' ;
$i ++ ;
}
foreach ( $data as $agent_name => $agent ) {
$row = array ();
$row [] = $agent_name ;
foreach ( array_keys ( $list_modules ) as $module_name ) {
if ( ! isset ( $agent [ $module_name ])) {
$row [] = '--' ;
}
else {
$row [] = $agent [ $module_name ];
}
}
$table2 -> data [] = $row ;
}
$data = array ();
$data [ 0 ] = html_print_table ( $table2 , true );
array_push ( $table -> data , $data );
break ;
}
if ( $content [ 'show_resume' ] && count ( $generals ) > 0 ) {
//Get the first valid value and assign it to $min & $max
$min = false ;
$min_name_agent_module = '' ;
$max_name_agent_module = '' ;
$min_unit = '' ;
$max_unit = '' ;
$i = 0 ;
do {
//Metaconsole connection
$server_name = $generals [ $i ][ 'server_name' ];
if (( $config [ 'metaconsole' ] == 1 ) && $server_name != '' && defined ( 'METACONSOLE' )) {
$connection = metaconsole_get_connection ( $server_name );
if ( metaconsole_load_external_db ( $connection ) != NOERR ) {
//ui_print_error_message ("Error connecting to ".$server_name);
continue ;
}
}
if ( $content [ 'period' ] == 0 ) {
$min =
modules_get_last_value ( $generals [ $i ][ 'id_agent_module' ]);
}
else {
switch ( $generals [ $i ][ 'operation' ]) {
case 'sum' :
$min = reporting_get_agentmodule_data_sum ( $generals [ $i ][ 'id_agent_module' ], $content [ 'period' ], $report [ " datetime " ]);
break ;
case 'max' :
$min = reporting_get_agentmodule_data_max ( $generals [ $i ][ 'id_agent_module' ], $content [ 'period' ]);
break ;
case 'min' :
$min = reporting_get_agentmodule_data_min ( $generals [ $i ][ 'id_agent_module' ], $content [ 'period' ]);
break ;
case 'avg' :
default :
$min = reporting_get_agentmodule_data_average ( $generals [ $i ][ 'id_agent_module' ], $content [ 'period' ]);
break ;
}
}
$i ++ ;
$min_name_agent_module =
modules_get_agentmodule_name ( $generals [ $i ][ 'id_agent_module' ]) .
" - " .
modules_get_agentmodule_agent_name ( $generals [ $i ][ 'id_agent_module' ]) .
" ( " . $generals [ $i ][ 'operation' ] . " ) " ;
$min_unit = db_get_value ( 'unit' , 'tagente_modulo' , 'id_agente_modulo' , $generals [ $i ][ 'id_agent_module' ]);
//Restore dbconnection
if (( $config [ 'metaconsole' ] == 1 ) && $server_name != '' && defined ( 'METACONSOLE' )) {
metaconsole_restore_db ();
}
}
while ( $min === false && $i < count ( $generals ));
$max = $min ;
$max_name_agent_module = $min_name_agent_module ;
$max_unit = $min_unit ;
$avg = 0 ;
$length = 0 ;
if ( $generals === false ) {
$generals = array ();
}
foreach ( $generals as $g ) {
//Metaconsole connection
$server_name = $g [ 'server_name' ];
if (( $config [ 'metaconsole' ] == 1 ) && $server_name != '' && defined ( 'METACONSOLE' )) {
$connection = metaconsole_get_connection ( $server_name );
if ( metaconsole_load_external_db ( $connection ) != NOERR ) {
//ui_print_error_message ("Error connecting to ".$server_name);
continue ;
}
}
if ( $content [ 'period' ] == 0 ) {
$value =
modules_get_last_value ( $g [ 'id_agent_module' ]);
}
else {
switch ( $g [ 'operation' ]) {
case 'sum' :
$value = reporting_get_agentmodule_data_sum ( $g [ 'id_agent_module' ], $content [ 'period' ], $report [ " datetime " ]);
break ;
case 'max' :
$value = reporting_get_agentmodule_data_max ( $g [ 'id_agent_module' ], $content [ 'period' ]);
break ;
case 'min' :
$value = reporting_get_agentmodule_data_min ( $g [ 'id_agent_module' ], $content [ 'period' ]);
break ;
case 'avg' :
default :
$value = reporting_get_agentmodule_data_average ( $g [ 'id_agent_module' ], $content [ 'period' ]);
break ;
}
}
if ( $value !== false ) {
if ( $value > $max ) {
$max = $value ;
$max_name_agent_module =
modules_get_agentmodule_name ( $g [ 'id_agent_module' ]) .
" - " .
modules_get_agentmodule_agent_name ( $g [ 'id_agent_module' ]) .
" ( " . $g [ 'operation' ] . " ) " ;
$max_unit = db_get_value ( 'unit' , 'tagente_modulo' , 'id_agente_modulo' , $g [ 'id_agent_module' ]);
}
if ( $value < $min ) {
$min = $value ;
$min_name_agent_module =
modules_get_agentmodule_name ( $g [ 'id_agent_module' ]) .
" - " .
modules_get_agentmodule_agent_name ( $g [ 'id_agent_module' ]) .
" ( " . $g [ 'operation' ] . " ) " ;
$min_unit = db_get_value ( 'unit' , 'tagente_modulo' , 'id_agente_modulo' , $g [ 'id_agent_module' ]);
}
$avg += $value ;
$length ++ ;
}
//Restore dbconnection
if (( $config [ 'metaconsole' ] == 1 )
&& $server_name != ''
&& defined ( 'METACONSOLE' )) {
metaconsole_restore_db ();
}
}
if ( $length == 0 ) {
$avg = 0 ;
}
else {
$avg = $avg / $length ;
}
unset ( $table_summary );
$table_summary -> width = '99%' ;
$table_summary -> data = array ();
$table_summary -> head = array ();
$table_summary -> head_colspan = array ();
$table_summary -> align = array ();
$table_summary -> align [ 0 ] = 'left' ;
$table_summary -> align [ 1 ] = 'left' ;
$table_summary -> align [ 2 ] = 'left' ;
$table_summary -> align [ 3 ] = 'left' ;
$table_summary -> align [ 4 ] = 'left' ;
$table_summary -> head_colspan [ 0 ] = 2 ;
$table_summary -> head [ 0 ] = __ ( 'Min Value' );
$table_summary -> head [ 1 ] = __ ( 'Average Value' );
$table_summary -> head_colspan [ 2 ] = 2 ;
$table_summary -> head [ 2 ] = __ ( 'Max Value' );
$table_summary -> data [ 0 ][ 0 ] = $min_name_agent_module ;
$table_summary -> data [ 0 ][ 1 ] = format_for_graph ( $min , 2 ) . ' ' . $min_unit ;
$table_summary -> data [ 0 ][ 2 ] = format_for_graph ( $avg , 2 );
$table_summary -> data [ 0 ][ 3 ] = $max_name_agent_module ;
$table_summary -> data [ 0 ][ 4 ] = format_for_graph ( $max , 2 ) . ' ' . $max_unit ;
$table -> colspan [ 3 ][ 0 ] = 3 ;
array_push ( $table -> data ,
array ( '<b>' . __ ( 'Summary' ) . '</b>' ));
$table -> colspan [ 4 ][ 0 ] = 3 ;
array_push ( $table -> data ,
array ( html_print_table ( $table_summary , true )));
}
break ;
case 'top_n' :
$top_n = $content [ 'top_n' ];
switch ( $top_n ) {
case REPORT_TOP_N_MAX :
$type_top_n = __ ( 'Max' );
break ;
case REPORT_TOP_N_MIN :
$type_top_n = __ ( 'Min' );
break ;
case REPORT_TOP_N_AVG :
default :
//If nothing is selected then it will be shown the average data
$type_top_n = __ ( 'Avg' );
break ;
}
if ( empty ( $item_title )) {
$item_title = 'Top ' . $content [ 'top_n_value' ] . '<br>' . $type_top_n ;
}
reporting_header_content ( $mini , $content , $report , $table , $item_title );
$order_uptodown = $content [ 'order_uptodown' ];
$top_n_value = $content [ 'top_n_value' ];
$show_graph = $content [ 'show_graph' ];
$table -> style [ 0 ] = 'padding: 8px 5px 8px 5px;' ;
$table -> style [ 1 ] = 'text-align: right' ;
// Put description at the end of the module (if exists)
$table -> colspan [ 1 ][ 0 ] = 3 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
//Get all the related data
$sql = sprintf ( " SELECT id_agent_module, server_name
FROM treport_content_item
WHERE id_report_content = % d " , $content['id_rc'] );
$tops = db_process_sql ( $sql );
if ( $tops === false ) {
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$data [ 0 ] = __ ( 'There are no Agent/Modules defined' );
array_push ( $table -> data , $data );
break ;
}
if ( $show_graph != REPORT_TOP_N_ONLY_GRAPHS ) {
$table1 -> width = '99%' ;
$table1 -> data = array ();
$table1 -> head = array ();
$table1 -> head [ 0 ] = __ ( 'Agent' );
$table1 -> head [ 1 ] = __ ( 'Module' );
$table1 -> head [ 2 ] = __ ( 'Value' );
$table1 -> style [ 0 ] = 'text-align: left' ;
$table1 -> style [ 1 ] = 'text-align: left' ;
$table1 -> style [ 2 ] = 'text-align: left' ;
}
//Get data of all agents (before to slide to N values)
$data_top = array ();
foreach ( $tops as $key => $row ) {
//Metaconsole connection
$server_name = $row [ 'server_name' ];
if (( $config [ 'metaconsole' ] == 1 ) && $server_name != '' && defined ( 'METACONSOLE' )) {
$connection = metaconsole_get_connection ( $server_name );
if ( metaconsole_load_external_db ( $connection ) != NOERR ) {
//ui_print_error_message ("Error connecting to ".$server_name);
continue ;
}
}
$ag_name = modules_get_agentmodule_agent_name ( $row [ 'id_agent_module' ]);
$mod_name = modules_get_agentmodule_name ( $row [ 'id_agent_module' ]);
$unit = db_get_value ( 'unit' , 'tagente_modulo' ,
'id_agente_modulo' , $row [ 'id_agent_module' ]);
switch ( $top_n ) {
case REPORT_TOP_N_MAX :
$value = reporting_get_agentmodule_data_max ( $row [ 'id_agent_module' ], $content [ 'period' ]);
break ;
case REPORT_TOP_N_MIN :
$value = reporting_get_agentmodule_data_min ( $row [ 'id_agent_module' ], $content [ 'period' ]);
break ;
case REPORT_TOP_N_AVG :
default :
//If nothing is selected then it will be shown the average data
$value = reporting_get_agentmodule_data_average ( $row [ 'id_agent_module' ], $content [ 'period' ]);
break ;
}
//If the returned value from modules_get_agentmodule_data_max/min/avg is false it won't be stored.
if ( $value !== false ) {
$data_top [ $key ] = $value ;
$id_agent_module [ $key ] = $row [ 'id_agent_module' ];
$agent_name [ $key ] = $ag_name ;
$module_name [ $key ] = $mod_name ;
$units [ $key ] = $unit ;
}
//Restore dbconnection
if (( $config [ 'metaconsole' ] == 1 ) && $server_name != '' && defined ( 'METACONSOLE' )) {
metaconsole_restore_db ();
}
}
if ( empty ( $data_top )) {
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$data [ 0 ] = __ ( 'Insuficient data' );
array_push ( $table -> data , $data );
break ;
}
//Order to show.
switch ( $order_uptodown ) {
//Descending
case 1 :
array_multisort ( $data_top , SORT_DESC , $agent_name , SORT_ASC , $module_name , SORT_ASC , $id_agent_module , SORT_ASC , $units , SORT_ASC );
break ;
//Ascending
case 2 :
array_multisort ( $data_top , SORT_ASC , $agent_name , SORT_ASC , $module_name , SORT_ASC , $id_agent_module , SORT_ASC , $units , SORT_ASC );
break ;
//By agent name or without selection
case 0 :
case 3 :
array_multisort ( $agent_name , SORT_ASC , $data_top , SORT_ASC , $module_name , SORT_ASC , $id_agent_module , SORT_ASC , $units , SORT_ASC );
break ;
}
array_splice ( $data_top , $top_n_value );
array_splice ( $agent_name , $top_n_value );
array_splice ( $module_name , $top_n_value );
array_splice ( $id_agent_module , $top_n_value );
array_splice ( $units , $top_n_value );
$data_top_values = array ();
$data_top_values [ 'data_top' ] = $data_top ;
$data_top_values [ 'agent_name' ] = $agent_name ;
$data_top_values [ 'module_name' ] = $module_name ;
$data_top_values [ 'id_agent_module' ] = $id_agent_module ;
$data_top_values [ 'units' ] = $units ;
// Define truncate size depends the graph width
$truncate_size = $sizgraph_w / ( 4 * ( $config [ 'font_size' ])) - 1 ;
if ( $order_uptodown == 1 || $order_uptodown == 2 ) {
$i = 0 ;
$data_pie_graph = array ();
$data_hbar = array ();
foreach ( $data_top as $dt ) {
$item_name = '' ;
$item_name =
ui_print_truncate_text ( $agent_name [ $i ], $truncate_size , false , true , false , " ... " ) .
' - ' .
ui_print_truncate_text ( $module_name [ $i ], $truncate_size , false , true , false , " ... " );
//Dirty hack, maybe I am going to apply a job in Apple
//https://www.imperialviolet.org/2014/02/22/applebug.html
$item_name_key_pie = $item_name ;
$exist_key = true ;
while ( $exist_key ) {
if ( isset ( $data_pie_graph [ $item_name_key_pie ])) {
$item_name_key_pie .= ' ' ;
}
else {
$exist_key = false ;
}
}
$item_name_key_hbar = $item_name ;
$exist_key = true ;
while ( $exist_key ) {
if ( isset ( $data_hbar [ $item_name_key_hbar ])) {
$item_name_key_hbar = ' ' . $item_name_key_hbar ;
}
else {
$exist_key = false ;
}
}
$data_hbar [ $item_name ][ 'g' ] = $dt ;
$data_pie_graph [ $item_name ] = $dt ;
if ( $show_graph == 0 || $show_graph == 1 ) {
$data = array ();
$data [ 0 ] = $agent_name [ $i ];
$data [ 1 ] = $module_name [ $i ];
$data [ 2 ] = format_for_graph ( $dt , 2 ) . " " . $units [ $i ];
array_push ( $table1 -> data , $data );
}
$i ++ ;
if ( $i >= $top_n_value ) break ;
}
}
else if ( $order_uptodown == 0 || $order_uptodown == 3 ) {
$i = 0 ;
$data_pie_graph = array ();
$data_hbar = array ();
foreach ( $agent_name as $an ) {
$item_name = '' ;
$item_name =
ui_print_truncate_text ( $agent_name [ $i ],
$truncate_size , false , true , false , " ... " ) .
' - ' .
ui_print_truncate_text ( $module_name [ $i ],
$truncate_size , false , true , false , " ... " );
//Dirty hack, maybe I am going to apply a job in Apple
//https://www.imperialviolet.org/2014/02/22/applebug.html
$item_name_key_pie = $item_name ;
$exist_key = true ;
while ( $exist_key ) {
if ( isset ( $data_pie_graph [ $item_name_key_pie ])) {
$item_name_key_pie .= ' ' ;
}
else {
$exist_key = false ;
}
}
$item_name_key_hbar = $item_name ;
$exist_key = true ;
while ( $exist_key ) {
if ( isset ( $data_hbar [ $item_name_key_hbar ])) {
$item_name_key_hbar = ' ' . $item_name_key_hbar ;
}
else {
$exist_key = false ;
}
}
$data_pie_graph [ $item_name ] = $data_top [ $i ];
$data_hbar [ $item_name ][ 'g' ] = $data_top [ $i ];
if ( $show_graph == 0 || $show_graph == 1 ) {
$data = array ();
$data [ 0 ] = $an ;
$data [ 1 ] = $module_name [ $i ];
$data [ 2 ] = format_for_graph ( $data_top [ $i ], 2 ) . " " . $units [ $i ];
array_push ( $table1 -> data , $data );
}
$i ++ ;
if ( $i >= $top_n_value ) break ;
}
}
unset ( $data );
$table -> colspan [ 2 ][ 0 ] = 3 ;
$table -> style [ 2 ] = 'text-align:center' ;
if ( $show_graph == 0 || $show_graph == 1 ) {
$data = array ();
$data [ 0 ] = html_print_table ( $table1 , true );
array_push ( $table -> data , $data );
}
$table -> colspan [ 3 ][ 0 ] = 3 ;
$data = array ();
if ( $show_graph != REPORT_TOP_N_ONLY_TABLE ) {
$data [ 0 ] = pie3d_graph ( false , $data_pie_graph ,
$sizgraph_w , $sizgraph_h , __ ( " other " ),
ui_get_full_url ( false , true , false , false ) . '/' ,
ui_get_full_url ( false , false , false , false ) . " /images/logo_vertical_water.png " ,
$config [ 'fontpath' ], $config [ 'font_size' ]);
array_push ( $table -> data , $data );
//Display bars graph
$table -> colspan [ 4 ][ 0 ] = 3 ;
$table -> style [ 0 ] .= 'text-align:center' ;
$height = count ( $data_pie_graph ) * 20 + 35 ;
$data = array ();
$data [ 0 ] = hbar_graph ( false , $data_hbar , $sizgraph_w ,
$height , array (), array (), " " , " " , true ,
ui_get_full_url ( false , true , false , false ) . '/' , $config [ 'homedir' ] . " /images/logo_vertical_water.png " , $config [ 'fontpath' ], $config [ 'font_size' ], true , 1 , true );
array_push ( $table -> data , $data );
}
if ( $content [ 'show_resume' ] && count ( $data_top_values ) > 0 ) {
//Get the very first not null value
$i = 0 ;
do {
$min = $data_top_values [ 'data_top' ][ $i ];
$i ++ ;
}
while ( $min === false && $i < count ( $data_top_values ));
$max = $min ;
$avg = 0 ;
$i = 0 ;
foreach ( $data_top_values [ 'data_top' ] as $key => $dtv ) {
if ( $dtv < $min ) $min = $dtv ;
if ( $dtv > $max ) $max = $dtv ;
$avg += $dtv ;
$i ++ ;
}
$avg = $avg / $i ;
unset ( $table_summary );
$table_summary -> width = '99%' ;
$table_summary -> data = array ();
$table_summary -> head = array ();
$table_summary -> head [ 0 ] = __ ( 'Min Value' );
$table_summary -> head [ 1 ] = __ ( 'Average Value' );
$table_summary -> head [ 2 ] = __ ( 'Max Value' );
$table_summary -> data [ 0 ][ 0 ] = format_for_graph ( $min , 2 );
$table_summary -> data [ 0 ][ 1 ] = format_for_graph ( $avg , 2 );
$table_summary -> data [ 0 ][ 2 ] = format_for_graph ( $max , 2 );
$table -> colspan [ 5 ][ 0 ] = 3 ;
array_push ( $table -> data , array ( '<b>' . __ ( 'Summary' ) . '</b>' ));
$table -> colspan [ 6 ][ 0 ] = 3 ;
array_push ( $table -> data , array ( html_print_table ( $table_summary , true )));
}
break ;
case 'exception' :
$order_uptodown = $content [ 'order_uptodown' ];
$exception_condition = $content [ 'exception_condition' ];
$exception_condition_value = $content [ 'exception_condition_value' ];
$show_graph = $content [ 'show_graph' ];
$table -> style [ 1 ] = 'text-align: right' ;
switch ( $exception_condition ) {
case REPORT_EXCEPTION_CONDITION_EVERYTHING :
$title_exeption = __ ( 'Exception - Everything' );
break ;
case REPORT_EXCEPTION_CONDITION_GE :
$title_exeption =
sprintf ( __ ( 'Exception - Modules over or equal to %s' ),
$exception_condition_value );
break ;
case REPORT_EXCEPTION_CONDITION_LE :
$title_exeption =
sprintf ( __ ( 'Exception - Modules under or equal to %s' ),
$exception_condition_value );
break ;
case REPORT_EXCEPTION_CONDITION_L :
$title_exeption =
sprintf ( __ ( 'Exception - Modules under %s' ),
$exception_condition_value );
break ;
case REPORT_EXCEPTION_CONDITION_G :
$title_exeption =
sprintf ( __ ( 'Exception - Modules over %s' ),
$exception_condition_value );
break ;
case REPORT_EXCEPTION_CONDITION_E :
$title_exeption =
sprintf ( __ ( 'Exception - Equal to %s' ),
$exception_condition_value );
break ;
case REPORT_EXCEPTION_CONDITION_NE :
$title_exeption =
sprintf ( __ ( 'Exception - Not equal to %s' ),
$exception_condition_value );
break ;
case REPORT_EXCEPTION_CONDITION_OK :
$title_exeption =
__ ( 'Exception - Modules at normal status' );
break ;
case REPORT_EXCEPTION_CONDITION_NOT_OK :
$title_exeption =
__ ( 'Exception - Modules at critical or warning status' );
break ;
}
if ( empty ( $item_title )) {
$item_title = $title_exeption ;
}
reporting_header_content ( $mini , $content , $report , $table , $item_title );
// Put description at the end of the module (if exists)
$table -> colspan [ 1 ][ 0 ] = 3 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
//Get all the related data
$sql = sprintf ( "
SELECT id_agent_module , server_name , operation
FROM treport_content_item
WHERE id_report_content = % d " , $content['id_rc'] );
$exceptions = db_process_sql ( $sql );
if ( $exceptions === false ) {
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$data [ 0 ] = __ ( 'There are no Agent/Modules defined' );
array_push ( $table -> data , $data );
break ;
}
if ( $show_graph == 0 || $show_graph == 1 ) {
$table1 -> width = '99%' ;
$table1 -> data = array ();
$table1 -> head = array ();
$table1 -> head [ 0 ] = __ ( 'Agent' );
$table1 -> head [ 1 ] = __ ( 'Module' );
$table1 -> head [ 2 ] = __ ( 'Operation' );
$table1 -> head [ 3 ] = __ ( 'Value' );
$table1 -> style [ 0 ] = 'text-align: left' ;
$table1 -> style [ 1 ] = 'text-align: left' ;
$table1 -> style [ 2 ] = 'text-align: left' ;
$table1 -> style [ 3 ] = 'text-align: left' ;
}
//Get the very first not null value
$i = 0 ;
do {
//Metaconsole connection
$server_name = $exceptions [ $i ][ 'server_name' ];
if (( $config [ 'metaconsole' ] == 1 ) && $server_name != '' && defined ( 'METACONSOLE' )) {
$connection = metaconsole_get_connection ( $server_name );
if ( metaconsole_load_external_db ( $connection ) != NOERR ) {
//ui_print_error_message ("Error connecting to ".$server_name);
continue ;
}
}
if ( $content [ 'period' ] == 0 ) {
$min =
modules_get_last_value ( $exceptions [ $i ][ 'id_agent_module' ]);
}
else {
switch ( $exceptions [ $i ][ 'operation' ]) {
case 'avg' :
$min = reporting_get_agentmodule_data_average (
$exceptions [ $i ][ 'id_agent_module' ], $content [ 'period' ]);
break ;
case 'max' :
$min = reporting_get_agentmodule_data_max (
$exceptions [ $i ][ 'id_agent_module' ], $content [ 'period' ]);
break ;
case 'min' :
$min = reporting_get_agentmodule_data_min (
$exceptions [ $i ][ 'id_agent_module' ], $content [ 'period' ]);
break ;
}
}
$i ++ ;
//Restore dbconnection
if (( $config [ 'metaconsole' ] == 1 ) && $server_name != '' && defined ( 'METACONSOLE' )) {
metaconsole_restore_db ();
}
}
while ( $min === false && $i < count ( $exceptions ));
$max = $min ;
$avg = 0 ;
$i = 0 ;
foreach ( $exceptions as $exc ) {
//Metaconsole connection
$server_name = $exc [ 'server_name' ];
if (( $config [ 'metaconsole' ] == 1 ) && $server_name != '' && defined ( 'METACONSOLE' )) {
$connection = metaconsole_get_connection ( $server_name );
if ( metaconsole_load_external_db ( $connection ) != NOERR ) {
//ui_print_error_message ("Error connecting to ".$server_name);
continue ;
}
}
$ag_name = modules_get_agentmodule_agent_name ( $exc [ 'id_agent_module' ]);
$mod_name = modules_get_agentmodule_name ( $exc [ 'id_agent_module' ]);
$unit = db_get_value ( 'unit' , 'tagente_modulo' ,
'id_agente_modulo' , $exc [ 'id_agent_module' ]);
if ( $content [ 'period' ] == 0 ) {
$value =
modules_get_last_value ( $exceptions [ $i ][ 'id_agent_module' ]);
}
else {
switch ( $exc [ 'operation' ]) {
case 'avg' :
$value = reporting_get_agentmodule_data_average ( $exc [ 'id_agent_module' ], $content [ 'period' ]);
break ;
case 'max' :
$value = reporting_get_agentmodule_data_max ( $exc [ 'id_agent_module' ], $content [ 'period' ]);
break ;
case 'min' :
$value = reporting_get_agentmodule_data_min ( $exc [ 'id_agent_module' ], $content [ 'period' ]);
break ;
}
}
if ( $value !== false ) {
if ( $value > $max ) $max = $value ;
if ( $value < $min ) $min = $value ;
$avg += $value ;
//Skips
switch ( $exception_condition ) {
case REPORT_EXCEPTION_CONDITION_EVERYTHING :
break ;
case REPORT_EXCEPTION_CONDITION_GE :
if ( $value < $exception_condition_value ) {
continue 2 ;
}
break ;
case REPORT_EXCEPTION_CONDITION_LE :
if ( $value > $exception_condition_value ) {
continue 2 ;
}
break ;
case REPORT_EXCEPTION_CONDITION_L :
if ( $value > $exception_condition_value ) {
continue 2 ;
}
break ;
case REPORT_EXCEPTION_CONDITION_G :
if ( $value < $exception_condition_value ) {
continue 2 ;
}
break ;
case REPORT_EXCEPTION_CONDITION_E :
if ( $value != $exception_condition_value ) {
continue 2 ;
}
break ;
case REPORT_EXCEPTION_CONDITION_NE :
if ( $value == $exception_condition_value ) {
continue 2 ;
}
break ;
case REPORT_EXCEPTION_CONDITION_OK :
if ( modules_get_agentmodule_status ( $exc [ 'id_agent_module' ]) != 0 ) {
continue 2 ;
}
break ;
case REPORT_EXCEPTION_CONDITION_NOT_OK :
if ( modules_get_agentmodule_status ( $exc [ 'id_agent_module' ]) == 0 ) {
continue 2 ;
}
break ;
}
$i ++ ;
$data_exceptions [] = $value ;
$id_agent_module [] = $exc [ 'id_agent_module' ];
$agent_name [] = $ag_name ;
$module_name [] = $mod_name ;
$units [] = $unit ;
if ( $exc [ 'operation' ] == 'avg' ) {
$operation [] = " rate " ;
}
else {
$operation [] = $exc [ 'operation' ];
}
}
//Restore dbconnection
if (( $config [ 'metaconsole' ] == 1 ) && $server_name != '' && defined ( 'METACONSOLE' )) {
metaconsole_restore_db ();
}
}
//$i <= 0 means that there are no rows on the table, therefore no modules under the conditions defined.
if ( $i <= 0 ) {
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$data [ 0 ] = __ ( 'There are no' );
switch ( $exception_condition ) {
case REPORT_EXCEPTION_CONDITION_EVERYTHING :
$data [ 0 ] .= ' ' . __ ( 'Modules under those conditions' );
break ;
case REPORT_EXCEPTION_CONDITION_GE :
$data [ 0 ] .= ' ' . __ ( 'Modules over or equal to' ) . ' ' . $exception_condition_value ;
break ;
case REPORT_EXCEPTION_CONDITION_LE :
$data [ 0 ] .= ' ' . __ ( 'Modules less or equal to' ) . ' ' . $exception_condition_value ;
break ;
case REPORT_EXCEPTION_CONDITION_L :
$data [ 0 ] .= ' ' . __ ( 'Modules less' ) . ' ' . $exception_condition_value ;
break ;
case REPORT_EXCEPTION_CONDITION_G :
$data [ 0 ] .= ' ' . __ ( 'Modules over' ) . ' ' . $exception_condition_value ;
break ;
case REPORT_EXCEPTION_CONDITION_E :
$data [ 0 ] .= ' ' . __ ( 'Modules equal to' ) . ' ' . $exception_condition_value ;
break ;
case REPORT_EXCEPTION_CONDITION_NE :
$data [ 0 ] .= ' ' . __ ( 'Modules not equal to' ) . ' ' . $exception_condition_value ;
break ;
case REPORT_EXCEPTION_CONDITION_OK :
$data [ 0 ] .= ' ' . __ ( 'Modules normal status' );
break ;
case REPORT_EXCEPTION_CONDITION_NOT_OK :
$data [ 0 ] .= ' ' . __ ( 'Modules at critial or warning status' );
break ;
}
array_push ( $table -> data , $data );
break ;
}
//$i > 0 means that there is at least one row on the table
elseif ( $i > 0 ) {
$avg = $avg / $i ;
switch ( $order_uptodown ) {
//Order descending
case 1 :
array_multisort ( $data_exceptions , SORT_DESC , $agent_name , SORT_ASC , $module_name , SORT_ASC , $id_agent_module , SORT_ASC );
break ;
//Order ascending
case 2 :
array_multisort ( $data_exceptions , SORT_ASC , $agent_name , SORT_ASC , $module_name , SORT_ASC , $id_agent_module , SORT_ASC );
break ;
//Order by agent name or without selection
case 0 :
case 3 :
array_multisort ( $agent_name , SORT_ASC , $data_exceptions , SORT_ASC , $module_name , SORT_ASC , $id_agent_module , SORT_ASC );
break ;
}
if ( $order_uptodown == 1 || $order_uptodown == 2 ) {
$j = 0 ;
$data_pie_graph = array ();
$data_hbar = array ();
foreach ( $data_exceptions as $dex ) {
$data_hbar [ $agent_name [ $j ]][ 'g' ] = $dex ;
$data_pie_graph [ $agent_name [ $j ]] = $dex ;
if ( $show_graph == 0 || $show_graph == 1 ) {
$data = array ();
$data [ 0 ] = $agent_name [ $j ];
$data [ 1 ] = $module_name [ $j ];
$data [ 2 ] = __ ( $operation [ $j ]);
$data [ 3 ] = format_for_graph ( $dex , 2 ) . " " . $units [ $j ];
array_push ( $table1 -> data , $data );
}
$j ++ ;
}
}
else if ( $order_uptodown == 0 || $order_uptodown == 3 ) {
$j = 0 ;
$data_pie_graph = array ();
$data_hbar = array ();
foreach ( $agent_name as $an ) {
$data_hbar [ $an ][ 'g' ] = $data_exceptions [ $j ];
$data_pie_graph [ $an ] = $data_exceptions [ $j ];
if ( $show_graph == 0 || $show_graph == 1 ) {
$data = array ();
$data [ 0 ] = $an ;
$data [ 1 ] = $module_name [ $j ];
$data [ 2 ] = __ ( $operation [ $j ]);
$data [ 3 ] = format_for_graph ( $data_exceptions [ $j ], 2 ) . " " . $units [ $j ];
array_push ( $table1 -> data , $data );
}
$j ++ ;
}
}
}
$table -> colspan [ 2 ][ 0 ] = 3 ;
$table -> cellstyle [ 2 ][ 0 ] = 'text-align: center;' ;
if ( $show_graph == 0 || $show_graph == 1 ) {
$data = array ();
$data [ 0 ] = html_print_table ( $table1 , true );
array_push ( $table -> data , $data );
}
$table -> colspan [ 3 ][ 0 ] = 3 ;
$table -> cellstyle [ 3 ][ 0 ] = 'text-align: center;' ;
$data = array ();
if ( $show_graph == 1 || $show_graph == 2 ) {
$data [ 0 ] = pie3d_graph ( false , $data_pie_graph ,
600 , 150 , __ ( " other " ),
ui_get_full_url ( false , false , false , false ),
ui_get_full_url ( false , false , false , false ) . " /images/logo_vertical_water.png " ,
$config [ 'fontpath' ], $config [ 'font_size' ]);
array_push ( $table -> data , $data );
//Display bars graph
$table -> colspan [ 4 ][ 0 ] = 3 ;
$table -> cellstyle [ 4 ][ 0 ] = 'text-align: center;' ;
$height = count ( $data_pie_graph ) * 20 + 85 ;
$data = array ();
$data [ 0 ] = hbar_graph ( false , $data_hbar , 600 , $height ,
array (), array (), " " , " " , true ,
ui_get_full_url ( false , false , false , false ),
ui_get_full_url ( false , false , false , false ) . " /images/logo_vertical_water.png " , '' , '' , true , 1 , true );
array_push ( $table -> data , $data );
}
if ( $content [ 'show_resume' ] && $i > 0 ) {
unset ( $table_summary );
$table_summary -> width = '99%' ;
$table_summary -> data = array ();
$table_summary -> head = array ();
$table_summary -> head [ 0 ] = __ ( 'Min Value' );
$table_summary -> head [ 1 ] = __ ( 'Average Value' );
$table_summary -> head [ 2 ] = __ ( 'Max Value' );
$table_summary -> data [ 0 ][ 0 ] = format_for_graph ( $min , 2 );
$table_summary -> data [ 0 ][ 1 ] = format_for_graph ( $avg , 2 );
$table_summary -> data [ 0 ][ 2 ] = format_for_graph ( $max , 2 );
$table -> colspan [ 5 ][ 0 ] = 3 ;
$table -> cellstyle [ 5 ][ 0 ] = 'text-align: center;' ;
array_push ( $table -> data , array ( '<b>' . __ ( 'Summary' ) . '</b>' ));
$table -> colspan [ 6 ][ 0 ] = 3 ;
array_push ( $table -> data , array ( html_print_table ( $table_summary , true )));
}
break ;
case 'agent_module' :
$group_name = groups_get_name ( $content [ 'id_group' ]);
if ( $content [ 'id_module_group' ] == 0 ) {
$module_group_name = __ ( 'All' );
}
else {
$module_group_name = db_get_value ( 'name' , 'tmodule_group' ,
'id_mg' , $content [ 'id_module_group' ]);
}
if ( empty ( $item_title )) {
$item_title = __ ( 'Agents/Modules' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title ,
$group_name . ' - ' . $module_group_name );
$id_group = $content [ 'id_group' ];
$id_module_group = $content [ 'id_module_group' ];
$offset = get_parameter ( 'offset' , 0 );
$block = 20 ; //Maximun number of modules displayed on the table
$modulegroup = get_parameter ( 'modulegroup' , 0 );
$table -> style [ 1 ] = 'text-align: right' ;
// Put description at the end of the module (if exists)
$table -> colspan [ 1 ][ 0 ] = 3 ;
if ( $content [ " description " ] != " " ) {
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
$agents = '' ;
if ( $id_group > 0 ) {
$agents = agents_get_group_agents ( $id_group );
$agents = array_keys ( $agents );
}
$filter_module_groups = false ;
if ( $id_module_group > 0 ) {
$filter_module_groups [ 'id_module_group' ] = $id_module_group ;
}
$all_modules = agents_get_modules ( $agents , false , $filter_module_groups , true , false );
$modules_by_name = array ();
$name = '' ;
$cont = 0 ;
foreach ( $all_modules as $key => $module ) {
if ( $module == $name ) {
$modules_by_name [ $cont - 1 ][ 'id' ][] = $key ;
}
else {
$name = $module ;
$modules_by_name [ $cont ][ 'name' ] = $name ;
$modules_by_name [ $cont ][ 'id' ][] = $key ;
$cont ++ ;
}
}
if ( $config [ " pure " ] == 1 ) {
$block = count ( $modules_by_name );
}
$filter_groups = array ( 'offset' => ( int ) $offset ,
'limit' => ( int ) $config [ 'block_size' ]);
if ( $id_group > 0 ) {
$filter_groups [ 'id_grupo' ] = $id_group ;
}
$agents = agents_get_agents ( $filter_groups );
$nagents = count ( $agents );
if ( $all_modules == false || $agents == false ) {
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$data [ 0 ] = __ ( 'There are no agents with modules' );
array_push ( $table -> data , $data );
break ;
}
$table_data = '<table cellpadding="1" cellspacing="4" cellspacing="0" border="0" style="background-color: #EEE;">' ;
$table_data .= " <th> " . __ ( " Agents " ) . " / " . __ ( " Modules " ) . " </th> " ;
$nmodules = 0 ;
foreach ( $modules_by_name as $module ) {
$nmodules ++ ;
$file_name = string2image ( ui_print_truncate_text ( $module [ 'name' ], 'module_small' , false , true , false , '...' ), false , false , 6 , 270 , '#B1B1B1' , 'FFF' , 4 , 0 );
$table_data .= '<th width="22px">' . html_print_image ( $file_name , true , array ( 'title' => $module [ 'name' ])) . " </th> " ;
}
// Dont use pagination
/* if ( $block < $nmodules ) {
$table_data .= " <th width='20px' style='vertical-align:top; padding-top: 35px;' rowspan=' " . ( $nagents + 1 ) . " '><b>...</b></th> " ;
} */
$filter_agents = false ;
if ( $id_group > 0 ) {
$filter_agents = array ( 'id_grupo' => $id_group );
}
// Prepare pagination
ui_pagination (( int ) count ( agents_get_agents ( $filter_agents )));
$table_data .= " <br> " ;
foreach ( $agents as $agent ) {
// Get stats for this group
$agent_status = agents_get_status ( $agent [ 'id_agente' ]);
switch ( $agent_status ) {
case 4 : // Alert fired status
$rowcolor = COL_ALERTFIRED ;
$textcolor = '#000' ;
break ;
case 1 : // Critical status
$rowcolor = COL_CRITICAL ;
$textcolor = '#FFF' ;
break ;
case 2 : // Warning status
$rowcolor = COL_WARNING ;
$textcolor = '#000' ;
break ;
case 0 : // Normal status
$rowcolor = COL_NORMAL ;
$textcolor = '#FFF' ;
break ;
case 3 :
case - 1 :
default : // Unknown status
$rowcolor = COL_UNKNOWN ;
$textcolor = '#FFF' ;
break ;
}
$table_data .= " <tr style='height: 35px;'> " ;
$file_name = string2image ( ui_print_truncate_text ( $agent [ 'nombre' ], 'agent_small' , false , true , false , '...' ), false , false , 6 , 0 , $rowcolor , $textcolor , 4 , 0 );
$table_data .= " <td style='background-color: " . $rowcolor . " ;'> " . html_print_image ( $file_name , true , array ( 'title' => $agent [ 'nombre' ])) . " </td> " ;
$agent_modules = agents_get_modules ( $agent [ 'id_agente' ]);
$nmodules = 0 ;
foreach ( $modules_by_name as $module ) {
$nmodules ++ ;
// Don't use pagination
/* if ( $nmodules > $block ) {
continue ;
} */
$match = false ;
foreach ( $module [ 'id' ] as $module_id ){
if ( ! $match && array_key_exists ( $module_id , $agent_modules )) {
$status = modules_get_agentmodule_status ( $module_id );
$table_data .= " <td style='text-align: center; background-color: #DDD;'> " ;
$win_handle = dechex ( crc32 ( $module_id . $module [ " name " ]));
$graph_type = return_graphtype ( modules_get_agentmodule_type ( $module_id ));
switch ( $status ) {
case 0 :
$table_data .= ui_print_status_image ( 'module_ok.png' , $module [ 'name' ] . " in " . $agent [ 'nombre' ] . " : " . __ ( 'NORMAL' ), true , array ( 'width' => '20px' , 'height' => '20px' ));
break ;
case 1 :
$table_data .= ui_print_status_image ( 'module_critical.png' , $module [ 'name' ] . " in " . $agent [ 'nombre' ] . " : " . __ ( 'CRITICAL' ), true , array ( 'width' => '20px' , 'height' => '20px' ));
break ;
case 2 :
$table_data .= ui_print_status_image ( 'module_warning.png' , $module [ 'name' ] . " in " . $agent [ 'nombre' ] . " : " . __ ( 'WARNING' ), true , array ( 'width' => '20px' , 'height' => '20px' ));
break ;
case 3 :
$table_data .= ui_print_status_image ( 'module_unknown.png' , $module [ 'name' ] . " in " . $agent [ 'nombre' ] . " : " . __ ( 'UNKNOWN' ), true , array ( 'width' => '20px' , 'height' => '20px' ));
break ;
case 4 :
$table_data .= ui_print_status_image ( 'module_alertsfired.png' , $module [ 'name' ] . " in " . $agent [ 'nombre' ] . " : " . __ ( 'ALERTS FIRED' ), true , array ( 'width' => '20px' , 'height' => '20px' ));
break ;
}
$table_data .= " </td> " ;
$match = true ;
}
}
if ( ! $match ) {
$table_data .= " <td style='background-color: #DDD;'></td> " ;
}
}
$table_data .= " </tr> " ;
}
$table_data .= " </table> " ;
$table_data .= " <div class='legend_basic' style='width: 96%'> " ;
$table_data .= " <table> " ;
$table_data .= " <tr><td colspan='2' style='padding-bottom: 10px;'><b> " . __ ( 'Legend' ) . " </b></td></tr> " ;
$table_data .= " <tr><td class='legend_square_simple'><div style='background-color: " . COL_ALERTFIRED . " ;'></div></td><td> " . __ ( " Orange cell when the module has fired alerts " ) . " </td></tr> " ;
$table_data .= " <tr><td class='legend_square_simple'><div style='background-color: " . COL_CRITICAL . " ;'></div></td><td> " . __ ( " Red cell when the module has a critical status " ) . " </td></tr> " ;
$table_data .= " <tr><td class='legend_square_simple'><div style='background-color: " . COL_WARNING . " ;'></div></td><td> " . __ ( " Yellow cell when the module has a warning status " ) . " </td></tr> " ;
$table_data .= " <tr><td class='legend_square_simple'><div style='background-color: " . COL_NORMAL . " ;'></div></td><td> " . __ ( " Green cell when the module has a normal status " ) . " </td></tr> " ;
$table_data .= " <tr><td class='legend_square_simple'><div style='background-color: " . COL_UNKNOWN . " ;'></div></td><td> " . __ ( " Grey cell when the module has an unknown status " ) . " </td></tr> " ;
$table_data .= " </table> " ;
$table_data .= " </div> " ;
$data = array ();
$table -> colspan [ 2 ][ 0 ] = 3 ;
$data [ 0 ] = $table_data ;
array_push ( $table -> data , $data );
break ;
case 'inventory' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Inventory' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title );
$es = json_decode ( $content [ 'external_source' ], true );
$id_agent = $es [ 'id_agents' ];
$module_name = $es [ 'inventory_modules' ];
if ( empty ( $module_name )) {
$module_name = array ( 0 => 0 );
}
$date = $es [ 'date' ];
$description = $content [ 'description' ];
$data = array ();
$table -> colspan [ 1 ][ 0 ] = 2 ;
$table -> colspan [ 2 ][ 0 ] = 2 ;
if ( $description != '' ) {
$data [ 0 ] = $description ;
array_push ( $table -> data , $data );
}
$inventory_data = inventory_get_data (( array ) $id_agent ,( array ) $module_name , $date , '' , false );
if ( $inventory_data == ERR_NODATA ) {
$inventory_data = " <div class='nf'> " . __ ( 'No data found.' ) . " </div> " ;
$inventory_data .= " </td></tr><tr><td> " ;
}
$data [ 0 ] = $inventory_data ;
array_push ( $table -> data , $data );
break ;
case 'inventory_changes' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Inventory changes' );
}
reporting_header_content ( $mini , $content , $report , $table , $item_title );
$es = json_decode ( $content [ 'external_source' ], true );
$id_agent = $es [ 'id_agents' ];
$module_name = $es [ 'inventory_modules' ];
$description = $content [ 'description' ];
$inventory_changes = inventory_get_changes ( $id_agent , $module_name , $report [ " datetime " ] - $content [ 'period' ], $report [ " datetime " ]);
if ( $inventory_changes == ERR_NODATA ) {
$inventory_changes = " <div class='nf'> " . __ ( 'No changes found.' ) . " </div> " ;
$inventory_changes .= " </td></tr><tr><td> " ;
}
$data = array ();
$table -> colspan [ 1 ][ 0 ] = 2 ;
if ( $description != '' ) {
$data [ 0 ] = $description ;
array_push ( $table -> data , $data );
}
$data [ 0 ] = $inventory_changes ;
$table -> colspan [ 2 ][ 0 ] = 2 ;
array_push ( $table -> data , $data );
break ;
case 'agent_configuration' :
if ( empty ( $item_title )) {
$item_title = __ ( 'Agent configuration: ' ) . $agent_name ;
}
reporting_header_content ( $mini , $content , $report , $table , $item_title );
$agent_name = agents_get_name ( $content [ 'id_agent' ]);
$modules = agents_get_modules ( $content [ 'id_agent' ]);
$data = array ();
$table -> colspan [ 0 ][ 1 ] = 10 ;
//Agent's data
$data [ 0 ] = '<b>' . __ ( 'Agent name' ) . '</b>' ;
$data [ 1 ] = '<b>' . __ ( 'Group' ) . '</b>' ;
$data [ 2 ] = '<b>' . __ ( 'SO' ) . '</b>' ;
$data [ 3 ] = '<b>' . __ ( 'IP' ) . '</b>' ;
$data [ 4 ] = '<b>' . __ ( 'Description' ) . '</b>' ;
$data [ 5 ] = '<b>' . __ ( 'Status' ) . '</b>' ;
$table -> colspan [ 1 ][ 3 ] = 2 ;
$table -> colspan [ 1 ][ 4 ] = 4 ;
$table -> colspan [ 1 ][ 5 ] = 2 ;
$table -> colspan [ 1 ][ 5 ] = 2 ;
array_push ( $table -> data , $data );
unset ( $data );
$sql = " SELECT * FROM tagente WHERE id_agente= " . $content [ 'id_agent' ];
$agent_data = db_get_row_sql ( $sql );
$data [ 0 ] = $agent_data [ 'nombre' ];
$data [ 1 ] = ui_print_group_icon ( $agent_data [ 'id_grupo' ], true , '' , '' , false );
$data [ 2 ] = ui_print_os_icon ( $agent_data [ " id_os " ], true , true );
$data [ 3 ] = $agent_data [ 'direccion' ];
$agent_data_comentarios = strip_tags ( ui_bbcode_to_html ( $agent_data [ 'comentarios' ]));
$data [ 4 ] = $agent_data_comentarios ;
if ( $agent_data [ 'disabled' ] == 0 )
$data [ 5 ] = __ ( 'Enabled' );
else
$data [ 5 ] = __ ( 'Disabled' );
$table -> colspan [ 2 ][ 3 ] = 2 ;
$table -> colspan [ 2 ][ 4 ] = 4 ;
$table -> colspan [ 2 ][ 5 ] = 2 ;
array_push ( $table -> data , $data );
unset ( $data );
//Agent's modules
if ( $modules == null ) {
$modules = array ();
}
else {
$data [ 0 ] = '' ;
$data [ 1 ] = '<b>' . agents_get_name ( $content [ 'id_agent' ], 'upper' ) . __ ( ' MODULES' ) . '</b>' ;
$table -> colspan [ 3 ][ 1 ] = 10 ;
array_push ( $table -> data , $data );
unset ( $data );
$data [ 0 ] = '' ;
$data [ 1 ] = '<b>' . __ ( 'Name' ) . '</b>' ;
$data [ 2 ] = '<b>' . __ ( 'Type' ) . '</b>' ;
$data [ 3 ] = '<b>' . __ ( 'Warning' ) . '/' . '<br>' . __ ( 'Critical' ) . '</b>' ;
$data [ 4 ] = '<b>' . __ ( 'Threshold' ) . '</b>' ;
$data [ 5 ] = '<b>' . __ ( 'Group' ) . '</b>' ;
$data [ 6 ] = '<b>' . __ ( 'Description' ) . '</b>' ;
$data [ 7 ] = '<b>' . __ ( 'Interval' ) . '</b>' ;
$data [ 8 ] = '<b>' . __ ( 'Unit' ) . '</b>' ;
$data [ 9 ] = '<b>' . __ ( 'Status' ) . '</b>' ;
$data [ 10 ] = '<b>' . __ ( 'Tags' ) . '</b>' ;
$table -> style [ 0 ] = 'width:10px' ;
$table -> style [ 1 ] = 'text-align: left' ;
$table -> style [ 2 ] = 'text-align: center' ;
$table -> style [ 3 ] = 'text-align: center' ;
$table -> style [ 4 ] = 'text-align: center' ;
$table -> style [ 5 ] = 'text-align: center' ;
$table -> style [ 6 ] = 'text-align: left' ;
$table -> style [ 7 ] = 'text-align: center' ;
$table -> style [ 8 ] = 'text-align: center' ;
$table -> style [ 9 ] = 'text-align: left' ;
$table -> style [ 10 ] = 'text-align: left' ;
array_push ( $table -> data , $data );
}
foreach ( $modules as $id_agent_module => $module ) {
$sql = " SELECT * FROM tagente_modulo WHERE id_agente_modulo= $id_agent_module " ;
$data_module = db_get_row_sql ( $sql );
$data = array ();
$data [ 0 ] = '' ;
if ( $data_module [ 'disabled' ] == 0 )
$disabled = '' ;
else
$disabled = ' (Disabled)' ;
$data [ 1 ] = $data_module [ 'nombre' ] . $disabled ;
$data [ 2 ] = ui_print_moduletype_icon ( $data_module [ 'id_tipo_modulo' ], true );
$data [ 3 ] = $data_module [ 'max_warning' ] . '/' . $data_module [ 'min_warning' ] . ' <br> ' . $data_module [ 'max_critical' ] . '/' . $data_module [ 'min_critical' ];
$data [ 4 ] = $data_module [ 'module_ff_interval' ];
$data [ 5 ] = groups_get_name ( $content [ 'id_group' ], true );
$data [ 6 ] = $data_module [ 'descripcion' ];
if (( $data_module [ 'module_interval' ] == 0 ) || ( $data_module [ 'module_interval' ] == '' ))
$data [ 7 ] = db_get_value ( 'intervalo' , 'tagente' , 'id_agente' , $content [ 'id_agent' ]);
else
$data [ 7 ] = $data_module [ 'module_interval' ];
$data [ 8 ] = $data_module [ 'unit' ];
$module_status = db_get_row ( 'tagente_estado' , 'id_agente_modulo' , $id_agent_module );
modules_get_status ( $id_agent_module , $module_status [ 'estado' ], $module_status [ 'datos' ], $status , $title );
$data [ 9 ] = ui_print_status_image ( $status , $title , true );
$sql_tag = " SELECT name
FROM ttag
WHERE id_tag IN (
SELECT id_tag
FROM ttag_module
WHERE id_agente_modulo = $id_agent_module ) " ;
$tags = db_get_all_rows_sql ( $sql_tag );
if ( $tags === false )
$tags = '' ;
else
$tags = implode ( " , " , $tags );
$data [ 10 ] = $tags ;
array_push ( $table -> data , $data );
}
break ;
case 'group_configuration' :
$group_name = groups_get_name ( $content [ 'id_group' ]);
if ( empty ( $item_title )) {
$item_title = __ ( 'Group configuration: ' ) . $group_name ;
}
reporting_header_content ( $mini , $content , $report , $table , $item_title );
$sql = " SELECT * FROM tagente WHERE id_grupo= " . $content [ 'id_group' ];
$agents_list = db_get_all_rows_sql ( $sql );
if ( $agents_list === false )
$agents_list = array ();
$table -> colspan [ 0 ][ 1 ] = 10 ;
$i = 1 ;
foreach ( $agents_list as $agent ) {
$data = array ();
$table -> colspan [ $i ][ 3 ] = 2 ;
$table -> colspan [ $i ][ 4 ] = 4 ;
$table -> colspan [ $i ][ 5 ] = 2 ;
$table -> colspan [ $i ][ 5 ] = 2 ;
$i ++ ;
//Agent's data
$data [ 0 ] = '<b>' . __ ( 'Agent name' ) . '</b>' ;
$data [ 1 ] = '<b>' . __ ( 'Group' ) . '</b>' ;
$data [ 2 ] = '<b>' . __ ( 'SO' ) . '</b>' ;
$data [ 3 ] = '<b>' . __ ( 'IP' ) . '</b>' ;
$data [ 4 ] = '<b>' . __ ( 'Description' ) . '</b>' ;
$data [ 5 ] = '<b>' . __ ( 'Status' ) . '</b>' ;
array_push ( $table -> data , $data );
unset ( $data );
$sql = " SELECT * FROM tagente WHERE id_agente= " . $agent [ 'id_agente' ];
$agent_data = db_get_row_sql ( $sql );
$data [ 0 ] = $agent_data [ 'nombre' ];
$data [ 1 ] = ui_print_group_icon ( $agent_data [ 'id_grupo' ], true , '' , '' , false );
$data [ 2 ] = ui_print_os_icon ( $agent_data [ " id_os " ], true , true );
$data [ 3 ] = $agent_data [ 'direccion' ];
$agent_data_comentarios = strip_tags ( ui_bbcode_to_html ( $agent_data [ 'comentarios' ]));
$data [ 4 ] = $agent_data_comentarios ;
if ( $agent_data [ 'disabled' ] == 0 )
$data [ 5 ] = __ ( 'Enabled' );
else
$data [ 5 ] = __ ( 'Disabled' );
$table -> colspan [ $i ][ 3 ] = 2 ;
$table -> colspan [ $i ][ 4 ] = 4 ;
$table -> colspan [ $i ][ 5 ] = 2 ;
$table -> colspan [ $i ][ 5 ] = 2 ;
$i ++ ;
array_push ( $table -> data , $data );
unset ( $data );
$modules = agents_get_modules ( $agent [ 'id_agente' ]);
if ( $modules == null ) {
$modules = array ();
}
else {
//Agent's modules
$data [ 0 ] = '' ;
$data [ 1 ] = '<b>' . agents_get_name ( $agent [ 'id_agente' ], 'upper' ) . __ ( ' MODULES' ) . '</b>' ;
$table -> colspan [ $i ][ 1 ] = 10 ;
$i ++ ;
array_push ( $table -> data , $data );
unset ( $data );
$data [ 0 ] = '' ;
$data [ 1 ] = '<b>' . __ ( 'Name' ) . '</b>' ;
$data [ 2 ] = '<b>' . __ ( 'Type' ) . '</b>' ;
$data [ 3 ] = '<b>' . __ ( 'Warning' ) . '/' . '<br>' . __ ( 'Critical' ) . '</b>' ;
$data [ 4 ] = '<b>' . __ ( 'Threshold' ) . '</b>' ;
$data [ 5 ] = '<b>' . __ ( 'Group' ) . '</b>' ;
$data [ 6 ] = '<b>' . __ ( 'Description' ) . '</b>' ;
$data [ 7 ] = '<b>' . __ ( 'Interval' ) . '</b>' ;
$data [ 8 ] = '<b>' . __ ( 'Unit' ) . '</b>' ;
$data [ 9 ] = '<b>' . __ ( 'Status' ) . '</b>' ;
$data [ 10 ] = '<b>' . __ ( 'Tags' ) . '</b>' ;
$table -> style [ 0 ] = 'width:10px' ;
$table -> style [ 1 ] = 'text-align: left' ;
$table -> style [ 2 ] = 'text-align: center' ;
$table -> style [ 3 ] = 'text-align: center' ;
$table -> style [ 4 ] = 'text-align: center' ;
$table -> style [ 5 ] = 'text-align: center' ;
$table -> style [ 6 ] = 'text-align: left' ;
$table -> style [ 7 ] = 'text-align: center' ;
$table -> style [ 8 ] = 'text-align: center' ;
$table -> style [ 9 ] = 'text-align: left' ;
$table -> style [ 10 ] = 'text-align: left' ;
array_push ( $table -> data , $data );
$i ++ ;
}
foreach ( $modules as $id_agent_module => $module ) {
$sql = " SELECT *
FROM tagente_modulo
WHERE id_agente_modulo = $id_agent_module " ;
$data_module = db_get_row_sql ( $sql );
$data = array ();
$data [ 0 ] = '' ;
if ( $data_module [ 'disabled' ] == 0 )
$disabled = '' ;
else
$disabled = ' (Disabled)' ;
$data [ 1 ] = $data_module [ 'nombre' ] . $disabled ;
$data [ 2 ] = ui_print_moduletype_icon ( $data_module [ 'id_tipo_modulo' ], true );
$data [ 3 ] = $data_module [ 'max_warning' ] . '/' . $data_module [ 'min_warning' ] . ' <br> ' . $data_module [ 'max_critical' ] . '/' . $data_module [ 'min_critical' ];
$data [ 4 ] = $data_module [ 'module_ff_interval' ];
$data [ 5 ] = groups_get_name ( $content [ 'id_group' ], true );
$data [ 6 ] = $data_module [ 'descripcion' ];
if (( $data_module [ 'module_interval' ] == 0 ) || ( $data_module [ 'module_interval' ] == '' ))
$data [ 7 ] = db_get_value ( 'intervalo' , 'tagente' , 'id_agente' , $content [ 'id_agent' ]);
else
$data [ 7 ] = $data_module [ 'module_interval' ];
$data [ 8 ] = $data_module [ 'unit' ];
$module_status = db_get_row ( 'tagente_estado' , 'id_agente_modulo' , $id_agent_module );
modules_get_status ( $id_agent_module , $module_status [ 'estado' ], $module_status [ 'datos' ], $status , $title );
$data [ 9 ] = ui_print_status_image ( $status , $title , true );
$sql_tag = " SELECT name
FROM ttag
WHERE id_tag IN (
SELECT id_tag
FROM ttag_module
WHERE id_agente_modulo = $id_agent_module ) " ;
$tags = db_get_all_rows_sql ( $sql_tag );
if ( $tags === false )
$tags = '' ;
else
$tags = implode ( " , " , $tags );
$data [ 10 ] = $tags ;
array_push ( $table -> data , $data );
$i ++ ;
}
}
break ;
case 'netflow_area' :
case 'netflow_pie' :
case 'netflow_data' :
case 'netflow_statistics' :
case 'netflow_summary' :
// Read the report item
$report_id = $report [ 'id_report' ];
$content_id = $content [ 'id_rc' ];
$max_aggregates = $content [ 'top_n_value' ];
$type = $content [ 'show_graph' ];
$description = $content [ 'description' ];
$resolution = $content [ 'top_n' ];
$type = $content [ 'type' ];
$period = $content [ 'period' ];
// Calculate the start and end dates
$end_date = $report [ 'datetime' ];
$start_date = $end_date - $period ;
// Get item filters
$filter = db_get_row_sql ( " SELECT *
FROM tnetflow_filter
WHERE id_sg = '" . (int)$content[' text '] . "' " , false, true);
if ( $description == '' ) {
$description = $filter [ 'id_name' ];
}
if ( empty ( $item_title )) {
$item_title = $description ;
}
$table -> colspan [ 0 ][ 0 ] = 4 ;
$table -> data [ 0 ][ 0 ] = '<h4>' . $item_title . '</h4>' ;
$table -> colspan [ 1 ][ 0 ] = 4 ;
$table -> data [ 1 ][ 0 ] = netflow_draw_item ( $start_date , $end_date , $resolution , $type , $filter , $max_aggregates , $server_name , 'HTML' );
break ;
}
//Restore dbconnection
if (( $config [ 'metaconsole' ] == 1 ) && $server_name != '' && defined ( 'METACONSOLE' ) && $remote_connection == 1 ) {
metaconsole_restore_db_force ();
}
}
/**
* Get the MTBF value of an agent module in a period of time . See
* http :// en . wikipedia . org / wiki / Mean_time_between_failures
*
* @ param int Agent module id
* @ param int Period of time to check ( in seconds )
* @ param int Top date to check the values . Default current time .
*
* @ return float The MTBF value in the interval .
*/
function reporting_get_agentmodule_mtbf ( $id_agent_module , $period = 0 , $date = 0 ) {
// Initialize variables
if ( empty ( $date )) $date = get_system_time ();
// Read module configuration
$datelimit = $date - $period ;
$search_in_history_db = db_search_in_history_db ( $datelimit );
$module = db_get_row_sql ( ' SELECT max_critical , min_critical , id_tipo_modulo
FROM tagente_modulo
WHERE id_agente_modulo = ' . ( int ) $id_agent_module );
if ( $module === false ) {
return false ;
}
$critical_min = $module [ 'min_critical' ];
$critical_max = $module [ 'max_critical' ];
$module_type = $module [ 'id_tipo_modulo' ];
// Set critical_min and critical for proc modules
$module_type_str = modules_get_type_name ( $module_type );
if ( strstr ( $module_type_str , 'proc' ) !== false &&
( $critical_min == 0 && $critical_max == 0 )) {
$critical_min = 1 ;
}
// Get module data
$interval_data = db_get_all_rows_sql ( ' SELECT * FROM tagente_datos
WHERE id_agente_modulo = ' . ( int ) $id_agent_module .
' AND utimestamp > ' . ( int ) $datelimit .
' AND utimestamp < ' . ( int ) $date .
' ORDER BY utimestamp ASC' , $search_in_history_db );
if ( $interval_data === false ) $interval_data = array ();
// Get previous data
$previous_data = modules_get_previous_data ( $id_agent_module , $datelimit );
if ( $previous_data !== false ) {
$previous_data [ 'utimestamp' ] = $datelimit ;
array_unshift ( $interval_data , $previous_data );
}
// Get next data
$next_data = modules_get_next_data ( $id_agent_module , $date );
if ( $next_data !== false ) {
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
else if ( count ( $interval_data ) > 0 ) {
// Propagate the last known data to the end of the interval
$next_data = array_pop ( $interval_data );
array_push ( $interval_data , $next_data );
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
if ( count ( $interval_data ) < 2 ) {
return false ;
}
// Set initial conditions
$critical_period = 0 ;
$first_data = array_shift ( $interval_data );
$previous_utimestamp = $first_data [ 'utimestamp' ];
if ((( $critical_max > $critical_min AND ( $first_data [ 'datos' ] > $critical_max OR $first_data [ 'datos' ] < $critical_min ))) OR
( $critical_max <= $critical_min AND $first_data [ 'datos' ] < $critical_min )) {
$previous_status = 1 ;
$critical_count = 1 ;
}
else {
$previous_status = 0 ;
$critical_count = 0 ;
}
foreach ( $interval_data as $data ) {
// Previous status was critical
if ( $previous_status == 1 ) {
$critical_period += $data [ 'utimestamp' ] - $previous_utimestamp ;
}
// Re-calculate previous status for the next data
if ((( $critical_max > $critical_min AND ( $data [ 'datos' ] > $critical_max OR $data [ 'datos' ] < $critical_min ))) OR
( $critical_max <= $critical_min AND $data [ 'datos' ] < $critical_min )) {
if ( $previous_status == 0 ) {
$critical_count ++ ;
}
$previous_status = 1 ;
}
else {
$previous_status = 0 ;
}
$previous_utimestamp = $data [ 'utimestamp' ];
}
if ( $critical_count == 0 ) {
return 0 ;
}
return ( $period - $critical_period ) / $critical_count ;
}
/**
* Get the MTTR value of an agent module in a period of time . See
* http :// en . wikipedia . org / wiki / Mean_time_to_recovery
*
* @ param int Agent module id
* @ param int Period of time to check ( in seconds )
* @ param int Top date to check the values . Default current time .
*
* @ return float The MTTR value in the interval .
*/
function reporting_get_agentmodule_mttr ( $id_agent_module , $period = 0 , $date = 0 ) {
// Initialize variables
if ( empty ( $date )) $date = get_system_time ();
// Read module configuration
$datelimit = $date - $period ;
$search_in_history_db = db_search_in_history_db ( $datelimit );
$module = db_get_row_sql ( ' SELECT max_critical , min_critical , id_tipo_modulo
FROM tagente_modulo
WHERE id_agente_modulo = ' . ( int ) $id_agent_module );
if ( $module === false ) {
return false ;
}
$critical_min = $module [ 'min_critical' ];
$critical_max = $module [ 'max_critical' ];
$module_type = $module [ 'id_tipo_modulo' ];
// Set critical_min and critical for proc modules
$module_type_str = modules_get_type_name ( $module_type );
if ( strstr ( $module_type_str , 'proc' ) !== false &&
( $critical_min == 0 && $critical_max == 0 )) {
$critical_min = 1 ;
}
// Get module data
$interval_data = db_get_all_rows_sql ( ' SELECT * FROM tagente_datos
WHERE id_agente_modulo = ' . ( int ) $id_agent_module .
' AND utimestamp > ' . ( int ) $datelimit .
' AND utimestamp < ' . ( int ) $date .
' ORDER BY utimestamp ASC' , $search_in_history_db );
if ( $interval_data === false ) $interval_data = array ();
// Get previous data
$previous_data = modules_get_previous_data ( $id_agent_module , $datelimit );
if ( $previous_data !== false ) {
$previous_data [ 'utimestamp' ] = $datelimit ;
array_unshift ( $interval_data , $previous_data );
}
// Get next data
$next_data = modules_get_next_data ( $id_agent_module , $date );
if ( $next_data !== false ) {
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
else if ( count ( $interval_data ) > 0 ) {
// Propagate the last known data to the end of the interval
$next_data = array_pop ( $interval_data );
array_push ( $interval_data , $next_data );
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
if ( count ( $interval_data ) < 2 ) {
return false ;
}
// Set initial conditions
$critical_period = 0 ;
$first_data = array_shift ( $interval_data );
$previous_utimestamp = $first_data [ 'utimestamp' ];
if ((( $critical_max > $critical_min AND ( $first_data [ 'datos' ] > $critical_max OR $first_data [ 'datos' ] < $critical_min ))) OR
( $critical_max <= $critical_min AND $first_data [ 'datos' ] < $critical_min )) {
$previous_status = 1 ;
$critical_count = 1 ;
}
else {
$previous_status = 0 ;
$critical_count = 0 ;
}
foreach ( $interval_data as $data ) {
// Previous status was critical
if ( $previous_status == 1 ) {
$critical_period += $data [ 'utimestamp' ] - $previous_utimestamp ;
}
// Re-calculate previous status for the next data
if ((( $critical_max > $critical_min AND ( $data [ 'datos' ] > $critical_max OR $data [ 'datos' ] < $critical_min ))) OR
( $critical_max <= $critical_min AND $data [ 'datos' ] < $critical_min )) {
if ( $previous_status == 0 ) {
$critical_count ++ ;
}
$previous_status = 1 ;
}
else {
$previous_status = 0 ;
}
$previous_utimestamp = $data [ 'utimestamp' ];
}
if ( $critical_count == 0 ) {
return 0 ;
}
return $critical_period / $critical_count ;
}
/**
* Get the TTO value of an agent module in a period of time .
*
* @ param int Agent module id
* @ param int Period of time to check ( in seconds )
* @ param int Top date to check the values . Default current time .
*
* @ return float The TTO value in the interval .
*/
function reporting_get_agentmodule_tto ( $id_agent_module , $period = 0 , $date = 0 ) {
// Initialize variables
if ( empty ( $date )) $date = get_system_time ();
// Read module configuration
$datelimit = $date - $period ;
$search_in_history_db = db_search_in_history_db ( $datelimit );
$module = db_get_row_sql ( ' SELECT max_critical , min_critical , id_tipo_modulo
FROM tagente_modulo
WHERE id_agente_modulo = ' . ( int ) $id_agent_module );
if ( $module === false ) {
return false ;
}
$critical_min = $module [ 'min_critical' ];
$critical_max = $module [ 'max_critical' ];
$module_type = $module [ 'id_tipo_modulo' ];
// Set critical_min and critical for proc modules
$module_type_str = modules_get_type_name ( $module_type );
if ( strstr ( $module_type_str , 'proc' ) !== false &&
( $critical_min == 0 && $critical_max == 0 )) {
$critical_min = 1 ;
}
// Get module data
$interval_data = db_get_all_rows_sql ( ' SELECT * FROM tagente_datos
WHERE id_agente_modulo = ' . ( int ) $id_agent_module .
' AND utimestamp > ' . ( int ) $datelimit .
' AND utimestamp < ' . ( int ) $date .
' ORDER BY utimestamp ASC' , $search_in_history_db );
if ( $interval_data === false ) $interval_data = array ();
// Get previous data
$previous_data = modules_get_previous_data ( $id_agent_module , $datelimit );
if ( $previous_data !== false ) {
$previous_data [ 'utimestamp' ] = $datelimit ;
array_unshift ( $interval_data , $previous_data );
}
// Get next data
$next_data = modules_get_next_data ( $id_agent_module , $date );
if ( $next_data !== false ) {
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
else if ( count ( $interval_data ) > 0 ) {
// Propagate the last known data to the end of the interval
$next_data = array_pop ( $interval_data );
array_push ( $interval_data , $next_data );
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
if ( count ( $interval_data ) < 2 ) {
return false ;
}
// Set initial conditions
$critical_period = 0 ;
$first_data = array_shift ( $interval_data );
$previous_utimestamp = $first_data [ 'utimestamp' ];
if ((( $critical_max > $critical_min AND ( $first_data [ 'datos' ] > $critical_max OR $first_data [ 'datos' ] < $critical_min ))) OR
( $critical_max <= $critical_min AND $first_data [ 'datos' ] < $critical_min )) {
$previous_status = 1 ;
}
else {
$previous_status = 0 ;
}
foreach ( $interval_data as $data ) {
// Previous status was critical
if ( $previous_status == 1 ) {
$critical_period += $data [ 'utimestamp' ] - $previous_utimestamp ;
}
// Re-calculate previous status for the next data
if ((( $critical_max > $critical_min AND ( $data [ 'datos' ] > $critical_max OR $data [ 'datos' ] < $critical_min ))) OR
( $critical_max <= $critical_min AND $data [ 'datos' ] < $critical_min )) {
$previous_status = 1 ;
}
else {
$previous_status = 0 ;
}
$previous_utimestamp = $data [ 'utimestamp' ];
}
return $period - $critical_period ;
}
/**
* Get the TTR value of an agent module in a period of time .
*
* @ param int Agent module id
* @ param int Period of time to check ( in seconds )
* @ param int Top date to check the values . Default current time .
*
* @ return float The TTR value in the interval .
*/
function reporting_get_agentmodule_ttr ( $id_agent_module , $period = 0 , $date = 0 ) {
// Initialize variables
if ( empty ( $date )) $date = get_system_time ();
// Read module configuration
$datelimit = $date - $period ;
$search_in_history_db = db_search_in_history_db ( $datelimit );
$module = db_get_row_sql ( ' SELECT max_critical , min_critical , id_tipo_modulo
FROM tagente_modulo
WHERE id_agente_modulo = ' . ( int ) $id_agent_module );
if ( $module === false ) {
return false ;
}
$critical_min = $module [ 'min_critical' ];
$critical_max = $module [ 'max_critical' ];
$module_type = $module [ 'id_tipo_modulo' ];
// Set critical_min and critical for proc modules
$module_type_str = modules_get_type_name ( $module_type );
if ( strstr ( $module_type_str , 'proc' ) !== false &&
( $critical_min == 0 && $critical_max == 0 )) {
$critical_min = 1 ;
}
// Get module data
$interval_data = db_get_all_rows_sql ( ' SELECT * FROM tagente_datos
WHERE id_agente_modulo = ' . ( int ) $id_agent_module .
' AND utimestamp > ' . ( int ) $datelimit .
' AND utimestamp < ' . ( int ) $date .
' ORDER BY utimestamp ASC' , $search_in_history_db );
if ( $interval_data === false ) $interval_data = array ();
// Get previous data
$previous_data = modules_get_previous_data ( $id_agent_module , $datelimit );
if ( $previous_data !== false ) {
$previous_data [ 'utimestamp' ] = $datelimit ;
array_unshift ( $interval_data , $previous_data );
}
// Get next data
$next_data = modules_get_next_data ( $id_agent_module , $date );
if ( $next_data !== false ) {
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
else if ( count ( $interval_data ) > 0 ) {
// Propagate the last known data to the end of the interval
$next_data = array_pop ( $interval_data );
array_push ( $interval_data , $next_data );
$next_data [ 'utimestamp' ] = $date ;
array_push ( $interval_data , $next_data );
}
if ( count ( $interval_data ) < 2 ) {
return false ;
}
// Set initial conditions
$critical_period = 0 ;
$first_data = array_shift ( $interval_data );
$previous_utimestamp = $first_data [ 'utimestamp' ];
if ((( $critical_max > $critical_min AND ( $first_data [ 'datos' ] > $critical_max OR $first_data [ 'datos' ] < $critical_min ))) OR
( $critical_max <= $critical_min AND $first_data [ 'datos' ] < $critical_min )) {
$previous_status = 1 ;
}
else {
$previous_status = 0 ;
}
foreach ( $interval_data as $data ) {
// Previous status was critical
if ( $previous_status == 1 ) {
$critical_period += $data [ 'utimestamp' ] - $previous_utimestamp ;
}
// Re-calculate previous status for the next data
if ((( $critical_max > $critical_min AND ( $data [ 'datos' ] > $critical_max OR $data [ 'datos' ] < $critical_min ))) OR
( $critical_max <= $critical_min AND $data [ 'datos' ] < $critical_min )) {
$previous_status = 1 ;
}
else {
$previous_status = 0 ;
}
$previous_utimestamp = $data [ 'utimestamp' ];
}
return $critical_period ;
}
/**
* Get all the template graphs a user can see .
*
* @ param $id_user User id to check .
* @ param $only_names Wheter to return only graphs names in an associative array
* or all the values .
* @ param $returnAllGroup Wheter to return graphs of group All or not .
* @ param $privileges Privileges to check in user group
*
* @ return template graphs of a an user . Empty array if none .
*/
function reporting_template_graphs_get_user ( $id_user = 0 , $only_names = false , $returnAllGroup = true , $privileges = 'RR' ) {
global $config ;
if ( ! $id_user ) {
$id_user = $config [ 'id_user' ];
}
$groups = users_get_groups ( $id_user , $privileges , $returnAllGroup );
$all_templates = db_get_all_rows_in_table ( 'tgraph_template' , 'name' );
if ( $all_templates === false )
return array ();
$templates = array ();
foreach ( $all_templates as $template ) {
if ( ! in_array ( $template [ 'id_group' ], array_keys ( $groups )))
continue ;
if ( $template [ " id_user " ] != $id_user && $template [ 'private' ])
continue ;
if ( $template [ " id_group " ] > 0 )
if ( ! isset ( $groups [ $template [ " id_group " ]])){
continue ;
}
if ( $only_names ) {
$templates [ $template [ 'id_graph_template' ]] = $template [ 'name' ];
}
else {
$templates [ $template [ 'id_graph_template' ]] = $template ;
$templatesCount = db_get_value_sql ( " SELECT COUNT(id_gs_template) FROM tgraph_source_template WHERE id_template = " . $template [ 'id_graph_template' ]);
$templates [ $template [ 'id_graph_template' ]][ 'graphs_template_count' ] = $templatesCount ;
}
}
return $templates ;
}
/**
* Gets a detailed reporting of groups ' s events .
*
* @ param unknown_type $id_group Id of the group .
* @ param unknown_type $period Time period of the report .
* @ param unknown_type $date Date of the report .
* @ param unknown_type $return Whether to return or not .
* @ param unknown_type $html Whether to return HTML code or not .
*
* @ return string Report of groups ' s events
*/
function reporting_get_count_events_by_agent ( $id_group , $period = 0 ,
$date = 0 ,
$filter_event_validated = false , $filter_event_critical = false ,
$filter_event_warning = false , $filter_event_no_validated = false ) {
if ( ! is_numeric ( $date )) {
$date = strtotime ( $date );
}
if ( empty ( $date )) {
$date = get_system_time ();
}
return events_get_count_events_by_agent ( $id_group , $period , $date ,
$filter_event_validated , $filter_event_critical ,
$filter_event_warning , $filter_event_no_validated );
}
/**
* Gets a detailed reporting of groups ' s events .
*
* @ param unknown_type $filter .
* @ param unknown_type $period Time period of the report .
* @ param unknown_type $date Date of the report .
* @ param unknown_type $return Whether to return or not .
* @ param unknown_type $html Whether to return HTML code or not .
*
* @ return string Report of groups ' s events
*/
function reporting_get_count_events_validated_by_user ( $filter , $period = 0 ,
$date = 0 ,
$filter_event_validated = false , $filter_event_critical = false ,
$filter_event_warning = false , $filter_event_no_validated = false ) {
if ( ! is_numeric ( $date )) {
$date = strtotime ( $date );
}
if ( empty ( $date )) {
$date = get_system_time ();
}
return events_get_count_events_validated_by_user ( $filter , $period , $date ,
$filter_event_validated , $filter_event_critical ,
$filter_event_warning , $filter_event_no_validated );
}
/**
* Gets a detailed reporting of groups ' s events .
*
* @ param unknown_type $id_group Id of the group .
* @ param unknown_type $period Time period of the report .
* @ param unknown_type $date Date of the report .
* @ param unknown_type $return Whether to return or not .
* @ param unknown_type $html Whether to return HTML code or not .
*
* @ return string Report of groups ' s events
*/
function reporting_get_count_events_by_criticity ( $filter , $period = 0 ,
$date = 0 ,
$filter_event_validated = false , $filter_event_critical = false ,
$filter_event_warning = false , $filter_event_no_validated = false ) {
if ( ! is_numeric ( $date )) {
$date = strtotime ( $date );
}
if ( empty ( $date )) {
$date = get_system_time ();
}
return events_get_count_events_by_criticity ( $filter , $period , $date ,
$filter_event_validated , $filter_event_critical ,
$filter_event_warning , $filter_event_no_validated );
}
/**
* Gets a detailed reporting of groups ' s events .
*
* @ param unknown_type $id_group Id of the group .
* @ param unknown_type $period Time period of the report .
* @ param unknown_type $date Date of the report .
* @ param unknown_type $return Whether to return or not .
* @ param unknown_type $html Whether to return HTML code or not .
*
* @ return string Report of groups ' s events
*/
function reporting_get_count_events_validated ( $filter , $period = 0 ,
$date = 0 ,
$filter_event_validated = false , $filter_event_critical = false ,
$filter_event_warning = false , $filter_event_no_validated = false ) {
if ( ! is_numeric ( $date )) {
$date = strtotime ( $date );
}
if ( empty ( $date )) {
$date = get_system_time ();
}
return events_get_count_events_validated ( $filter , $period , $date ,
$filter_event_validated , $filter_event_critical ,
$filter_event_warning , $filter_event_no_validated );
}
/**
* Print tiny statistics of the status of one agent , group , etc .
*
* @ param mixed Array with the counts of the total modules , normal modules , critical modules , warning modules , unknown modules and fired alerts
* @ param bool return or echo flag
*
* @ return string html formatted tiny stats of modules / alerts of an agent
*/
function reporting_tiny_stats ( $counts_info , $return = false , $type = 'agent' , $separator = ':' , $strict_user = false ) {
global $config ;
$out = '' ;
// Depend the type of object, the stats will refer agents, modules...
switch ( $type ) {
case 'modules' :
$template_title [ 'total_count' ] = __ ( '%d Total modules' );
$template_title [ 'normal_count' ] = __ ( '%d Normal modules' );
$template_title [ 'critical_count' ] = __ ( '%d Critical modules' );
$template_title [ 'warning_count' ] = __ ( '%d Warning modules' );
$template_title [ 'unknown_count' ] = __ ( '%d Unknown modules' );
break ;
case 'agent' :
$template_title [ 'total_count' ] = __ ( '%d Total modules' );
$template_title [ 'normal_count' ] = __ ( '%d Normal modules' );
$template_title [ 'critical_count' ] = __ ( '%d Critical modules' );
$template_title [ 'warning_count' ] = __ ( '%d Warning modules' );
$template_title [ 'unknown_count' ] = __ ( '%d Unknown modules' );
$template_title [ 'fired_count' ] = __ ( '%d Fired alerts' );
break ;
default :
$template_title [ 'total_count' ] = __ ( '%d Total agents' );
$template_title [ 'normal_count' ] = __ ( '%d Normal agents' );
$template_title [ 'critical_count' ] = __ ( '%d Critical agents' );
$template_title [ 'warning_count' ] = __ ( '%d Warning agents' );
$template_title [ 'unknown_count' ] = __ ( '%d Unknown agents' );
$template_title [ 'not_init_count' ] = __ ( '%d not init agents' );
$template_title [ 'fired_count' ] = __ ( '%d Fired alerts' );
break ;
}
if ( $strict_user && $type == 'agent' ) {
$acltags = tags_get_user_module_and_tags ( $config [ 'id_user' ], 'AR' , $strict_user );
$filter [ 'disabled' ] = 0 ;
$id_agent = $counts_info [ 'id_agente' ];
$counts_info = array ();
$counts_info [ 'normal_count' ] = count ( tags_get_agent_modules ( $id_agent , $acltags , false , $filter , false , AGENT_MODULE_STATUS_NORMAL ));
$counts_info [ 'warning_count' ] = count ( tags_get_agent_modules ( $id_agent , $acltags , false , $filter , false , AGENT_MODULE_STATUS_WARNING ));
$counts_info [ 'critical_count' ] = count ( tags_get_agent_modules ( $id_agent , $acltags , false , $filter , false , AGENT_MODULE_STATUS_CRITICAL_BAD ));
$counts_info [ 'notinit_count' ] = count ( tags_get_agent_modules ( $id_agent , $acltags , false , $filter , false , AGENT_MODULE_STATUS_NOT_INIT ));
$counts_info [ 'unknown_count' ] = count ( tags_get_agent_modules ( $id_agent , $acltags , false , $filter , false , AGENT_MODULE_STATUS_UNKNOWN ));
$counts_info [ 'total_count' ] = $counts_info [ 'normal_count' ] + $counts_info [ 'warning_count' ] + $counts_info [ 'critical_count' ] + $counts_info [ 'unknown_count' ] + $counts_info [ 'notinit_count' ];
$all_agent_modules = tags_get_agent_modules ( $id_agent , $acltags , false , $filter );
if ( ! empty ( $all_agent_modules )) {
$mod_clause = " ( " . implode ( ',' , array_keys ( $all_agent_modules )) . " ) " ;
$counts_info [ 'fired_count' ] = ( int ) db_get_sql ( " SELECT COUNT(times_fired)
FROM talert_template_modules
WHERE times_fired != 0 AND id_agent_module IN " . $mod_clause );
}
else {
$counts_info [ 'fired_count' ] = 0 ;
}
}
// Store the counts in a data structure to print hidden divs with titles
$stats = array ();
if ( isset ( $counts_info [ 'total_count' ])) {
$not_init = isset ( $counts_info [ 'notinit_count' ]) ? $counts_info [ 'notinit_count' ] : 0 ;
$total_count = $counts_info [ 'total_count' ] - $not_init ;
$stats [] = array ( 'name' => 'total_count' , 'count' => $total_count , 'title' => sprintf ( $template_title [ 'total_count' ], $total_count ));
}
if ( isset ( $counts_info [ 'normal_count' ])) {
$normal_count = $counts_info [ 'normal_count' ];
$stats [] = array ( 'name' => 'normal_count' , 'count' => $normal_count , 'title' => sprintf ( $template_title [ 'normal_count' ], $normal_count ));
}
if ( isset ( $counts_info [ 'critical_count' ])) {
$critical_count = $counts_info [ 'critical_count' ];
$stats [] = array ( 'name' => 'critical_count' , 'count' => $critical_count , 'title' => sprintf ( $template_title [ 'critical_count' ], $critical_count ));
}
if ( isset ( $counts_info [ 'warning_count' ])) {
$warning_count = $counts_info [ 'warning_count' ];
$stats [] = array ( 'name' => 'warning_count' , 'count' => $warning_count , 'title' => sprintf ( $template_title [ 'warning_count' ], $warning_count ));
}
if ( isset ( $counts_info [ 'unknown_count' ])) {
$unknown_count = $counts_info [ 'unknown_count' ];
$stats [] = array ( 'name' => 'unknown_count' , 'count' => $unknown_count , 'title' => sprintf ( $template_title [ 'unknown_count' ], $unknown_count ));
}
if ( isset ( $counts_info [ 'not_init_count' ])) {
$not_init_count = $counts_info [ 'not_init_count' ];
$stats [] = array ( 'name' => 'not_init_count' ,
'count' => $not_init_count ,
'title' => sprintf ( $template_title [ 'not_init_count' ], $not_init_count ));
}
if ( isset ( $template_title [ 'fired_count' ])) {
if ( isset ( $counts_info [ 'fired_count' ])) {
$fired_count = $counts_info [ 'fired_count' ];
$stats [] = array ( 'name' => 'fired_count' , 'count' => $fired_count , 'title' => sprintf ( $template_title [ 'fired_count' ], $fired_count ));
}
}
$uniq_id = uniqid ();
foreach ( $stats as $stat ) {
$params = array ( 'id' => 'forced_title_' . $stat [ 'name' ] . '_' . $uniq_id ,
'class' => 'forced_title_layer' ,
'content' => $stat [ 'title' ],
'hidden' => true );
$out .= html_print_div ( $params , true );
}
// If total count is less than 0, is an error. Never show negative numbers
if ( $total_count < 0 ) {
$total_count = 0 ;
}
$out .= '<b>' . '<span id="total_count_' . $uniq_id . '" class="forced_title" style="font-size: 7pt">' . $total_count . '</span>' ;
if ( isset ( $fired_count ) && $fired_count > 0 )
$out .= ' ' . $separator . ' <span class="orange forced_title" id="fired_count_' . $uniq_id . '" style="font-size: 7pt">' . $fired_count . '</span>' ;
if ( isset ( $critical_count ) && $critical_count > 0 )
$out .= ' ' . $separator . ' <span class="red forced_title" id="critical_count_' . $uniq_id . '" style="font-size: 7pt">' . $critical_count . '</span>' ;
if ( isset ( $warning_count ) && $warning_count > 0 )
$out .= ' ' . $separator . ' <span class="yellow forced_title" id="warning_count_' . $uniq_id . '" style="font-size: 7pt">' . $warning_count . '</span>' ;
if ( isset ( $unknown_count ) && $unknown_count > 0 )
$out .= ' ' . $separator . ' <span class="grey forced_title" id="unknown_count_' . $uniq_id . '" style="font-size: 7pt">' . $unknown_count . '</span>' ;
if ( isset ( $not_init_count ) && $not_init_count > 0 )
$out .= ' ' . $separator . ' <span class="blue forced_title" id="not_init_count_' . $uniq_id . '" style="font-size: 7pt">' . $not_init_count . '</span>' ;
if ( isset ( $normal_count ) && $normal_count > 0 )
$out .= ' ' . $separator . ' <span class="green forced_title" id="normal_count_' . $uniq_id . '" style="font-size: 7pt">' . $normal_count . '</span>' ;
$out .= '</b>' ;
if ( $return ) {
return $out ;
}
else {
echo $out ;
}
}
function reporting_network_interfaces_table ( $content , $report , $mini , $item_title = " " , & $table = null , & $pdf = null ) {
global $config ;
include_once ( $config [ 'homedir' ] . " /include/functions_custom_graphs.php " );
if ( empty ( $item_title )) {
$group_name = groups_get_name ( $content [ 'id_group' ]);
$item_title = __ ( 'Network interfaces' ) . " - " . sprintf ( __ ( 'Group "%s"' ), $group_name );
}
$is_html = $table !== null ;
$is_pdf = $pdf !== null ;
$ttl = $is_pdf ? 2 : 1 ;
$graph_width = 900 ;
$graph_height = 200 ;
$datetime = $report [ 'datetime' ];
$period = $content [ 'period' ];
if ( $is_pdf ) {
$graph_width = 800 ;
$graph_height = 200 ;
pdf_header_content ( $pdf , $content , $report , $item_title , false , $content [ " description " ]);
}
else if ( $is_html ) {
reporting_header_content ( $mini , $content , $report , $table , $item_title );
//RUNNING
$table -> style [ 1 ] = 'text-align: right' ;
// Put description at the end of the module (if exists)
$table -> colspan [ 0 ][ 1 ] = 2 ;
$next_row = 1 ;
if ( $content [ " description " ] != " " ) {
$table -> colspan [ $next_row ][ 0 ] = 3 ;
$next_row ++ ;
$data_desc = array ();
$data_desc [ 0 ] = $content [ " description " ];
array_push ( $table -> data , $data_desc );
}
}
$filter = array (
'id_grupo' => $content [ 'id_group' ],
'disabled' => 0
);
$network_interfaces_by_agents = agents_get_network_interfaces ( false , $filter );
if ( empty ( $network_interfaces_by_agents )) {
if ( $is_pdf ) {
$pdf -> addHTML ( __ ( 'The group has no agents or none of the agents has any network interface' ));
}
else if ( $is_html ) {
$data = array ();
$data [ 0 ] = __ ( 'The group has no agents or none of the agents has any network interface' );
$table -> colspan [ $next_row ][ 0 ] = 3 ;
array_push ( $table -> data , $data );
}
return ;
}
else {
foreach ( $network_interfaces_by_agents as $agent_id => $agent ) {
$table_agent = new StdCLass ();
$table_agent -> width = '100%' ;
$table_agent -> data = array ();
$table_agent -> head = array ();
$table_agent -> head [ 0 ] = sprintf ( __ ( " Agent '%s' " ), $agent [ 'name' ]);
$table_agent -> headstyle = array ();
$table_agent -> headstyle [ 0 ] = 'font-size: 16px;' ;
$table_agent -> style [ 0 ] = 'text-align: center' ;
if ( $is_pdf ) {
$table_agent -> class = 'table_sla table_beauty' ;
$table_agent -> headstyle [ 0 ] = 'background: #373737; color: #FFF; display: table-cell; font-size: 16px; border: 1px solid grey' ;
}
$table_agent -> data [ 'interfaces' ] = " " ;
foreach ( $agent [ 'interfaces' ] as $interface_name => $interface ) {
$table_interface = new StdClass ();
$table_interface -> width = '100%' ;
$table_interface -> data = array ();
$table_interface -> rowstyle = array ();
$table_interface -> head = array ();
$table_interface -> cellstyle = array ();
$table_interface -> title = sprintf ( __ ( " Interface '%s' throughput graph " ), $interface_name );
$table_interface -> head [ 'ip' ] = __ ( 'IP' );
$table_interface -> head [ 'mac' ] = __ ( 'Mac' );
$table_interface -> head [ 'status' ] = __ ( 'Actual status' );
$table_interface -> style [ 'ip' ] = 'text-align: left' ;
$table_interface -> style [ 'mac' ] = 'text-align: left' ;
$table_interface -> style [ 'status' ] = 'width: 150px; text-align: center' ;
if ( $is_pdf ) {
$table_interface -> class = 'table_sla table_beauty' ;
$table_interface -> titlestyle = 'background: #373737; color: #FFF; display: table-cell; font-size: 12px; border: 1px solid grey' ;
$table_interface -> headstyle [ 'ip' ] = 'text-align: left; background: #666; color: #FFF; display: table-cell; font-size: 11px; border: 1px solid grey' ;
$table_interface -> headstyle [ 'mac' ] = 'text-align: left; background: #666; color: #FFF; display: table-cell; font-size: 11px; border: 1px solid grey' ;
$table_interface -> headstyle [ 'status' ] = 'background: #666; color: #FFF; display: table-cell; font-size: 11px; border: 1px solid grey' ;
$table_interface -> style [ 'ip' ] = 'text-align: left; display: table-cell; font-size: 10px;' ;
$table_interface -> style [ 'mac' ] = 'text-align: left; display: table-cell; font-size: 10px;' ;
$table_interface -> style [ 'status' ] = 'text-align: center; display: table-cell; font-size: 10px;' ;
}
$data = array ();
$data [ 'ip' ] = ! empty ( $interface [ 'ip' ]) ? $interface [ 'ip' ] : " -- " ;
$data [ 'mac' ] = ! empty ( $interface [ 'mac' ]) ? $interface [ 'mac' ] : " -- " ;
$data [ 'status' ] = $interface [ 'status_image' ];
$table_interface -> data [ 'data' ] = $data ;
if ( ! empty ( $interface [ 'traffic' ])) {
$only_image = ! ( bool ) $config [ 'flash_charts' ] || $is_pdf ? true : false ;
$graph = custom_graphs_print ( 0 ,
$graph_height ,
$graph_width ,
$period ,
null ,
true ,
$date ,
$only_image ,
'white' ,
array_values ( $interface [ 'traffic' ]),
$config [ 'homeurl' ],
array_keys ( $interface [ 'traffic' ]),
array_fill ( 0 , count ( $interface [ 'traffic' ]), " bytes/s " ),
false ,
true ,
true ,
true ,
$ttl );
$table_interface -> data [ 'graph' ] = $graph ;
$table_interface -> colspan [ 'graph' ][ 0 ] = count ( $table_interface -> head );
$table_interface -> cellstyle [ 'graph' ][ 0 ] = 'text-align: center;' ;
}
$table_agent -> data [ 'interfaces' ] .= html_print_table ( $table_interface , true );
$table_agent -> colspan [ $interface_name ][ 0 ] = 3 ;
}
if ( $is_html ) {
$table -> data [ $agent_id ] = html_print_table ( $table_agent , true );
$table -> colspan [ $agent_id ][ 0 ] = 3 ;
}
else if ( $is_pdf ) {
$html = html_print_table ( $table_agent , true );
$pdf -> addHTML ( $html );
}
}
}
}
function reporting_get_agents_by_status ( $data , $graph_width = 250 , $graph_height = 150 , $links = false ) {
global $config ;
if ( $links == false ) {
$links = array ();
}
$table_agent = html_get_predefined_table ();
$agent_data = array ();
$agent_data [ 0 ] = html_print_image ( 'images/agent_critical.png' , true , array ( 'title' => __ ( 'Agents critical' )));
$agent_data [ 1 ] = " <a style='color: #FC4444;' href=' " . $links [ 'agents_critical' ] . " '><b><span style='font-size: 12pt; font-weight: bold; color: #FC4444;'> " . format_numeric ( $data [ 'agent_critical' ]) . " </span></b></a> " ;
$agent_data [ 2 ] = html_print_image ( 'images/agent_warning.png' , true , array ( 'title' => __ ( 'Agents warning' )));
$agent_data [ 3 ] = " <a style='color: #FAD403;' href=' " . $links [ 'agents_warning' ] . " '><b><span style='font-size: 12pt; font-weight: bold; color: #FAD403;'> " . format_numeric ( $data [ 'agent_warning' ]) . " </span></b></a> " ;
$table_agent -> data [] = $agent_data ;
$agent_data = array ();
$agent_data [ 0 ] = html_print_image ( 'images/agent_ok.png' , true , array ( 'title' => __ ( 'Agents ok' )));
$agent_data [ 1 ] = " <a style='color: #80BA27;' href=' " . $links [ 'agents_ok' ] . " '><b><span style='font-size: 12pt; font-weight: bold; color: #80BA27;'> " . format_numeric ( $data [ 'agent_ok' ]) . " </span></b></a> " ;
$agent_data [ 2 ] = html_print_image ( 'images/agent_unknown.png' , true , array ( 'title' => __ ( 'Agents unknown' )));
$agent_data [ 3 ] = " <a style='color: #B2B2B2;' href=' " . $links [ 'agents_unknown' ] . " '><b><span style='font-size: 12pt; font-weight: bold; color: #B2B2B2;'> " . format_numeric ( $data [ 'agent_unknown' ]) . " </span></b></a> " ;
$table_agent -> data [] = $agent_data ;
$agent_data = array ();
$agent_data [ 0 ] = html_print_image ( 'images/agent_notinit.png' , true , array ( 'title' => __ ( 'Agents not init' )));
$agent_data [ 1 ] = " <a style='color: #5BB6E5;' href=' " . $links [ 'agents_not_init' ] . " '><b><span style='font-size: 12pt; font-weight: bold; color: #5BB6E5;'> " . format_numeric ( $data [ 'agent_not_init' ]) . " </span></b></a> " ;
$agent_data [ 2 ] = " " ;
$agent_data [ 3 ] = " " ;
$table_agent -> data [] = $agent_data ;
if ( ! defined ( 'METACONSOLE' )) {
$agents_data = ' < fieldset class = " databox tactical_set " >
< legend > ' .
__ ( 'Agents by status' ) .
'</legend>' .
html_print_table ( $table_agent , true ) . '</fieldset>' ;
}
else {
$table_agent -> style = array ();
$table_agent -> class = " tactical_view " ;
$agents_data = ' < fieldset class = " tactical_set " >
< legend > ' .
__ ( 'Agents by status' ) .
'</legend>' .
html_print_table ( $table_agent , true ) . '</fieldset>' ;
}
return $agents_data ;
}
function reporting_get_total_agents_and_monitors ( $data , $graph_width = 250 , $graph_height = 150 ) {
global $config ;
$total_agent = $data [ 'agent_ok' ] + $data [ 'agent_warning' ] + $data [ 'agent_critical' ] + $data [ 'gent_unknown' ] + $data [ 'agent_not_init' ];
$total_module = $data [ 'monitor_ok' ] + $data [ 'monitor_warning' ] + $data [ 'monitor_critical' ] + $data [ 'monitor_unknown' ] + $data [ 'monitor_not_init' ];
$table_total = html_get_predefined_table ();
$total_data = array ();
$total_data [ 0 ] = html_print_image ( 'images/agent.png' , true , array ( 'title' => __ ( 'Total agents' )));
$total_data [ 1 ] = $total_agent <= 0 ? '-' : $total_agent ;
$total_data [ 2 ] = html_print_image ( 'images/module.png' , true , array ( 'title' => __ ( 'Monitor checks' )));
$total_data [ 3 ] = $total_module <= 0 ? '-' : $total_module ;
$table_total -> data [] = $total_data ;
$total_agent_module = ' < fieldset class = " databox tactical_set " >
< legend > ' .
__ ( 'Total agents and monitors' ) .
'</legend>' .
html_print_table ( $table_total , true ) . '</fieldset>' ;
return $total_agent_module ;
}
function reporting_get_total_servers ( $num_servers ) {
global $config ;
$table_node = html_get_predefined_table ();
$node_data = array ();
$node_data [ 0 ] = html_print_image ( 'images/server_export.png' , true , array ( 'title' => __ ( 'Nodes' )));
$node_data [ 1 ] = " <b><span style='font-size: 12pt; font-weight: bold; color: black;'> " . format_numeric ( $num_servers ) . " </span></b> " ;
$table_node -> data [] = $node_data ;
if ( ! defined ( 'METACONSOLE' )){
$node_overview = ' < fieldset class = " databox tactical_set " >
< legend > ' .
__ ( 'Node overview' ) .
'</legend>' .
html_print_table ( $table_node , true ) . '</fieldset>' ;
} else {
$table_node -> style = array ();
$table_node -> class = " tactical_view " ;
$node_overview = ' < fieldset class = " tactical_set " >
< legend > ' .
__ ( 'Node overview' ) .
'</legend>' .
html_print_table ( $table_node , true ) . '</fieldset>' ;
}
return $node_overview ;
}
function reporting_get_events ( $data , $links = false ) {
global $config ;
$table_events -> width = " 100% " ;
if ( defined ( 'METACONSOLE' ))
$style = " vertical-align:middle; " ;
else
$style = " " ;
if ( defined ( 'METACONSOLE' )){
$table_events -> style [ 0 ] = " background-color:#FC4444 " ;
$table_events -> data [ 0 ][ 0 ] = html_print_image ( 'images/module_event_critical.png' , true , array ( 'title' => __ ( 'Critical events' )));
$table_events -> data [ 0 ][ 0 ] .= " " .
" <a style='color:#FFF; font-size: 12pt; font-weight: bold; " . $style . " ' href=' " . $links [ 'critical' ] . " '> " . format_numeric ( $data [ 'critical' ]) . " </a> " ;
$table_events -> style [ 1 ] = " background-color:#FAD403 " ;
$table_events -> data [ 0 ][ 1 ] = html_print_image ( 'images/module_event_warning.png' , true , array ( 'title' => __ ( 'Warning events' )));
$table_events -> data [ 0 ][ 1 ] .= " " .
" <a style='color:#FFF; font-size: 12pt; font-weight: bold; " . $style . " ' href=' " . $links [ 'warning' ] . " '> " . format_numeric ( $data [ 'warning' ]) . " </a> " ;
$table_events -> style [ 2 ] = " background-color:#80BA27 " ;
$table_events -> data [ 0 ][ 2 ] = html_print_image ( 'images/module_event_ok.png' , true , array ( 'title' => __ ( 'OK events' )));
$table_events -> data [ 0 ][ 2 ] .= " " .
" <a style='color:#FFF; font-size: 12pt; font-weight: bold; " . $style . " ' href=' " . $links [ 'normal' ] . " '> " . format_numeric ( $data [ 'normal' ]) . " </a> " ;
$table_events -> style [ 3 ] = " background-color:#B2B2B2 " ;
$table_events -> data [ 0 ][ 3 ] = html_print_image ( 'images/module_event_unknown.png' , true , array ( 'title' => __ ( 'Unknown events' )));
$table_events -> data [ 0 ][ 3 ] .= " " .
" <a style='color:#FFF; font-size: 12pt; font-weight: bold; " . $style . " ' href=' " . $links [ 'unknown' ] . " '> " . format_numeric ( $data [ 'unknown' ]) . " </a> " ;
}
else {
$table_events -> data [ 0 ][ 0 ] = html_print_image ( 'images/module_critical.png' , true , array ( 'title' => __ ( 'Critical events' )));
$table_events -> data [ 0 ][ 0 ] .= " " .
" <a style='color: #FC4444; " . $style . " ' href=' " . $links [ 'critical' ] . " '><b><span style='font-size: 12pt; font-weight: bold; color: #FC4444;'> " .
format_numeric ( $data [ 'critical' ]) . " </span></b></a> " ;
$table_events -> data [ 0 ][ 1 ] = html_print_image ( 'images/module_warning.png' , true , array ( 'title' => __ ( 'Warning events' )));
$table_events -> data [ 0 ][ 1 ] .= " " .
" <a style='color: #FAD403; " . $style . " ' href=' " . $links [ 'warning' ] . " '><b><span style='font-size: 12pt; font-weight: bold; color: #FAD403;'> " .
format_numeric ( $data [ 'warning' ]) . " </span></b></a> " ;
$table_events -> data [ 0 ][ 2 ] = html_print_image ( 'images/module_ok.png' , true , array ( 'title' => __ ( 'OK events' )));
$table_events -> data [ 0 ][ 2 ] .= " " .
" <a style='color: #80BA27; " . $style . " ' href=' " . $links [ 'normal' ] . " '><b style='font-size: 12pt; font-weight: bold; color: #80BA27;'> " .
format_numeric ( $data [ 'normal' ]) . " </b></a> " ;
$table_events -> data [ 0 ][ 3 ] = html_print_image ( 'images/module_unknown.png' , true , array ( 'title' => __ ( 'Unknown events' )));
$table_events -> data [ 0 ][ 3 ] .= " " .
" <a style='color: #B2B2B2; " . $style . " ' href=' " . $links [ 'unknown' ] . " '><b><span style='font-size: 12pt; font-weight: bold; color: #B2B2B2;'> " .
format_numeric ( $data [ 'unknown' ]) . " </span></b></a> " ;
}
if ( ! defined ( 'METACONSOLE' )) {
$event_view = ' < fieldset class = " databox tactical_set " >
< legend > ' .
__ ( 'Events by criticity' ) .
'</legend>' .
html_print_table ( $table_events , true ) . '</fieldset>' ;
}
else {
$table_events -> class = " tactical_view " ;
$table_events -> styleTable = " text-align:center; " ;
$table_events -> size [ 0 ] = " 10% " ;
$table_events -> size [ 1 ] = " 10% " ;
$table_events -> size [ 2 ] = " 10% " ;
$table_events -> size [ 3 ] = " 10% " ;
$event_view = ' < fieldset class = " tactical_set " >
< legend > ' .
__ ( 'Events by criticity' ) .
'</legend>' .
html_print_table ( $table_events , true ) . '</fieldset>' ;
}
return $event_view ;
}
function reporting_get_last_activity () {
global $config ;
// Show last activity from this user
$table -> width = '100%' ;
$table -> data = array ();
$table -> size = array ();
$table -> size [ 2 ] = '150px' ;
$table -> size [ 3 ] = '130px' ;
$table -> size [ 5 ] = '200px' ;
$table -> head = array ();
$table -> head [ 0 ] = __ ( 'User' );
$table -> head [ 1 ] = '' ;
$table -> head [ 2 ] = __ ( 'Action' );
$table -> head [ 3 ] = __ ( 'Date' );
$table -> head [ 4 ] = __ ( 'Source IP' );
$table -> head [ 5 ] = __ ( 'Comments' );
$table -> title = '<span>' . __ ( 'Last activity in Pandora FMS console' ) . '</span>' ;
switch ( $config [ " dbtype " ]) {
case " mysql " :
$sql = sprintf ( " SELECT id_usuario,accion,fecha,ip_origen,descripcion,utimestamp
FROM tsesion
WHERE ( `utimestamp` > UNIX_TIMESTAMP ( NOW ()) - " . SECONDS_1WEEK . " )
AND `id_usuario` = '%s' ORDER BY `utimestamp` DESC LIMIT 5 " , $config["id_user"] );
break ;
case " postgresql " :
$sql = sprintf ( " SELECT \" id_usuario \" , accion, fecha, \" ip_origen \" , descripcion, utimestamp
FROM tsesion
WHERE ( \ " utimestamp \" > ceil(date_part('epoch', CURRENT_TIMESTAMP)) - " . SECONDS_1WEEK . " )
AND \ " id_usuario \" = '%s' ORDER BY \" utimestamp \" DESC LIMIT 5 " , $config [ " id_user " ]);
break ;
case " oracle " :
$sql = sprintf ( " SELECT id_usuario, accion, fecha, ip_origen, descripcion, utimestamp
FROM tsesion
WHERE (( utimestamp > ceil (( sysdate - to_date ( '19700101000000' , 'YYYYMMDDHH24MISS' )) * ( " . SECONDS_1DAY . " )) - " . SECONDS_1WEEK . " )
AND id_usuario = '%s' ) AND rownum <= 10 ORDER BY utimestamp DESC " , $config["id_user"] );
break ;
}
$sessions = db_get_all_rows_sql ( $sql );
if ( $sessions === false )
$sessions = array ();
foreach ( $sessions as $session ) {
$data = array ();
switch ( $config [ " dbtype " ]) {
case " mysql " :
case " oracle " :
$session_id_usuario = $session [ 'id_usuario' ];
$session_ip_origen = $session [ 'ip_origen' ];
break ;
case " postgresql " :
$session_id_usuario = $session [ 'id_usuario' ];
$session_ip_origen = $session [ 'ip_origen' ];
break ;
}
$data [ 0 ] = '<strong>' . $session_id_usuario . '</strong>' ;
$data [ 1 ] = ui_print_session_action_icon ( $session [ 'accion' ], true );
$data [ 2 ] = $session [ 'accion' ];
$data [ 3 ] = ui_print_help_tip ( $session [ 'fecha' ], true ) . human_time_comparation ( $session [ 'utimestamp' ], 'tiny' );
$data [ 4 ] = $session_ip_origen ;
$data [ 5 ] = io_safe_output ( $session [ 'descripcion' ]);
array_push ( $table -> data , $data );
}
if ( defined ( " METACONSOLE " ))
$table -> class = " databox_tactical " ;
return html_print_table ( $table , true );
}
function reporting_get_event_histogram ( $events ) {
global $config ;
include_once ( '../../include/graphs/functions_gd.php' );
$max_value = count ( $events );
$ttl = 1 ;
$urlImage = ui_get_full_url ( false , true , false , false );
$colors = array (
EVENT_CRIT_MAINTENANCE => COL_MAINTENANCE ,
EVENT_CRIT_INFORMATIONAL => COL_INFORMATIONAL ,
EVENT_CRIT_NORMAL => COL_MINOR ,
EVENT_CRIT_MINOR => COL_NORMAL ,
EVENT_CRIT_WARNING => COL_WARNING ,
EVENT_CRIT_MAJOR => COL_MAJOR ,
EVENT_CRIT_CRITICAL => COL_CRITICAL
);
foreach ( $events as $data ) {
switch ( $data [ 'criticity' ]) {
case 0 :
$color = EVENT_CRIT_MAINTENANCE ;
break ;
case 1 :
$color = EVENT_CRIT_INFORMATIONAL ;
break ;
case 2 :
$color = EVENT_CRIT_NORMAL ;
break ;
case 3 :
$color = EVENT_CRIT_WARNING ;
break ;
case 4 :
$color = EVENT_CRIT_CRITICAL ;
break ;
case 5 :
$color = EVENT_CRIT_MINOR ;
break ;
case 6 :
$color = EVENT_CRIT_MAJOR ;
break ;
case 20 :
$color = EVENT_CRIT_NOT_NORMAL ;
break ;
case 34 :
$color = EVENT_CRIT_WARNING_OR_CRITICAL ;
break ;
}
$graph_data [] = array (
'data' => $color ,
'utimestamp' => 1
);
}
$table -> width = '100%' ;
$table -> data = array ();
$table -> size = array ();
$table -> head = array ();
$table -> title = '<span>' . __ ( 'Events info (1hr.)' ) . '</span>' ;
$table -> data [ 0 ][ 0 ] = " " ;
if ( ! empty ( $graph_data )) {
$slicebar = slicesbar_graph ( $graph_data , $max_value , 700 , 25 , $colors , $config [ 'fontpath' ], $config [ 'round_corner' ], $urlImage , $ttl );
$table -> data [ 0 ][ 0 ] = $slicebar ;
} else {
$table -> data [ 0 ][ 0 ] = __ ( 'No events' );
}
if ( ! defined ( 'METACONSOLE' )){
$event_graph = ' < fieldset class = " databox tactical_set " >
< legend > ' .
__ ( 'Events info (1hr)' ) .
'</legend>' .
html_print_table ( $table , true ) . '</fieldset>' ;
}
else {
$table -> class = 'tactical_view' ;
$event_graph = '<fieldset id="event_tactical" class="tactical_set">' .
html_print_table ( $table , true ) . '</fieldset>' ;
}
return $event_graph ;
}
?>