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] = '
'.$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).''; - $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) . - ''.$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) . - '' . - 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) . - ''.$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) . - ''.$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" => "'.$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) . - ''.$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) . - ''.$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) . - ''.$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)." |
-
".__("Agents")." / ".__("Modules")." | "; - - $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 .= '' . html_print_image($file_name, true, array('title' => $module['name']))." | "; - } - // 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 .= "
---|---|---|
".html_print_image($file_name, true, array('title' => $agent['nombre']))." | "; - $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 .= ""; - $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 .= " | "; - $match = true; - } - } - - if (!$match) { - $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") . " |