%d AND utimestamp <= %d', $id_agentmodule, $datelimit, $date); $interval_data = get_db_all_rows_sql ($sql, true); if ($interval_data === false) $interval_data = array (); // Calculate for how long the module has not met the SLA $mark = 0; $bad_period = 0; foreach ($interval_data as $data) { // bad 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)) { // good data turns bad if ($mark == 0) { $mark = $data['utimestamp']; } // good data } else { // bad data turns good if ($mark != 0) { $bad_period += $data['utimestamp'] - $mark; $mark = 0; } } } // Return the percentage of SLA compliance return (float) (100 - ($bad_period / $period) * 100); } /** * Get general statistical info on a group * * @param int Group Id to get info from. 0 = all * * @return array Group statistics */ function get_group_stats ($id_group = 0) { 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_alerts"] = 0; $data["monitor_alerts_fired"] = 0; $data["monitor_alerts_fire_count"] = 0; $data["total_checks"] = 0; $data["total_alerts"] = 0; $data["total_agents"] = 0; $data["total_alerts"] = 0; $data["total_checks"] = 0; $data["monitor_health"] = 100; $data["alert_level"] = 100; $data["module_sanity"] = 100; $data["server_sanity"] = 100; $cur_time = get_system_time (); //Check for access credentials using give_acl. More overhead, much safer if (!give_acl ($config["id_user"], $id_group, "AR")) { return $data; } if ($id_group == 0) { $id_group = array_keys (get_user_groups ()); } if (isAllGroups($id_group)) { $filter = ' 1 = 1 '; $total_agents = get_db_value_sql('SELECT count(id_agente) FROM tagente WHERE disabled = 0'); $alerts = get_agent_alerts (); } else { $agents = array_keys (get_group_agents ($id_group)); $total_agents = count ($agents); if (empty ($agents)) { //No agents in this group, means no data return $data; } $filter = 'tagente_estado.id_agente IN ('.implode (",", $agents).') '; $alerts = get_agent_alerts ($agents); } if (empty ($alerts)) $alerts = array (); $disabledQuery = "tagente_estado.id_agente_modulo IN (SELECT id_agente_modulo FROM tagente_modulo WHERE disabled = 0) AND "; $data["monitor_checks"] = (int) get_db_sql ("SELECT COUNT(*) FROM tagente_estado WHERE " . $disabledQuery . $filter); $data["monitor_not_init"] = (int) get_db_sql ("SELECT COUNT(*) FROM tagente_estado WHERE " . $disabledQuery . $filter."AND utimestamp = 0"); $data["monitor_unknown"] = (int) get_db_sql ("SELECT COUNT(*) FROM tagente_estado, tagente_modulo WHERE " . $disabledQuery . $filter."AND tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo AND tagente_modulo.id_tipo_modulo NOT IN (21,23,23, 100) AND utimestamp > 0 AND UNIX_TIMESTAMP() - utimestamp >= current_interval * 2"); $data["monitor_critical"] = (int) get_db_sql ("SELECT COUNT(*) FROM tagente_estado WHERE " . $disabledQuery . $filter."AND utimestamp > 0 AND estado = 1 AND UNIX_TIMESTAMP() - utimestamp < current_interval * 2"); $data["monitor_warning"] = (int) get_db_sql ("SELECT COUNT(*) FROM tagente_estado WHERE ".$filter."AND utimestamp > 0 AND estado = 2 AND UNIX_TIMESTAMP() - utimestamp < current_interval * 2"); $data["monitor_ok"] = $data["monitor_checks"] - $data["monitor_not_init"] - $data["monitor_unknown"] - $data["monitor_critical"] - $data["monitor_warning"]; $data["monitor_alerts"] = 0; foreach ($alerts as $alert_type) { $data["monitor_alerts"] += count ($alert_type); foreach ($alert_type as $alert) { if ($alert["times_fired"] > 0) { $data["monitor_alerts_fired"]++; $data["monitor_alerts_fire_count"] += $alert["times_fired"]; } } } $data["total_agents"] = $total_agents; $data["total_checks"] = $data["monitor_checks"]; $data["total_ok"] = $data["monitor_ok"]; //TODO: count SNMP Alerts and Inventory alerts here $data["total_alerts"] = $data["monitor_alerts"] + $data["monitor_alerts_fired"]; $data["total_alerts_fired"] = $data["monitor_alerts_fired"]; $data["total_alerts_fire_count"] = $data["monitor_alerts_fire_count"]; $data["monitor_bad"] = $data["monitor_critical"] + $data["monitor_unknown"] + $data["monitor_warning"]; $data["total_bad"] = $data["monitor_bad"]; $data["total_not_init"] = $data["monitor_not_init"]; $data["total_down"] = $data["monitor_critical"]; /* Monitor health (percentage) Data health (percentage) Global health (percentage) Module sanity (percentage) Alert level (percentage) Server Sanity 0% Uninitialized modules */ if ($data["monitor_bad"] > 0 && $data["monitor_checks"] > 0) { $data["monitor_health"] = format_numeric (100 - ($data["monitor_bad"] / ($data["monitor_checks"] / 100)), 1); } else { $data["monitor_health"] = 100; } if ($data["total_bad"] > 0 && $data["total_checks"] > 0) { $data["global_health"] = format_numeric (100 - ($data["total_bad"] / ($data["total_checks"] / 100)), 1); } else { $data["global_health"] = 100; } if ($data["total_not_init"] > 0 && $data["total_checks"] > 0) { $data["module_sanity"] = format_numeric (100 - ($data["total_not_init"] / ($data["total_checks"] / 100)), 1); } else { $data["module_sanity"] = 100; } if ($data["total_alerts_fired"] > 0 && $data["total_alerts"] > 0) { $data["alert_level"] = format_numeric (100 - ($data["total_alerts_fired"] / ($data["total_alerts"] / 100)), 1); } else { $data["alert_level"] = 100; } $data["server_sanity"] = format_numeric (100 - $data["module_sanity"], 1); 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 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 = get_group_events ($id_group, $period, $date); if (empty ($events)) { $events = array (); } foreach ($events as $event) { $data = array (); if ($event["estado"] == 0) $data[0] = ''; else $data[0] = ''; $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)) 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 get_fired_alerts_reporting_table ($alerts_fired) { $agents = array (); require_once ('include/functions_alerts.php'); foreach (array_keys ($alerts_fired) as $id_alert) { $alert_module = get_alert_agent_module ($id_alert); $template = get_alert_template ($id_alert); /* Add alerts fired to $agents_fired_alerts indexed by id_agent */ $id_agent = get_db_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] = get_agent_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 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 alert_reporting ($id_group, $period = 0, $date = 0, $return = false) { $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; $output .= ''; $output .= ''.__('Alerts fired').': '.sizeof ($alerts_fired).'
'; $output .= ''.__('Total alerts monitored').': '.sizeof ($alerts).'
'; if (! sizeof ($alerts_fired)) { if (!$return) echo $output; return $output; } $table = get_fired_alerts_reporting_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 .= 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 monitor_health_reporting ($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 = get_monitors_in_group ($id_group); if (empty ($monitors)) //If monitors has returned false or an empty array return; $monitors_down = 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 = get_monitors_down_reporting_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 .= print_table ($table, true); //Floating it was ugly, moved it to the bottom $output .= ''; 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 get_monitors_down() * * @return object A table object with a monitors down report. */ function get_monitors_down_reporting_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] = get_agent_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 print_group_reporting ($id_group, $return = false) { $agents = get_group_agents ($id_group, false, "none"); $output = ''.__('Agents in group').': '.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 get_agent_alerts_reporting_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 = get_agent_alerts ($id_agent); /* FIXME: Add compound alerts to the report. Some extra code is needed here */ foreach ($alerts['simple'] as $alert) { $fires = get_alert_fires_in_period ($alert['id'], $period, $date); if (! $fires) { continue; } $template = get_alert_template ($alert['id_alert_template']); $data = array (); $data[0] = get_alert_templates_type_name ($template['type']); $data[1] = $template['name']; switch ($template['type']) { case 'regex': if ($template['matches_value']) $data[2] = '≃ "'.$template['value'].'"'; else $data[2] = '≄ "'.$template['value'].'"'; break; case 'equal': case 'not_equal': $data[2] = $template['value']; break; case 'max-min': $data[2] = __('Min.').': '.$template['min_value']. ' '; $data[2] .= __('Max.').': '.$template['max_value']. ' '; break; case 'max': $data[2] = $template['max_value']; break; case 'min': $data[2] = $template['min_value']; break; } $data[3] = $template['time_threshold']; $data[4] = 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 get_agent_monitors_reporting_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 = get_monitors_in_agent ($id_agent); if ($monitors === false) { return $table; } foreach ($monitors as $monitor) { $downs = 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] = get_monitor_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 get_agent_modules_reporting_table ($id_agent, $period = 0, $date = 0) { $table->data = array (); $n_a_string = __('N/A').'(*)'; $modules = get_agent_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 get_agent_detailed_reporting ($id_agent, $period = 0, $date = 0, $return = false) { $output = ''; $n_a_string = __('N/A').'(*)'; /* Show modules in agent */ $output .= '
'; $output .= '

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

