diff --git a/pandora_console/include/functions_reporting.php b/pandora_console/include/functions_reporting.php index d3f41ad895..3d88fa8d1e 100644 --- a/pandora_console/include/functions_reporting.php +++ b/pandora_console/include/functions_reporting.php @@ -37,8432 +37,116 @@ 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; +function reporting_make_reporting_data($id_report, $datetime) { + $return = array(); - // 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; -} - -/** - * 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] = '' . format_numeric($server_performance ["total_modules"]) . ''; - - $tdata[2] = '' . format_numeric($server_performance ["total_modules_rate"], 2) . ''; - $tdata[3] = html_print_image('images/module.png', true, array('title' => __('Ratio') . ': ' . __('Modules by second'), 'width' => '16px')) . '/sec '; - - $table_srv->rowclass[] = ''; - $table_srv->data[] = $tdata; - - $tdata = array(); - $tdata[0] = '
'; - $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] = '' . format_numeric($server_performance ["total_local_modules"]) . ''; - - $tdata[2] = '' . - format_numeric($server_performance ["local_modules_rate"], 2) . ''; - $tdata[3] = html_print_image('images/module.png', true, array('title' => __('Ratio') . ': ' . __('Modules by second'), 'width' => '16px')) . '/sec '; - - $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] = '' . format_numeric($server_performance ["total_remote_modules"]) . ''; - - $tdata[2] = '' . format_numeric($server_performance ["remote_modules_rate"], 2) . ''; - $tdata[3] = html_print_image('images/module.png', true, array('title' => __('Ratio') . ': ' . __('Modules by second'), 'width' => '16px')) . '/sec '; - - $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] = '' . format_numeric($server_performance ["total_network_modules"]) . ''; - - $tdata[2] = '' . - format_numeric($server_performance["network_modules_rate"], 2) . - ''; - $tdata[3] = html_print_image('images/module.png', true, array('title' => __('Ratio') . ': ' . __('Modules by second'), 'width' => '16px')) . '/sec '; - - $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] = '' . format_numeric($server_performance ["total_plugin_modules"]) . ''; - - $tdata[2] = '' . format_numeric($server_performance ["plugin_modules_rate"], 2) . ''; - $tdata[3] = html_print_image('images/module.png', true, array('title' => __('Ratio') . ': ' . __('Modules by second'), 'width' => '16px')) . '/sec '; - - $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] = '' . format_numeric($server_performance ["total_prediction_modules"]) . ''; - - $tdata[2] = '' . format_numeric($server_performance ["prediction_modules_rate"], 2) . ''; - $tdata[3] = html_print_image('images/module.png', true, array('title' => __('Ratio') . ': ' . __('Modules by second'), 'width' => '16px')) . '/sec '; - - $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] = '' . format_numeric($server_performance ["total_wmi_modules"]) . ''; - - $tdata[2] = '' . format_numeric($server_performance ["wmi_modules_rate"], 2) . ''; - $tdata[3] = html_print_image('images/module.png', true, array('title' => __('Ratio') . ': ' . __('Modules by second'), 'width' => '16px')) . '/sec '; - - $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] = '' . - format_numeric($server_performance ["total_web_modules"]) . - ''; - - $tdata[2] = '' . - format_numeric($server_performance ["web_modules_rate"], 2) . - ''; - $tdata[3] = html_print_image('images/module.png', true, array('title' => __('Ratio') . ': ' . __('Modules by second'), 'width' => '16px')) . '/sec '; - - $table_srv->rowclass[] = ''; - $table_srv->data[] = $tdata; - } - - $tdata = array(); - $tdata[0] = '
'; - $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] = '' . - format_numeric($system_events) . ''; - - $table_srv->colspan[count($table_srv->data)][1] = 3; - $table_srv->rowclass[] = ''; - $table_srv->data[] = $tdata; - } - - $output = '
- ' . - __('Server performance') . - '' . - html_print_table($table_srv, true) . '
'; - - 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] = '' . $tdata[1] . ''; - - $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] = '' . $tdata[3] . ''; - $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] = '' . $tdata[1] . ''; - - $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] = '' . $tdata[3] . ''; - $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] = '' . $tdata[1] . ''; - - $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] = '
' . - '
' . - graph_agent_status(false, $graph_width, $graph_height, true, true, $data_agents) . - '
'; - $table_mbs->rowclass[] = ''; - $table_mbs->data[] = $tdata; - } - - if(!defined("METACONSOLE")){ - $output = ' -
- ' . - __('Monitors by status') . - '' . - html_print_table($table_mbs, true) . - '
'; - } - else{ - $table_mbs->class = "tactical_view"; - $table_mbs->style=array(); - $output = ' -
- ' . - __('Monitors by status') . - '' . - html_print_table($table_mbs, true) . - '
'; - } - 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] = '' . __('Module status') . ''; - $tdata[2] = '' . __('Alert level') . ''; - $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] = '
' . graph_agent_status (false, $graph_width, $graph_height, true, true) . '
'; - } - else { - $tdata[2] = html_print_image('images/image_problem.png', true, array('width' => $graph_width)); - } - if ($data["monitor_alerts"] > 0) { - $tdata[2] = '
' . graph_alert_status ($data["monitor_alerts"], $data["monitor_alerts_fired"], $graph_width, $graph_height, true, true) . '
'; - } - else { - $tdata[2] = html_print_image('images/image_problem.png', true, array('width' => $graph_width)); - } - $table_sum->rowclass[] = ''; - $table_sum->data[] = $tdata; - - $output = '
- ' . - __('Summary') . - '' . - html_print_table($table_sum, true) . '
'; - - 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] = '' . $tdata[1] . ''; - - $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] = '' . $tdata[3] . ''; - $table_al->rowclass[] = ''; - $table_al->data[] = $tdata; - - if(!defined('METACONSOLE')){ - $output = '
- ' . - __('Defined and fired alerts') . - '' . - html_print_table($table_al, true) . '
'; - }else{ - $table_al->class = "tactical_view"; - $table_al->style = array(); - $output = '
- ' . - __('Defined and fired alerts') . - '' . - html_print_table($table_al, true) . '
'; - } - 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] = '' . $tdata[1] . ''; - - $tdata[2] = $tdata[3] = ' '; - $table_us->rowclass[] = ''; - $table_us->data[] = $tdata; - - $output = '
- ' . - __('Users') . - '' . - html_print_table($table_us, true) . '
'; - - 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] = '' . $tdata[1] . ''; - - $tdata[2] = html_print_image('images/module.png', true, array('title' => __('Monitor checks'))); - $tdata[3] = $data["monitor_checks"] <= 0 ? '-' : $data["monitor_checks"]; - $tdata[3] = '' . $tdata[3] . ''; - $table_am->rowclass[] = ''; - $table_am->data[] = $tdata; - - $output = '
- ' . - __('Total agents and monitors') . - '' . - html_print_table($table_am, true) . '
'; - - 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] = '
- ' . - __('Server health') . ui_print_help_tip (sprintf(__('%d Downed servers'), $servers["down"]), true) . - '' . - progress_bar($servers["health"], $width, $height, '', 0) . '
'; - $table_ind->rowclass[] = ''; - $table_ind->data[] = $tdata; - - $tdata[0] = '
- ' . - __('Monitor health') . ui_print_help_tip (sprintf(__('%d Not Normal monitors'), $data["monitor_not_normal"]), true) . - '' . - progress_bar($data["monitor_health"], $width, $height, $data["monitor_health"].'% '.__('of monitors up'), 0) . '
'; - $table_ind->rowclass[] = ''; - $table_ind->data[] = $tdata; - - $tdata[0] = '
- ' . - __('Module sanity') . ui_print_help_tip (sprintf(__('%d Not inited monitors'), $data["monitor_not_init"]), true) . - '' . - progress_bar($data["module_sanity"], $width, $height, $data["module_sanity"].'% '.__('of total modules inited'), 0) . '
'; - $table_ind->rowclass[] = ''; - $table_ind->data[] = $tdata; - - $tdata[0] = '
- ' . - __('Alert level') . ui_print_help_tip (sprintf(__('%d Fired alerts'), $data["monitor_alerts_fired"]), true) . - '' . - progress_bar($data["alert_level"], $width, $height, $data["alert_level"].'% '.__('of defined alerts not fired'), 0) . '
'; - $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] = ''; - - $data[3] = ''; - - 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 = ''; - $data[] = $list; - - $list = ''; - - 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] = ''; - - $data[3] = ''; - - 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 .= ''.__('Alerts fired').': '.sizeof ($alerts_fired).'
'; - $output .= ''.__('Total alerts monitored').': '.sizeof ($alerts).'
'; - - 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 .= ''.__('Total monitors').': '.count ($monitors).'
'; - $output .= ''.__('Monitors down on period').': '.count ($monitors_down).'
'; - - $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 = '' . - sprintf(__('Agents in group: %s'), count($agents)) . - '
'; - - 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'].'"'; + switch ($config["dbtype"]) { + case "mysql": + $contents = db_get_all_rows_field_filter ("treport_content", + "id_report", $id_report, "`order`"); break; - case 'equal': - case 'not_equal': - $data[2] = $template['value']; - + case "postgresql": + $contents = db_get_all_rows_field_filter ("treport_content", + "id_report", $id_report, '"order"'); break; - case 'max-min': - $data[2] = __('Min.').': '.$template['min_value']. ' '; - $data[2] .= __('Max.').': '.$template['max_value']. ' '; - + case "oracle": + $contents = db_get_all_rows_field_filter ("treport_content", + "id_report", $id_report, '"order"'); 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 .= '
'; - $output .= '

' . - __('Agent') . ' - ' . agents_get_name ($id_agent) . '

'; - $output .= '

'.__('Modules').'

'; - $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 .= '

'.__('Alerts').'

'; - $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 .= '
'; - 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 .= '

'.__('Monitors').'

'; - $output .= html_print_table ($table_monitors, true); - - $output .= ''; - - 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)
'; - } - 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[] = '' . __('System') . ''; - } - else { - $user_name = db_get_value ('fullname', 'tusuario', 'id_user', $event['id_usuario']); - $data[] = io_safe_output($user_name); - } - $data[] = '' . - date($config['date_format'], $event['timestamp_rep']) . ''; - 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)
'; - } - 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[] = '' . __('System') . ''; - } - else { - $user_name = db_get_value ('fullname', 'tusuario', 'id_user', $event['id_usuario']); - $data[] = io_safe_output($user_name); - } - $data[] = '' . - 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 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)
'; - } - 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")) { + if ($contents === false) { return $return; } - if ($filter != '') { - $filter = 'AND '; - } + $report["group_name"] = groups_get_name ($report['id_group']); - $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 $return; +} - $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); +function reporting_simple_graph($id_report, $id_report_item, $type = 'dinamic') { + global $config; + + $return = array(); + + $content = db_get_row('treport_content_item', 'id', $id_report_item); + if (empty($content['name'])) { + $content['name'] = __('Simple graph'); + } + + $module_name = io_safe_output( + modules_get_agentmodule_name($content['id_agent_module'])); + $agent_name = io_safe_output( + modules_get_agentmodule_agent_name ($content['id_agent_module'])); + + + + + $return['title'] = $content['name']; + $return['subtitle'] = $agent_name . " - " . $module_name; + $return["description"] = $content["description"]; + $return["date"] = reporting_get_date_text($id_report, $id_report_item); + + // Get chart + switch ($type) { + case 'dinamic': + break; + case 'static': + break; + case 'data': + break; + } + + return reporting_check_structure_content($return); +} + +function reporting_get_date_text($id_report, $id_report_item) { + global $config; + + $return = array(); + $return['date'] = ""; + $return['period'] = ""; + $return['from'] = ""; + $return['to'] = ""; + + $report = db_get_row('treport_content_item', 'id', $id_report_item); + $content = db_get_row('treport', 'id_report', $id_report); + + if ($content['period'] == 0) { + $es = json_decode($content['external_source'], true); + if ($es['date'] == 0) { + $return['date'] = __('Last data'); } else { - $return["status"] = STATUS_AGENT_OK; - $return["status_img"] = ui_print_status_image (STATUS_AGENT_OK, __('All Monitors OK'), true); + $return['date'] = date($config["date_format"], $es['date']); } } - - //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); + else { + $return['period'] = human_time_description_raw ($content['period']); + $return['from'] = date($config["date_format"], $report["datetime"] - $content['period']); + $return['from'] = date($config["date_format"], $report["datetime"]); } 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 - * + * Check the common items exits */ -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 = '

'; - $sizhfin = '

'; - } - - $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[] = "
" . $sizh . $date . $sizhfin . "
"; - } - else { - $data[] = "
" . $sizh . - "(" . human_time_description_raw ($content['period']) . ") " . - __("From:") . " " . date($config["date_format"], $report["datetime"] - $content['period']) . "
" . - __("To:") . " " . date($config["date_format"], $report["datetime"]) . "
" . - $sizhfin . "
"; - } - - $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).'
' . - 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).'
' . - 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).'
' . - 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] = '

'.$value.'

'; - 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).'
' . - 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] = ''; - $data[5] = ''.__('Unknown').''; - // $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] = ''; - $data[5] = ''.__('OK').''; - } - else { - $sla_failed = true; - $data[4] = ''; - $data[5] = ''.__('Fail').''; - } - - // 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] .= ""; - - 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] .= "
"; - $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) . - '
'.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 (); - $monitor_value = reporting_get_agentmodule_sla ($content['id_agent_module'], $content['period'], 1, false, $report["datetime"]); - if ($monitor_value === false) { - $monitor_value = __('Unknown'); - } - else { - $monitor_value = format_numeric ($monitor_value); - } - - $table->colspan[$next_row][0] = 2; - $data[0] = '

'; - $data[0] .= html_print_image("images/module_ok.png", true) . ' ' . __('OK') . ': ' . $monitor_value.' %

'; - if ($monitor_value !== __('Unknown')) { - $monitor_value = format_numeric (100 - $monitor_value, 2) ; - } - $data[1] = '

'; - $data[1] .= html_print_image("images/module_critical.png", true) . ' ' .__('Not OK') . ': ' .$monitor_value.' % ' . '

'; - 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) . - '
'.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] = '

'.$value.'

'; - 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) . - '
' . 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] = '

' . - format_for_graph($value, 2) . " " . $unit .'

'; - 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) . - '
'.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_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] = '

'.$value.'

'; - 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) . - '
' . 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; - - $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] = '

'.$value.'

'; - 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); - - if(!empty($data[0])) { - array_push ($table->data, $data); - - $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" => "
[".__('Illegal query')."]
". - __('Due security restrictions, there are some tokens or words you cannot use'). - ': *, delete, drop, alter, modify, union, password, pass, insert '.__('or')." update.
")); - } - - $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); - if(!empty($data[0])) { - array_push ($table->data, $data); - - $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) . - '
' . 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) . - '
'.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] = ''; - // TODO: make this dynamic and get the height if the iframe to resize this item - $data[0] .= ''; - - 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, - ui_print_truncate_text($module_name, 'module_medium', false)); - - // 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) . - '
'.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] = '

'.$ttr.'

'; - 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) . - '
'.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] = '

'.$tto.'

'; - 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) . - '
'.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] = '

'.$mtbf.'

'; - 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) . - '
'.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] = '

'.$mttr.'

'; - 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] = - " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
" . - __('Total') . "
" . - __('Unknown') . "
" . - __('Agents') . "
" . - $group_stats['total_agents'] . "
" . - $group_stats['agents_unknown'] . "
" . - __('Total') . "
" . - __('Normal') . "
" . - __('Critical') . "
" . - __('Warning') . "
" . - __('Unknown') . "
" . - __('Not init') . "
" . - __('Monitors') . "
" . - $group_stats['monitor_checks'] . "
" . - $group_stats['monitor_ok'] ."
" . - $group_stats['monitor_critical'] . "
" . - $group_stats['monitor_warning'] . "
" . - $group_stats['monitor_unknown'] . "
" . - $group_stats['monitor_not_init'] . "
" . - __('Defined') . "
" . - __('Fired') . "
" . - __('Alerts') . "
" . - $group_stats['monitor_alerts'] . "
" . - $group_stats['monitor_alerts_fired'] . "
" . - __('Last 8 hours') . "
" . - __('Events') . "
" . - count($events)."
"; - - 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('' . __('Summary') . '')); - $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'] . '
' . $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(''.__('Summary').'')); - $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(''.__('Summary').'')); - $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_data .= ""; - - $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 .= '"; - } - // Dont use pagination - /*if ($block < $nmodules) { - $table_data .= ""; - }*/ - - $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 .= "
"; - - 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 .= ""; - - $file_name = string2image(ui_print_truncate_text($agent['nombre'], 'agent_small', false, true, false, '...'), false, false, 6, 0, $rowcolor, $textcolor, 4, 0); - $table_data .= ""; - $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 .= ""; - $match = true; - } - } - - if (!$match) { - $table_data .= ""; - } - } - - $table_data .= ""; - } - - $table_data .= "
".__("Agents")." / ".__("Modules")."' . html_print_image($file_name, true, array('title' => $module['name']))."...
".html_print_image($file_name, true, array('title' => $agent['nombre'])).""; - $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 .= "
"; - - $table_data .= "
"; - - $table_data .= ""; - $table_data .= ""; - $table_data .= ""; - $table_data .= ""; - $table_data .= ""; - $table_data .= ""; - $table_data .= ""; - $table_data .= "
" . __('Legend') . "
" . __("Orange cell when the module has fired alerts") . "
" . __("Red cell when the module has a critical status") . "
" . __("Yellow cell when the module has a warning status") . "
" . __("Green cell when the module has a normal status") . "
" . __("Grey cell when the module has an unknown status") . "
"; - $table_data .= "
"; - $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 = "
".__('No data found.')."
"; - $inventory_data .= " "; - } - - $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 = "
".__('No changes found.')."
"; - $inventory_changes .= " "; - } - - $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] = ''.__('Agent name').''; - $data[1] = ''.__('Group').''; - $data[2] = ''.__('SO').''; - $data[3] = ''.__('IP').''; - $data[4] = ''.__('Description').''; - $data[5] = ''.__('Status').''; - - $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] = ''.agents_get_name ($content['id_agent'], 'upper').__(' MODULES').''; - $table->colspan[3][1] = 10; - - array_push ($table->data, $data); - unset($data); - - $data[0] = ''; - $data[1] = ''.__('Name').''; - $data[2] = ''.__('Type').''; - $data[3] = ''.__('Warning').'/'.'
'.__('Critical').'
'; - $data[4] = ''.__('Threshold').''; - $data[5] = ''.__('Group').''; - $data[6] = ''.__('Description').''; - $data[7] = ''.__('Interval').''; - $data[8] = ''.__('Unit').''; - $data[9] = ''.__('Status').''; - $data[10] = ''.__('Tags').''; - - $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'].'
'.$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] = ''.__('Agent name').''; - $data[1] = ''.__('Group').''; - $data[2] = ''.__('SO').''; - $data[3] = ''.__('IP').''; - $data[4] = ''.__('Description').''; - $data[5] = ''.__('Status').''; - - 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] = ''.agents_get_name ($agent['id_agente'], 'upper').__(' MODULES').''; - $table->colspan[$i][1] = 10; - - $i++; - - array_push ($table->data, $data); - unset($data); - - $data[0] = ''; - $data[1] = ''.__('Name').''; - $data[2] = ''.__('Type').''; - $data[3] = ''.__('Warning').'/'.'
'.__('Critical').'
'; - $data[4] = ''.__('Threshold').''; - $data[5] = ''.__('Group').''; - $data[6] = ''.__('Description').''; - $data[7] = ''.__('Interval').''; - $data[8] = ''.__('Unit').''; - $data[9] = ''.__('Status').''; - $data[10] = ''.__('Tags').''; - - $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'].'
'.$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] = '