'; $output .= '

'.__('Modules').'

'; $table_modules = get_agent_modules_reporting_table ($id_agent, $period, $date); $table_modules->width = '99%'; $output .= print_table ($table_modules, true); /* Show alerts in agent */ $table_alerts = get_agent_alerts_reporting_table ($id_agent, $period, $date); $table_alerts->width = '99%'; if (sizeof ($table_alerts->data)) { $output .= '

'.__('Alerts').'

'; $output .= print_table ($table_alerts, true); } /* Show monitor status in agent (if any) */ $table_monitors = get_agent_monitors_reporting_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 .= 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 get_group_agents_detailed_reporting ($id_group, $period = 0, $date = 0, $return = false) { $agents = get_group_agents ($id_group, false, "none"); $output = ''; foreach ($agents as $agent_id => $agent_name) { $output .= get_agent_detailed_reporting ($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 get_agents_detailed_event_reporting ($id_agents, $period = 0, $date = 0, $return = false) { $id_agents = safe_int ($id_agents, 1); if (!is_numeric ($date)) { $date = strtotime ($date); } if (empty ($date)) { $date = get_system_time (); } if (empty ($period)) { global $config; $period = $config["sla_period"]; } $table->width = '99%'; $table->data = array (); $table->head = array (); $table->head[0] = __('Event name'); $table->head[1] = __('Event type'); $table->head[2] = __('Criticity'); $table->head[3] = __('Count'); $table->head[4] = __('Timestamp'); $events = array (); if ($events) foreach ($id_agents as $id_agent) { $event = get_agent_events ($id_agent, (int) $period, (int) $date); if (!empty ($event)) { array_push ($events, $event); } } if ($events) foreach ($events as $event) { $data = array (); $data[0] = $event['evento']; $data[1] = $event['event_type']; $data[2] = get_priority_name ($event['criticity']); $data[3] = $event['count_rep']; $data[4] = $event['time2']; array_push ($table->data, $data); } if ($events) return print_table ($table, $return); } /** * Get a detailed report of the modules of the agent * * @param int $id_agent Agent id to get the report for. * * @return array An array */ function get_agent_module_info ($id_agent) { global $config; $return = array (); $return["modules"] = 0; //Number of modules $return["monitor_normal"] = 0; //Number of 'good' monitors $return["monitor_warning"] = 0; //Number of 'warning' monitors $return["monitor_critical"] = 0; //Number of 'critical' monitors $return["monitor_down"] = 0; //Number of 'down' monitors $return["last_contact"] = 0; //Last agent contact $return["interval"] = get_agent_interval ($id_agent); //How often the agent gets contacted $return["status_img"] = print_status_image (STATUS_AGENT_NO_DATA, __('Agent without data'), true); $return["alert_status"] = "notfired"; $return["alert_img"] = print_status_image (STATUS_ALERT_NOT_FIRED, __('Alert not fired'), true); $return["agent_group"] = get_agent_group ($id_agent); if (!give_acl ($config["id_user"], $return["agent_group"], "AR")) { return $return; } $sql = sprintf ("SELECT * FROM tagente_estado, tagente_modulo WHERE tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo AND tagente_modulo.disabled = 0 AND tagente_estado.utimestamp > 0 AND tagente_modulo.id_agente = %d", $id_agent); $modules = get_db_all_rows_sql ($sql); if ($modules === false) { return $return; } $now = get_system_time (); // Calculate modules for this agent foreach ($modules as $module) { $return["modules"]++; if ($module["module_interval"] > $return["interval"]) { $return["interval"] = $module["module_interval"]; } elseif ($module["module_interval"] == 0) { $module["module_interval"] = $return["interval"]; } if ($module["utimestamp"] > $return["last_contact"]) { $return["last_contact"] = $module["utimestamp"]; } if (($module["id_tipo_modulo"] < 21 || $module["id_tipo_modulo"] > 23 ) AND ($module["id_tipo_modulo"] != 100)) { $async = 0; } else { $async = 1; } if ($async == 0 && ($module["utimestamp"] < ($now - $module["module_interval"] * 2))) { $return["monitor_down"]++; } elseif ($module["estado"] == 2) { $return["monitor_warning"]++; } elseif ($module["estado"] == 1) { $return["monitor_critical"]++; } else { $return["monitor_normal"]++; } } if ($return["modules"] > 0) { if ($return["modules"] == $return["monitor_down"]) $return["status_img"] = print_status_image (STATUS_AGENT_DOWN, __('At least one module is in UKNOWN status'), true); else if ($return["monitor_critical"] > 0) $return["status_img"] = print_status_image (STATUS_AGENT_CRITICAL, __('At least one module in CRITICAL status'), true); else if ($return["monitor_warning"] > 0) $return["status_img"] = print_status_image (STATUS_AGENT_WARNING, __('At least one module in WARNING status'), true); else $return["status_img"] = print_status_image (STATUS_AGENT_OK, __('All Monitors OK'), true); } //Alert not fired is by default if (give_disabled_group ($return["agent_group"])) { $return["alert_status"] = "disabled"; $return["alert_img"] = print_status_image (STATUS_ALERT_DISABLED, __('Alert disabled'), true); } elseif (check_alert_fired ($id_agent) == 1) { $return["alert_status"] = "fired"; $return["alert_img"] = print_status_image (STATUS_ALERT_FIRED, __('Alert fired'), true); } return $return; } /** * Get a detailed report of the modules of the agent * * @param int $id_agent Agent id to get the report for. * * @return array An array */ function get_agent_module_info_with_filter ($id_agent,$filter = '') { global $config; $return = array (); $return["modules"] = 0; //Number of modules $return["monitor_normal"] = 0; //Number of 'good' monitors $return["monitor_warning"] = 0; //Number of 'warning' monitors $return["monitor_critical"] = 0; //Number of 'critical' monitors $return["monitor_down"] = 0; //Number of 'down' monitors $return["last_contact"] = 0; //Last agent contact $return["interval"] = get_agent_interval ($id_agent); //How often the agent gets contacted $return["status_img"] = print_status_image (STATUS_AGENT_NO_DATA, __('Agent without data'), true); $return["alert_status"] = "notfired"; $return["alert_img"] = print_status_image (STATUS_ALERT_NOT_FIRED, __('Alert not fired'), true); $return["agent_group"] = get_agent_group ($id_agent); if (!give_acl ($config["id_user"], $return["agent_group"], "AR")) { return $return; } $sql = sprintf ("SELECT * FROM tagente_estado, tagente_modulo WHERE tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo AND tagente_modulo.disabled = 0 AND tagente_estado.utimestamp > 0 AND tagente_modulo.id_agente = %d", $id_agent); $sql .= $filter; $modules = get_db_all_rows_sql ($sql); if ($modules === false) { return $return; } $now = get_system_time (); // Calculate modules for this agent foreach ($modules as $module) { $return["modules"]++; if ($module["module_interval"] > $return["interval"]) { $return["interval"] = $module["module_interval"]; } elseif ($module["module_interval"] == 0) { $module["module_interval"] = $return["interval"]; } if ($module["utimestamp"] > $return["last_contact"]) { $return["last_contact"] = $module["utimestamp"]; } if (($module["id_tipo_modulo"] < 21 || $module["id_tipo_modulo"] > 23 ) AND ($module["id_tipo_modulo"] != 100)) { $async = 0; } else { $async = 1; } if ($async == 0 && ($module["utimestamp"] < ($now - $module["module_interval"] * 2))) { $return["monitor_down"]++; } elseif ($module["estado"] == 2) { $return["monitor_warning"]++; } elseif ($module["estado"] == 1) { $return["monitor_critical"]++; } else { $return["monitor_normal"]++; } } if ($return["modules"] > 0) { if ($return["modules"] == $return["monitor_down"]) $return["status_img"] = print_status_image (STATUS_AGENT_DOWN, __('At least one module is in UKNOWN status'), true); else if ($return["monitor_critical"] > 0) $return["status_img"] = print_status_image (STATUS_AGENT_CRITICAL, __('At least one module in CRITICAL status'), true); else if ($return["monitor_warning"] > 0) $return["status_img"] = print_status_image (STATUS_AGENT_WARNING, __('At least one module in WARNING status'), true); else $return["status_img"] = print_status_image (STATUS_AGENT_OK, __('All Monitors OK'), true); } //Alert not fired is by default if (give_disabled_group ($return["agent_group"])) { $return["alert_status"] = "disabled"; $return["alert_img"] = print_status_image (STATUS_ALERT_DISABLED, __('Alert disabled'), true); } elseif (check_alert_fired ($id_agent) == 1) { $return["alert_status"] = "fired"; $return["alert_img"] = print_status_image (STATUS_ALERT_FIRED, __('Alert fired'), true); } return $return; } ?>