' . $item_title . '

'; - $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 .= '' . '' . $total_count . ''; - if (isset($fired_count) && $fired_count > 0) - $out .= ' ' . $separator . ' ' . $fired_count . ''; - if (isset($critical_count) && $critical_count > 0) - $out .= ' ' . $separator . ' ' . $critical_count . ''; - if (isset($warning_count) && $warning_count > 0) - $out .= ' ' . $separator . ' ' . $warning_count . ''; - if (isset($unknown_count) && $unknown_count > 0) - $out .= ' ' . $separator . ' ' . $unknown_count . ''; - if (isset($not_init_count) && $not_init_count > 0) - $out .= ' ' . $separator . ' ' . $not_init_count . ''; - if (isset($normal_count) && $normal_count > 0) - $out .= ' ' . $separator . ' ' . $normal_count . ''; - - $out .= ''; - - 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] = "".format_numeric($data['agent_critical']).""; - - $agent_data[2] = html_print_image('images/agent_warning.png', true, array('title' => __('Agents warning'))); - $agent_data[3] = "".format_numeric($data['agent_warning']).""; - - $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] = "".format_numeric($data['agent_ok']).""; - - $agent_data[2] = html_print_image('images/agent_unknown.png', true, array('title' => __('Agents unknown'))); - $agent_data[3] = "".format_numeric($data['agent_unknown']).""; - - $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] = "".format_numeric($data['agent_not_init']).""; - - $agent_data[2] = ""; - $agent_data[3] = ""; - $table_agent->data[] = $agent_data; - - - if (!defined('METACONSOLE')) { - $agents_data = '
- ' . - __('Agents by status') . - '' . - html_print_table($table_agent, true) . '
'; - } - else{ - $table_agent->style=array(); - $table_agent->class = "tactical_view"; - $agents_data = '
- ' . - __('Agents by status') . - '' . - html_print_table($table_agent, true) . '
'; - } - - 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 = '
- ' . - __('Total agents and monitors') . - '' . - html_print_table($table_total, true) . '
'; - - 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] = "".format_numeric($num_servers).""; - $table_node->data[] = $node_data; - - if (!defined('METACONSOLE')){ - $node_overview = '
- ' . - __('Node overview') . - '' . - html_print_table($table_node, true) . '
'; - }else{ - $table_node->style = array(); - $table_node->class = "tactical_view"; - $node_overview = '
- ' . - __('Node overview') . - '' . - html_print_table($table_node, true) . '
'; - } - - 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] .= "   " . - "" . format_numeric($data['critical']).""; - $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] .= "   " . - "" . format_numeric($data['warning']).""; - $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] .= "   " . - "" . format_numeric($data['normal']).""; - $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] .= "   " . - "" . format_numeric($data['unknown']).""; - } - else{ - $table_events->data[0][0] = html_print_image('images/module_critical.png', true, array('title' => __('Critical events'))); - $table_events->data[0][0] .= "   " . - "". - format_numeric($data['critical']).""; - $table_events->data[0][1] = html_print_image('images/module_warning.png', true, array('title' => __('Warning events'))); - $table_events->data[0][1] .= "   " . - "". - format_numeric($data['warning']).""; - $table_events->data[0][2] = html_print_image('images/module_ok.png', true, array('title' => __('OK events'))); - $table_events->data[0][2] .= "   " . - "". - format_numeric($data['normal']).""; - $table_events->data[0][3] = html_print_image('images/module_unknown.png', true, array('title' => __('Unknown events'))); - $table_events->data[0][3] .= "   " . - "". - format_numeric($data['unknown']).""; - - } - if (!defined('METACONSOLE')) { - $event_view = '
- ' . - __('Events by criticity') . - '' . - html_print_table($table_events, true) . '
'; - } - 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 = '
- ' . - __('Events by criticity') . - '' . - html_print_table($table_events, true) . '
'; - } - - 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 = '' . __('Last activity in Pandora FMS console') . ''; - - 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] = '' . $session_id_usuario . ''; - $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 = '' . __('Events info (1hr.)') . ''; - $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 = '
- ' . - __('Events info (1hr)') . - '' . - html_print_table($table, true) . '
'; - } - else{ - $table->class='tactical_view'; - $event_graph = '
' . - html_print_table($table, true) . '
'; - } - - return $event_graph; +function reporting_check_structure_content($return) { + if (!isset($return['title'])) + $return['title'] = ""; + if (!isset($return['subtitle'])) + $return['subtitle'] = ""; + if (!isset($return['description'])) + $return['description'] = ""; + if (!isset($return["date"])) { + $return["date"]['date'] = ""; + $return["date"]['period'] = ""; + $return["date"]['from'] = ""; + $return["date"]['to'] = ""; + } + + + return $return; } ?> diff --git a/pandora_console/operation/reporting/reporting_viewer.php b/pandora_console/operation/reporting/reporting_viewer.php index 10c326bb57..1ddad7d549 100644 --- a/pandora_console/operation/reporting/reporting_viewer.php +++ b/pandora_console/operation/reporting/reporting_viewer.php @@ -41,6 +41,7 @@ if (empty($report) || ! check_acl ($config['id_user'], $report['id_group'], "RR" // Include with the functions to calculate each kind of report. require_once ($config['homedir'] . '/include/functions_reporting.php'); +require_once ($config['homedir'] . '/include/functions_reporting_html.php'); require_once ($config['homedir'] . '/include/functions_groups.php'); enterprise_include("include/functions_reporting.php"); @@ -136,7 +137,7 @@ $table->class = 'databox'; if (defined("METACONSOLE")){ $table->width = '100%'; $table->class = 'databox data'; - + $table->head[0] = __('View Report'); $table->head_colspan[0] = 5; $table->headstyle[0] = 'text-align: center'; @@ -172,14 +173,14 @@ if (defined("METACONSOLE")) { else { $table->data[0][1] = '
' . __("Name: ") . $report['name'] . '
'; } - + $table->data[0][1] .= '
'.__('Set initial date') . html_print_checkbox('enable_init_date', 1, $enable_init_date, true); $html_enterprise = enterprise_hook('reporting_print_button_PDF', array($id_report)); if ($html_enterprise !== ENTERPRISE_NOT_HOOK) { $table->data[0][1] .= $html_enterprise; } $table->data[0][1] .= '
'; - + $table->data[1][1] = '
' . __('From') . ': '; $table->data[1][1] .= html_print_input_text ('date_init', $date_init, '', 12, 10, true). ' '; $table->data[1][1] .= html_print_input_text ('time_init', $time_init, '', 10, 7, true). '
'; @@ -192,21 +193,21 @@ if (defined("METACONSOLE")) { $table->data[1][2] .= html_print_input_text ('time', $time, '', 10, 7, true) . ' '; $table->data[1][2] .= html_print_submit_button (__('Update'), 'date_submit', false, 'class="sub next"', true) . ' '; } -else{ +else { if ($report['description'] != '') { $table->data[0][1] = '
'.$report['description'].'
'; } else { $table->data[0][1] = '
'.$report['name'].'
'; } - + $table->data[0][1] .= '
'.__('Set initial date') . html_print_checkbox('enable_init_date', 1, $enable_init_date, true); $html_enterprise = enterprise_hook('reporting_print_button_PDF', array($id_report)); if ($html_enterprise !== ENTERPRISE_NOT_HOOK) { $table->data[0][1] .= $html_enterprise; } $table->data[0][1] .= '
'; - + $table->data[1][1] = '
' . __('From') . ':
'; $table->data[1][1] .= html_print_input_text ('date_init', $date_init, '', 12, 10, true). ' '; $table->data[1][1] .= html_print_input_text ('time_init', $time_init, '', 10, 7, true). ' '; @@ -353,7 +354,7 @@ foreach ($contents as $content) { $table->rowstyle = array (); // Calculate new inteval for all reports - if ($enable_init_date){ + if ($enable_init_date) { if ($datetime_init >= $datetime) { $datetime_init = $date_init_less; }