From 0f175eab72c93590f17bd3f2a8e65e2108806912 Mon Sep 17 00:00:00 2001 From: m-lopez-f Date: Mon, 23 May 2016 09:22:57 +0200 Subject: [PATCH] Feature. new form of groped data in event list. Tiquet: #3079 (cherry picked from commit 9f772e5091e7e559f875947bf82be4e4c69d5493) --- pandora_console/include/functions_events.php | 66 + .../operation/events/events.build_table.php | 1348 +++++++++-------- .../operation/events/events_list.php | 47 +- 3 files changed, 834 insertions(+), 627 deletions(-) diff --git a/pandora_console/include/functions_events.php b/pandora_console/include/functions_events.php index 00a3dc38fb..9c38ecd1ca 100644 --- a/pandora_console/include/functions_events.php +++ b/pandora_console/include/functions_events.php @@ -2951,4 +2951,70 @@ function events_checks_event_tags($event_data, $acltags) { } return false; } + +function events_get_events_grouped_by_agent($sql_post, $offset = 0, + $pagination = 1, $meta = false, $history = false, $total = false) { + global $config; + + $table = events_get_events_table($meta, $history); + + if ($meta) { + $groupby_extra = ', server_id'; + } + else { + $groupby_extra = ''; + } + + switch ($config["dbtype"]) { + case "mysql": + if ($total) { + $sql = "SELECT COUNT(*) FROM (select id_agente, + event_type, count(*) as total from $table WHERE 1=1 + $sql_post GROUP BY id_agente, event_type$groupby_extra ORDER BY id_agente ) AS t"; + } + else { + $sql = "select id_agente, event_type, count(*) as total, id_grupo from $table + WHERE id_agente > 0 $sql_post GROUP BY id_agente, event_type$groupby_extra ORDER BY id_agente LIMIT $offset,$pagination"; + } + break; + case 'postgresql': + if ($total) { + + } + else { + $sql = "select id_agente, event_type, count(*), id_grupo as total from $table + WHERE id_agente > 0 $sql_post GROUP BY id_agente, event_type$groupby_extra ORDER BY id_agente LIMIT $offset,$pagination"; + } + break; + case 'oracle': + if ($total) { + + } + else { + $set = array(); + $set['limit'] = $pagination; + $set['offset'] = $offset; + + $sql = "select id_agente, event_type, count(*), id_grupo as total from $table + WHERE id_agente > 0 $sql_post GROUP BY id_agente, event_type$groupby_extra ORDER BY id_agente "; + $sql = oracle_recode_query ($sql, $set); + } + break; + } + + $result = array(); + //Extract the events by filter (or not) from db + + $events = db_get_all_rows_sql ($sql); + $result = array(); + + if ($events) { + foreach ($events as $event) { + $id_agente = $event['id_agente']; + $result[$id_agente][$event['event_type']] = $event['total']; + $result[$id_agente]['id_grupo'] = $event['id_grupo']; + } + } + return $result; +} ?> diff --git a/pandora_console/operation/events/events.build_table.php b/pandora_console/operation/events/events.build_table.php index 22e9fe1dd4..c948546e1e 100644 --- a/pandora_console/operation/events/events.build_table.php +++ b/pandora_console/operation/events/events.build_table.php @@ -13,6 +13,11 @@ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. +global $config; + +require_once ($config["homedir"] . "/include/functions_ui.php"); + + $table = new stdClass(); if(!isset($table->width)) { $table->width = '100%'; @@ -26,658 +31,771 @@ if(!isset($table->class)) { $table->head = array (); $table->data = array (); -//fields that the user has selected to show -if ($meta) { - $show_fields = events_meta_get_custom_fields_user(); +if ($group_rep == 2) { + $table->class = "databox filters data"; + $table->head[0] = __('Agent name'); + $table->head[1] = __('Unknown Monitor'); + $table->head[2] = __('Monitor Normal'); + $table->head[3] = __('Monitor Warning'); + $table->head[4] = __('Monitor Critical'); + $table->head[5] = __('Alert fired'); + + $params = "search=" . rawurlencode(io_safe_input($search)) . + "&severity=" . $severity . + "&status=" . $status . + "&id_group=" . $id_group . + "&recursion=" . $recursion . + "&refr=" . (int)get_parameter("refr", 0) . + "&id_agent_module=" . $id_agent_module . + "&pagination=" . $pagination . + "&group_rep=0" . + "&event_view_hr=" . $event_view_hr . + "&id_user_ack=" . $id_user_ack . + "&tag_with=". $tag_with_base64 . + "&tag_without=" . $tag_without_base64 . + "&filter_only_alert" . $filter_only_alert . + "&offset=" . $offset . + "&toogle_filter=no" . + "&filter_id=" . $filter_id . + "&id_name=" . $id_name . + "&history=" . (int)$history . + "&section=" . $section . + "&open_filter=" . $open_filter . + "&date_from=" . $date_from . + "&date_to=" . $date_to . + "&pure=" . $config["pure"]; + if ($meta) { + $params .= "&text_agent=" . $text_agent; + } + + $url_agente = "index.php?sec=eventos&sec2=operation/events/events&" . $params; + foreach ($result as $key => $res) { + $table->data[$key][0] = agents_get_name ($key); + $key_result = array_keys($res); + $url_agente .= "&id_agent=" . $key; + + $unknown = 0; + if (in_array('going_unknown',$key_result)) + $unknown += $res['going_unknown']; + $url_unknown = $url_agente . "&event_type=going_unknown"; + $table->data[$key][1] = '' . $unknown . ''; + + $normal = 0; + if (in_array('going_down_normal',$key_result)) + $normal += $res['going_down_normal']; + if (in_array('going_up_normal',$key_result)) + $normal += $res['going_up_normal']; + $url_normal = $url_agente . "&event_type=normal"; + $table->data[$key][2] = '' . $normal . ''; + + $warning = 0; + if (in_array('going_up_warning',$key_result)) + $warning += $res['going_up_warning']; + if (in_array('going_down_warning',$key_result)) + $warning += $res['going_down_warning']; + $url_warning = $url_agente . "&event_type=warning"; + $table->data[$key][3] = '' . $warning . ''; + + $critical = 0; + if (in_array('going_up_critical',$key_result)) + $critical += $res['going_up_critical']; + if (in_array('going_down_critical',$key_result)) + $critical += $res['going_down_critical']; + $url_critical = $url_agente . "&event_type=critical"; + $table->data[$key][4] = '' . $critical . ''; + + $alert = 0; + if (in_array('alert_fired',$key_result)) + $alert += $res['alert_fired']; + $url_alert = $url_agente . "&event_type=alert_fired"; + $table->data[$key][5] = '' . $alert . ''; + + if ($alert > 0) { + $table->rowstyle[$key] = 'background: #FFA631;'; + } + elseif ($critical > 0){ + $table->rowstyle[$key] = 'background: #FC4444;'; + } + elseif ($warning > 0){ + $table->rowstyle[$key] = 'background: #FAD403;'; + } + elseif ($normal > 0){ + $table->rowstyle[$key] = 'background: #80BA27;'; + } + elseif ($unknown > 0){ + $table->rowstyle[$key] = 'background: #B2B2B2;'; + } + } + + if ($result) { + if ($allow_pagination) { + ui_pagination ($total_events, $url, $offset, $pagination); + } + + html_print_table ($table); + + if ($allow_pagination) { + ui_pagination ($total_events, $url, $offset, $pagination); + } + } + else { + echo '
' . __('No events') . '
'; + } } else { - $show_fields = explode (',', $config['event_fields']); -} - -//headers -$i = 0; -$table->head[$i] = __('ID'); - -$table->align[$i] = 'left'; - -$i++; -if (in_array('server_name', $show_fields)) { - $table->head[$i] = __('Server'); - $table->align[$i] = 'left'; - $i++; -} -if (in_array('estado', $show_fields)) { - $table->head[$i] = __('Status'); - $table->align[$i] = 'left'; - $i++; -} -if (in_array('id_evento', $show_fields)) { - $table->head[$i] = __('Event ID'); - $table->align[$i] = 'left'; - - $i++; -} -if (in_array('evento', $show_fields)) { - $table->head[$i] = __('Event Name'); - $table->align[$i] = 'left'; - $table->style[$i] = 'min-width: 200px; max-width: 350px; word-break: break-all;'; - $i++; -} -if (in_array('id_agente', $show_fields)) { - $table->head[$i] = __('Agent name'); - $table->align[$i] = 'left'; - $table->style[$i] = 'max-width: 350px; word-break: break-all;'; - $i++; -} -if (in_array('timestamp', $show_fields)) { - $table->head[$i] = __('Timestamp'); - $table->align[$i] = 'left'; - - $i++; -} -if (in_array('id_usuario', $show_fields)) { - $table->head[$i] = __('User'); - $table->align[$i] = 'left'; - - $i++; -} -if (in_array('owner_user', $show_fields)) { - $table->head[$i] = __('Owner'); - $table->align[$i] = 'left'; - - $i++; -} -if (in_array('id_grupo', $show_fields)) { - $table->head[$i] = __('Group'); - $table->align[$i] = 'left'; - - $i++; -} -if (in_array('event_type', $show_fields)) { - $table->head[$i] = __('Event type'); - $table->align[$i] = 'left'; - - $table->style[$i] = 'min-width: 85px;'; - $i++; -} -if (in_array('id_agentmodule', $show_fields)) { - $table->head[$i] = __('Agent Module'); - $table->align[$i] = 'left'; - - $i++; -} -if (in_array('id_alert_am', $show_fields)) { - $table->head[$i] = __('Alert'); - $table->align[$i] = 'left'; - - $i++; -} - -if (in_array('criticity', $show_fields)) { - $table->head[$i] = __('Severity'); - $table->align[$i] = 'left'; - - $i++; -} -if (in_array('user_comment', $show_fields)) { - $table->head[$i] = __('Comment'); - $table->align[$i] = 'left'; - - $i++; -} -if (in_array('tags', $show_fields)) { - $table->head[$i] = __('Tags'); - $table->align[$i] = 'left'; - - $i++; -} -if (in_array('source', $show_fields)) { - $table->head[$i] = __('Source'); - $table->align[$i] = 'left'; - - $i++; -} -if (in_array('id_extra', $show_fields)) { - $table->head[$i] = __('Extra ID'); - $table->align[$i] = 'left'; - - $i++; -} -if (in_array('ack_utimestamp', $show_fields)) { - $table->head[$i] = __('ACK Timestamp'); - $table->align[$i] = 'left'; - - $i++; -} -if (in_array('instructions', $show_fields)) { - $table->head[$i] = __('Instructions'); - $table->align[$i] = 'left'; - - $i++; -} -if ($i != 0 && $allow_action) { - $table->head[$i] = __('Action'); - $table->align[$i] = 'left'; - - $table->size[$i] = '90px'; - $i++; - if (check_acl ($config["id_user"], 0, "EW") == 1 && !$readonly) { - $table->head[$i] = html_print_checkbox ("all_validate_box", "1", false, true); - $table->align[$i] = 'left'; - } -} - -if ($meta) { - // Get info of the all servers to use it on hash auth - $servers_url_hash = metaconsole_get_servers_url_hash(); - $servers = metaconsole_get_servers(); -} - -$show_delete_button = false; -$show_validate_button = false; - -$idx = 0; -//Arrange data. We already did ACL's in the query -foreach ($result as $event) { - $data = array (); + //fields that the user has selected to show if ($meta) { - $event['server_url_hash'] = $servers_url_hash[$event['server_id']]; - $event['server_url'] = $servers[$event['server_id']]['server_url']; - $event['server_name'] = $servers[$event['server_id']]['server_name']; + $show_fields = events_meta_get_custom_fields_user(); } - - // Clean url from events and store in array - $event['clean_tags'] = events_clean_tags($event['tags']); - - //First pass along the class of this row - $myclass = get_priority_class ($event["criticity"]); - - //print status - $estado = $event["estado"]; - - // Colored box - switch($estado) { - case EVENT_NEW: - $img_st = "images/star.png"; - $title_st = __('New event'); - break; - case EVENT_VALIDATE: - $img_st = "images/tick.png"; - $title_st = __('Event validated'); - break; - case EVENT_PROCESS: - $img_st = "images/hourglass.png"; - $title_st = __('Event in process'); - break; + else { + $show_fields = explode (',', $config['event_fields']); } - + + //headers $i = 0; - - $data[$i] = "#".$event["id_evento"]; - $table->cellstyle[count($table->data)][$i] = 'background: #F3F3F3; color: #111 !important;'; - - // Pass grouped values in hidden fields to use it from modal window - if ($group_rep) { - $similar_ids = $event['similar_ids']; - $timestamp_first = $event['timestamp_rep_min']; - $timestamp_last = $event['timestamp_rep']; - } - else { - $similar_ids = $event["id_evento"]; - $timestamp_first = $event['utimestamp']; - $timestamp_last = $event['utimestamp']; - } - - // Store group data to show in extended view - $data[$i] .= html_print_input_hidden('similar_ids_' . $event["id_evento"], $similar_ids, true); - $data[$i] .= html_print_input_hidden('timestamp_first_' . $event["id_evento"], $timestamp_first, true); - $data[$i] .= html_print_input_hidden('timestamp_last_' . $event["id_evento"], $timestamp_last, true); - $data[$i] .= html_print_input_hidden('childrens_ids', json_encode($childrens_ids), true); - - // Store server id if is metaconsole. 0 otherwise - if ($meta) { - $server_id = $event['server_id']; - - // If meta activated, propagate the id of the event on node (source id) - $data[$i] .= html_print_input_hidden('source_id_' . $event["id_evento"], $event['id_source_event'], true); - $table->cellclass[count($table->data)][$i] = $myclass; - } - else { - $server_id = 0; - } - - $data[$i] .= html_print_input_hidden('server_id_' . $event["id_evento"], $server_id, true); - - if (empty($event['event_rep'])) { - $event['event_rep'] = 0; - } - $data[$i] .= html_print_input_hidden('event_rep_'.$event["id_evento"], $event['event_rep'], true); - // Store concat comments to show in extended view - $data[$i] .= html_print_input_hidden('user_comment_'.$event["id_evento"], base64_encode($event['user_comment']), true); - + $table->head[$i] = __('ID'); + + $table->align[$i] = 'left'; + $i++; - - if (in_array('server_name',$show_fields)) { + if (in_array('server_name', $show_fields)) { + $table->head[$i] = __('Server'); + $table->align[$i] = 'left'; + $i++; + } + if (in_array('estado', $show_fields)) { + $table->head[$i] = __('Status'); + $table->align[$i] = 'left'; + $i++; + } + if (in_array('id_evento', $show_fields)) { + $table->head[$i] = __('Event ID'); + $table->align[$i] = 'left'; + + $i++; + } + if (in_array('evento', $show_fields)) { + $table->head[$i] = __('Event Name'); + $table->align[$i] = 'left'; + $table->style[$i] = 'min-width: 200px; max-width: 350px; word-break: break-all;'; + $i++; + } + if (in_array('id_agente', $show_fields)) { + $table->head[$i] = __('Agent name'); + $table->align[$i] = 'left'; + $table->style[$i] = 'max-width: 350px; word-break: break-all;'; + $i++; + } + if (in_array('timestamp', $show_fields)) { + $table->head[$i] = __('Timestamp'); + $table->align[$i] = 'left'; + + $i++; + } + if (in_array('id_usuario', $show_fields)) { + $table->head[$i] = __('User'); + $table->align[$i] = 'left'; + + $i++; + } + if (in_array('owner_user', $show_fields)) { + $table->head[$i] = __('Owner'); + $table->align[$i] = 'left'; + + $i++; + } + if (in_array('id_grupo', $show_fields)) { + $table->head[$i] = __('Group'); + $table->align[$i] = 'left'; + + $i++; + } + if (in_array('event_type', $show_fields)) { + $table->head[$i] = __('Event type'); + $table->align[$i] = 'left'; + + $table->style[$i] = 'min-width: 85px;'; + $i++; + } + if (in_array('id_agentmodule', $show_fields)) { + $table->head[$i] = __('Agent Module'); + $table->align[$i] = 'left'; + + $i++; + } + if (in_array('id_alert_am', $show_fields)) { + $table->head[$i] = __('Alert'); + $table->align[$i] = 'left'; + + $i++; + } + + if (in_array('criticity', $show_fields)) { + $table->head[$i] = __('Severity'); + $table->align[$i] = 'left'; + + $i++; + } + if (in_array('user_comment', $show_fields)) { + $table->head[$i] = __('Comment'); + $table->align[$i] = 'left'; + + $i++; + } + if (in_array('tags', $show_fields)) { + $table->head[$i] = __('Tags'); + $table->align[$i] = 'left'; + + $i++; + } + if (in_array('source', $show_fields)) { + $table->head[$i] = __('Source'); + $table->align[$i] = 'left'; + + $i++; + } + if (in_array('id_extra', $show_fields)) { + $table->head[$i] = __('Extra ID'); + $table->align[$i] = 'left'; + + $i++; + } + if (in_array('ack_utimestamp', $show_fields)) { + $table->head[$i] = __('ACK Timestamp'); + $table->align[$i] = 'left'; + + $i++; + } + if (in_array('instructions', $show_fields)) { + $table->head[$i] = __('Instructions'); + $table->align[$i] = 'left'; + + $i++; + } + if ($i != 0 && $allow_action) { + $table->head[$i] = __('Action'); + $table->align[$i] = 'left'; + + $table->size[$i] = '90px'; + $i++; + if (check_acl ($config["id_user"], 0, "EW") == 1 && !$readonly) { + $table->head[$i] = html_print_checkbox ("all_validate_box", "1", false, true); + $table->align[$i] = 'left'; + } + } + + if ($meta) { + // Get info of the all servers to use it on hash auth + $servers_url_hash = metaconsole_get_servers_url_hash(); + $servers = metaconsole_get_servers(); + } + + $show_delete_button = false; + $show_validate_button = false; + + $idx = 0; + //Arrange data. We already did ACL's in the query + foreach ($result as $event) { + $data = array (); + if ($meta) { - if (can_user_access_node ()) { - $data[$i] = "" . $event["server_name"] . ""; - } - else { - $data[$i] = $event["server_name"]; - } + $event['server_url_hash'] = $servers_url_hash[$event['server_id']]; + $event['server_url'] = $servers[$event['server_id']]['server_url']; + $event['server_name'] = $servers[$event['server_id']]['server_name']; + } + + // Clean url from events and store in array + $event['clean_tags'] = events_clean_tags($event['tags']); + + //First pass along the class of this row + $myclass = get_priority_class ($event["criticity"]); + + //print status + $estado = $event["estado"]; + + // Colored box + switch($estado) { + case EVENT_NEW: + $img_st = "images/star.png"; + $title_st = __('New event'); + break; + case EVENT_VALIDATE: + $img_st = "images/tick.png"; + $title_st = __('Event validated'); + break; + case EVENT_PROCESS: + $img_st = "images/hourglass.png"; + $title_st = __('Event in process'); + break; + } + + $i = 0; + + $data[$i] = "#".$event["id_evento"]; + $table->cellstyle[count($table->data)][$i] = 'background: #F3F3F3; color: #111 !important;'; + + // Pass grouped values in hidden fields to use it from modal window + if ($group_rep) { + $similar_ids = $event['similar_ids']; + $timestamp_first = $event['timestamp_rep_min']; + $timestamp_last = $event['timestamp_rep']; } else { - $data[$i] = db_get_value('name','tserver'); + $similar_ids = $event["id_evento"]; + $timestamp_first = $event['utimestamp']; + $timestamp_last = $event['utimestamp']; } - $table->cellclass[count($table->data)][$i] = $myclass; - $i++; - } - if (in_array('estado',$show_fields)) { - $data[$i] = html_print_image ($img_st, true, - array ("class" => "image_status", - "title" => $title_st, - "id" => 'status_img_'.$event["id_evento"])); - $table->cellstyle[count($table->data)][$i] = 'background: #F3F3F3;'; - $i++; - } - if (in_array('id_evento',$show_fields)) { - $data[$i] = $event["id_evento"]; - $table->cellclass[count($table->data)][$i] = $myclass; - $i++; - } - - switch ($event["criticity"]) { - default: - case 0: - $img_sev = "images/status_sets/default/severity_maintenance.png"; - break; - case 1: - $img_sev = "images/status_sets/default/severity_informational.png"; - break; - case 2: - $img_sev = "images/status_sets/default/severity_normal.png"; - break; - case 3: - $img_sev = "images/status_sets/default/severity_warning.png"; - break; - case 4: - $img_sev = "images/status_sets/default/severity_critical.png"; - break; - case 5: - $img_sev = "images/status_sets/default/severity_minor.png"; - break; - case 6: - $img_sev = "images/status_sets/default/severity_major.png"; - break; - } - - if (in_array('evento', $show_fields)) { - // Event description - $data[$i] = ''; - if($allow_action) { - $data[$i] .= ''; - } - $data[$i] .= '' . ui_print_truncate_text (io_safe_output($event["evento"]), 160) . ''; - if($allow_action) { - $data[$i] .= ''; - } - $data[$i] .= ''; - $table->cellclass[count($table->data)][$i] = $myclass; - $i++; - } - - if (in_array('id_agente', $show_fields)) { - $data[$i] = ''; - if ($event["id_agente"] > 0) { - // Agent name + // Store group data to show in extended view + $data[$i] .= html_print_input_hidden('similar_ids_' . $event["id_evento"], $similar_ids, true); + $data[$i] .= html_print_input_hidden('timestamp_first_' . $event["id_evento"], $timestamp_first, true); + $data[$i] .= html_print_input_hidden('timestamp_last_' . $event["id_evento"], $timestamp_last, true); + $data[$i] .= html_print_input_hidden('childrens_ids', json_encode($childrens_ids), true); + + // Store server id if is metaconsole. 0 otherwise + if ($meta) { + $server_id = $event['server_id']; + + // If meta activated, propagate the id of the event on node (source id) + $data[$i] .= html_print_input_hidden('source_id_' . $event["id_evento"], $event['id_source_event'], true); + $table->cellclass[count($table->data)][$i] = $myclass; + } + else { + $server_id = 0; + } + + $data[$i] .= html_print_input_hidden('server_id_' . $event["id_evento"], $server_id, true); + + if (empty($event['event_rep'])) { + $event['event_rep'] = 0; + } + $data[$i] .= html_print_input_hidden('event_rep_'.$event["id_evento"], $event['event_rep'], true); + // Store concat comments to show in extended view + $data[$i] .= html_print_input_hidden('user_comment_'.$event["id_evento"], base64_encode($event['user_comment']), true); + + $i++; + + if (in_array('server_name',$show_fields)) { if ($meta) { - $agent_link = ''; if (can_user_access_node ()) { - $data[$i] = '' . $agent_link . $event["agent_name"] . ''; + $data[$i] = "" . $event["server_name"] . ""; } else { - $data[$i] = $event["agent_name"]; + $data[$i] = $event["server_name"]; } } else { - $data[$i] .= ui_print_agent_name ($event["id_agente"], true); + $data[$i] = db_get_value('name','tserver'); } + $table->cellclass[count($table->data)][$i] = $myclass; + $i++; } - else { - $data[$i] .= ''; + if (in_array('estado',$show_fields)) { + $data[$i] = html_print_image ($img_st, true, + array ("class" => "image_status", + "title" => $title_st, + "id" => 'status_img_'.$event["id_evento"])); + $table->cellstyle[count($table->data)][$i] = 'background: #F3F3F3;'; + $i++; } - $data[$i] .= ''; - $table->cellclass[count($table->data)][$i] = $myclass; - $i++; - } - - if (in_array('timestamp', $show_fields)) { - //Time - $data[$i] = ''; - if ($group_rep == 1) { - $data[$i] .= ui_print_timestamp ($event['timestamp_rep'], true); - } - else { - $data[$i] .= ui_print_timestamp ($event["timestamp"], true); - } - $data[$i] .= ''; - $table->cellclass[count($table->data)][$i] = $myclass; - $i++; - } - - if (in_array('id_usuario',$show_fields)) { - $user_name = db_get_value('fullname', 'tusuario', 'id_user', $event['id_usuario']); - if(empty($user_name)) { - $user_name = $event['id_usuario']; - } - $data[$i] = $user_name; - $table->cellclass[count($table->data)][$i] = $myclass; - $i++; - } - - if (in_array('owner_user',$show_fields)) { - $owner_name = db_get_value('fullname', 'tusuario', 'id_user', $event['owner_user']); - if(empty($owner_name)) { - $owner_name = $event['owner_user']; - } - $data[$i] = $owner_name; - $table->cellclass[count($table->data)][$i] = $myclass; - $i++; - } - - if (in_array('id_grupo',$show_fields)) { - if ($meta) { - $data[$i] = $event['group_name']; - } - else { - $id_group = $event["id_grupo"]; - $group_name = db_get_value('nombre', 'tgrupo', 'id_grupo', $id_group); - if ($id_group == 0) { - $group_name = __('All'); - } - $data[$i] = $group_name; - } - $table->cellclass[count($table->data)][$i] = $myclass; - $i++; - } - - if (in_array('event_type',$show_fields)) { - $data[$i] = events_print_type_description($event["event_type"], true); - $table->cellclass[count($table->data)][$i] = $myclass; - $i++; - } - - if (in_array('id_agentmodule',$show_fields)) { - if ($meta) { - $module_link = ''; - if (can_user_access_node ()) { - $data[$i] = '' . $module_link . $event["module_name"] . ''; - } - else { - $data[$i] = $event["module_name"]; - } - } - else { - $module_name = db_get_value('nombre', 'tagente_modulo', 'id_agente_modulo', $event["id_agentmodule"]); - $data[$i] = '' - . $module_name . ''; - } - $table->cellclass[count($table->data)][$i] = $myclass; - $i++; - } - - if (in_array('id_alert_am',$show_fields)) { - if($meta) { - $data[$i] = $event["alert_template_name"]; - } - else { - if ($event["id_alert_am"] != 0) { - $sql = 'SELECT name - FROM talert_templates - WHERE id IN (SELECT id_alert_template - FROM talert_template_modules - WHERE id = ' . $event["id_alert_am"] . ');'; - - $templateName = db_get_sql($sql); - $data[$i] = ''.$templateName.''; - } - else { - $data[$i] = ''; - } - } - $table->cellclass[count($table->data)][$i] = $myclass; - $i++; - } - - if (in_array('criticity',$show_fields)) { - $data[$i] = get_priority_name ($event["criticity"]); - $table->cellclass[count($table->data)][$i] = $myclass; - $i++; - } - - if (in_array('user_comment',$show_fields)) { - $safe_event_user_comment = strip_tags(io_safe_output($event["user_comment"])); - $line_breaks = array("\r\n", "\n", "\r"); - $safe_event_user_comment = str_replace($line_breaks, '
', $safe_event_user_comment); - $event_user_comments = json_decode($safe_event_user_comment, true); - $event_user_comment_str = ""; - - if (!empty($event_user_comments)) { - $last_key = key(array_slice($event_user_comments, -1, 1, true)); - $date_format = $config['date_format']; - - foreach ($event_user_comments as $key => $event_user_comment) { - $event_user_comment_str .= sprintf('%s: %s
%s: %s
%s: %s
', - __('Date'), date($date_format, $event_user_comment['utimestamp']), - __('User'), $event_user_comment['id_user'], - __('Comment'), $event_user_comment['comment']); - if ($key != $last_key) { - $event_user_comment_str .= '
'; - } - } - } - $comments_help_tip = ""; - if (!empty($event_user_comment_str)) { - $comments_help_tip = ui_print_help_tip($event_user_comment_str, true); + if (in_array('id_evento',$show_fields)) { + $data[$i] = $event["id_evento"]; + $table->cellclass[count($table->data)][$i] = $myclass; + $i++; } - $data[$i] = '' . $comments_help_tip . ''; - $table->cellclass[count($table->data)][$i] = $myclass; - $i++; - } - - if (in_array('tags',$show_fields)) { - $data[$i] = tags_get_tags_formatted($event['tags']); - $table->cellclass[count($table->data)][$i] = $myclass; - $i++; - } - - if (in_array('source',$show_fields)) { - $data[$i] = $event["source"]; - $table->cellclass[count($table->data)][$i] = $myclass; - $i++; - } - - if (in_array('id_extra',$show_fields)) { - $data[$i] = $event["id_extra"]; - $table->cellclass[count($table->data)][$i] = $myclass; - $i++; - } - - if (in_array('ack_utimestamp',$show_fields)) { - if ($event["ack_utimestamp"] == 0) { - $data[$i] = ''; - } - else { - $data[$i] = date ($config["date_format"], $event['ack_utimestamp']); - } - $table->cellclass[count($table->data)][$i] = $myclass; - $i++; - } - - if (in_array('instructions',$show_fields)) { - switch($event['event_type']) { - case 'going_unknown': - if(!empty($event["unknown_instructions"])) { - $data[$i] = html_print_image('images/page_white_text.png', true, array('title' => str_replace("\n","
", io_safe_output($event["unknown_instructions"])))); - } + switch ($event["criticity"]) { + default: + case 0: + $img_sev = "images/status_sets/default/severity_maintenance.png"; break; - case 'going_up_critical': - case 'going_down_critical': - if(!empty($event["critical_instructions"])) { - $data[$i] = html_print_image('images/page_white_text.png', true, array('title' => str_replace("\n","
", io_safe_output($event["critical_instructions"])))); - } + case 1: + $img_sev = "images/status_sets/default/severity_informational.png"; break; - case 'going_down_warning': - if(!empty($event["warning_instructions"])) { - $data[$i] = html_print_image('images/page_white_text.png', true, array('title' => str_replace("\n","
", io_safe_output($event["warning_instructions"])))); - } + case 2: + $img_sev = "images/status_sets/default/severity_normal.png"; break; - case 'system': - if(!empty($event["critical_instructions"])) { - $data[$i] = html_print_image('images/page_white_text.png', true, array('title' => str_replace("\n","
", io_safe_output($event["critical_instructions"])))); - } - elseif(!empty($event["warning_instructions"])) { - $data[$i] = html_print_image('images/page_white_text.png', true, array('title' => str_replace("\n","
", io_safe_output($event["warning_instructions"])))); - } - elseif(!empty($event["unknown_instructions"])) { - $data[$i] = html_print_image('images/page_white_text.png', true, array('title' => str_replace("\n","
", io_safe_output($event["unknown_instructions"])))); - } + case 3: + $img_sev = "images/status_sets/default/severity_warning.png"; + break; + case 4: + $img_sev = "images/status_sets/default/severity_critical.png"; + break; + case 5: + $img_sev = "images/status_sets/default/severity_minor.png"; + break; + case 6: + $img_sev = "images/status_sets/default/severity_major.png"; break; } - if (!isset($data[$i])) { - $data[$i] = ''; - } - - $table->cellclass[count($table->data)][$i] = $myclass; - $i++; - } - - if ($i != 0 && $allow_action) { - //Actions - $data[$i] = ''; - - if(!$readonly) { - // Validate event - if (($event["estado"] != 1) && (tags_checks_event_acl ($config["id_user"], $event["id_grupo"], "EW", $event['clean_tags'], $childrens_ids))) { - $show_validate_button = true; - $data[$i] .= ''; - $data[$i] .= html_print_image ("images/ok.png", true, - array ("title" => __('Validate event'))); + if (in_array('evento', $show_fields)) { + // Event description + $data[$i] = ''; + if($allow_action) { + $data[$i] .= ''; + } + $data[$i] .= '' . ui_print_truncate_text (io_safe_output($event["evento"]), 160) . ''; + if($allow_action) { $data[$i] .= ''; } + $data[$i] .= ''; + $table->cellclass[count($table->data)][$i] = $myclass; + $i++; + } + + if (in_array('id_agente', $show_fields)) { + $data[$i] = ''; - // Delete event - if ((tags_checks_event_acl($config["id_user"], $event["id_grupo"], "EM", $event['clean_tags'],$childrens_ids) == 1)) { - if($event['estado'] != 2) { - $show_delete_button = true; - $data[$i] .= ''; - $data[$i] .= html_print_image ("images/cross.png", true, - array ("title" => __('Delete event'), "id" => 'delete_cross_' . $event['id_evento'])); - $data[$i] .= ''; - } - else { - $data[$i] .= html_print_image ("images/cross.disabled.png", true, - array ("title" => __('Is not allowed delete events in process'))).' '; - } - } - } - - $data[$i] .= ''; - $data[$i] .= html_print_input_hidden('event_title_'.$event["id_evento"], "#".$event["id_evento"]." - ".$event["evento"], true); - $data[$i] .= html_print_image ("images/eye.png", true, - array ("title" => __('Show more'))); - $data[$i] .= ''; - - $table->cellstyle[count($table->data)][$i] = 'background: #F3F3F3;'; - - $i++; - - if(!$readonly) { - if (tags_checks_event_acl ($config["id_user"], $event["id_grupo"], "EM", $event['clean_tags'], $childrens_ids) == 1) { - //Checkbox - // Class 'candeleted' must be the fist class to be parsed from javascript. Dont change - $data[$i] = html_print_checkbox_extended ("validate_ids[]", $event['id_evento'], false, false, false, 'class="candeleted chk_val"', true); - } - else if (tags_checks_event_acl ($config["id_user"], $event["id_grupo"], "EW", $event['clean_tags'], $childrens_ids) == 1) { - //Checkbox - $data[$i] = html_print_checkbox_extended ("validate_ids[]", $event['id_evento'], false, false, false, 'class="chk_val"', true); - } - else if (isset($table->header[$i]) || true) { - $data[$i] = ''; - } - } - - $table->cellstyle[count($table->data)][$i] = 'background: #F3F3F3;'; - } - - array_push ($table->data, $data); - - $idx++; -} - -echo '
'; -if (!empty ($table->data)) { - - if ($allow_pagination) { - ui_pagination ($total_events, $url, $offset, $pagination); - } - - if ($allow_action) { - echo '
'; - echo ""; - } - - if (defined("METACONSOLE")) - echo '
'; - else - echo '
'; - html_print_table ($table); - echo '
'; - - if ($allow_action) { - - echo '
'; - //~ if (!$readonly && tags_check_acl ($config["id_user"], 0, "EW", $event['clean_tags']) == 1) { - if (!$readonly && $show_validate_button) { - html_print_button(__('Validate selected'), 'validate_button', false, 'validate_selected();', 'class="sub ok"'); - // Fix: validated_selected JS function has to be included with the proper user ACLs - ?> - - - - '; + $table->cellclass[count($table->data)][$i] = $myclass; + $i++; } - echo '
'; - echo ''; + + if (in_array('timestamp', $show_fields)) { + //Time + $data[$i] = ''; + if ($group_rep == 1) { + $data[$i] .= ui_print_timestamp ($event['timestamp_rep'], true); + } + else { + $data[$i] .= ui_print_timestamp ($event["timestamp"], true); + } + $data[$i] .= ''; + $table->cellclass[count($table->data)][$i] = $myclass; + $i++; + } + + if (in_array('id_usuario',$show_fields)) { + $user_name = db_get_value('fullname', 'tusuario', 'id_user', $event['id_usuario']); + if(empty($user_name)) { + $user_name = $event['id_usuario']; + } + $data[$i] = $user_name; + $table->cellclass[count($table->data)][$i] = $myclass; + $i++; + } + + if (in_array('owner_user',$show_fields)) { + $owner_name = db_get_value('fullname', 'tusuario', 'id_user', $event['owner_user']); + if(empty($owner_name)) { + $owner_name = $event['owner_user']; + } + $data[$i] = $owner_name; + $table->cellclass[count($table->data)][$i] = $myclass; + $i++; + } + + if (in_array('id_grupo',$show_fields)) { + if ($meta) { + $data[$i] = $event['group_name']; + } + else { + $id_group = $event["id_grupo"]; + $group_name = db_get_value('nombre', 'tgrupo', 'id_grupo', $id_group); + if ($id_group == 0) { + $group_name = __('All'); + } + $data[$i] = $group_name; + } + $table->cellclass[count($table->data)][$i] = $myclass; + $i++; + } + + if (in_array('event_type',$show_fields)) { + $data[$i] = events_print_type_description($event["event_type"], true); + $table->cellclass[count($table->data)][$i] = $myclass; + $i++; + } + + if (in_array('id_agentmodule',$show_fields)) { + if ($meta) { + $module_link = ''; + if (can_user_access_node ()) { + $data[$i] = '' . $module_link . $event["module_name"] . ''; + } + else { + $data[$i] = $event["module_name"]; + } + } + else { + $module_name = db_get_value('nombre', 'tagente_modulo', 'id_agente_modulo', $event["id_agentmodule"]); + $data[$i] = '' + . $module_name . ''; + } + $table->cellclass[count($table->data)][$i] = $myclass; + $i++; + } + + if (in_array('id_alert_am',$show_fields)) { + if($meta) { + $data[$i] = $event["alert_template_name"]; + } + else { + if ($event["id_alert_am"] != 0) { + $sql = 'SELECT name + FROM talert_templates + WHERE id IN (SELECT id_alert_template + FROM talert_template_modules + WHERE id = ' . $event["id_alert_am"] . ');'; + + $templateName = db_get_sql($sql); + $data[$i] = ''.$templateName.''; + } + else { + $data[$i] = ''; + } + } + $table->cellclass[count($table->data)][$i] = $myclass; + $i++; + } + + if (in_array('criticity',$show_fields)) { + $data[$i] = get_priority_name ($event["criticity"]); + $table->cellclass[count($table->data)][$i] = $myclass; + $i++; + } + + if (in_array('user_comment',$show_fields)) { + $safe_event_user_comment = strip_tags(io_safe_output($event["user_comment"])); + $line_breaks = array("\r\n", "\n", "\r"); + $safe_event_user_comment = str_replace($line_breaks, '
', $safe_event_user_comment); + $event_user_comments = json_decode($safe_event_user_comment, true); + $event_user_comment_str = ""; + + if (!empty($event_user_comments)) { + $last_key = key(array_slice($event_user_comments, -1, 1, true)); + $date_format = $config['date_format']; + + foreach ($event_user_comments as $key => $event_user_comment) { + $event_user_comment_str .= sprintf('%s: %s
%s: %s
%s: %s
', + __('Date'), date($date_format, $event_user_comment['utimestamp']), + __('User'), $event_user_comment['id_user'], + __('Comment'), $event_user_comment['comment']); + if ($key != $last_key) { + $event_user_comment_str .= '
'; + } + } + } + $comments_help_tip = ""; + if (!empty($event_user_comment_str)) { + $comments_help_tip = ui_print_help_tip($event_user_comment_str, true); + } + + $data[$i] = '' . $comments_help_tip . ''; + $table->cellclass[count($table->data)][$i] = $myclass; + $i++; + } + + if (in_array('tags',$show_fields)) { + $data[$i] = tags_get_tags_formatted($event['tags']); + $table->cellclass[count($table->data)][$i] = $myclass; + $i++; + } + + if (in_array('source',$show_fields)) { + $data[$i] = $event["source"]; + $table->cellclass[count($table->data)][$i] = $myclass; + $i++; + } + + if (in_array('id_extra',$show_fields)) { + $data[$i] = $event["id_extra"]; + $table->cellclass[count($table->data)][$i] = $myclass; + $i++; + } + + if (in_array('ack_utimestamp',$show_fields)) { + if ($event["ack_utimestamp"] == 0) { + $data[$i] = ''; + } + else { + $data[$i] = date ($config["date_format"], $event['ack_utimestamp']); + } + $table->cellclass[count($table->data)][$i] = $myclass; + $i++; + } + + if (in_array('instructions',$show_fields)) { + switch($event['event_type']) { + case 'going_unknown': + if(!empty($event["unknown_instructions"])) { + $data[$i] = html_print_image('images/page_white_text.png', true, array('title' => str_replace("\n","
", io_safe_output($event["unknown_instructions"])))); + } + break; + case 'going_up_critical': + case 'going_down_critical': + if(!empty($event["critical_instructions"])) { + $data[$i] = html_print_image('images/page_white_text.png', true, array('title' => str_replace("\n","
", io_safe_output($event["critical_instructions"])))); + } + break; + case 'going_down_warning': + if(!empty($event["warning_instructions"])) { + $data[$i] = html_print_image('images/page_white_text.png', true, array('title' => str_replace("\n","
", io_safe_output($event["warning_instructions"])))); + } + break; + case 'system': + if(!empty($event["critical_instructions"])) { + $data[$i] = html_print_image('images/page_white_text.png', true, array('title' => str_replace("\n","
", io_safe_output($event["critical_instructions"])))); + } + elseif(!empty($event["warning_instructions"])) { + $data[$i] = html_print_image('images/page_white_text.png', true, array('title' => str_replace("\n","
", io_safe_output($event["warning_instructions"])))); + } + elseif(!empty($event["unknown_instructions"])) { + $data[$i] = html_print_image('images/page_white_text.png', true, array('title' => str_replace("\n","
", io_safe_output($event["unknown_instructions"])))); + } + break; + } + + if (!isset($data[$i])) { + $data[$i] = ''; + } + + $table->cellclass[count($table->data)][$i] = $myclass; + $i++; + } + + if ($i != 0 && $allow_action) { + //Actions + $data[$i] = ''; + + if(!$readonly) { + // Validate event + if (($event["estado"] != 1) && (tags_checks_event_acl ($config["id_user"], $event["id_grupo"], "EW", $event['clean_tags'], $childrens_ids))) { + $show_validate_button = true; + $data[$i] .= ''; + $data[$i] .= html_print_image ("images/ok.png", true, + array ("title" => __('Validate event'))); + $data[$i] .= ''; + } + + // Delete event + if ((tags_checks_event_acl($config["id_user"], $event["id_grupo"], "EM", $event['clean_tags'],$childrens_ids) == 1)) { + if($event['estado'] != 2) { + $show_delete_button = true; + $data[$i] .= ''; + $data[$i] .= html_print_image ("images/cross.png", true, + array ("title" => __('Delete event'), "id" => 'delete_cross_' . $event['id_evento'])); + $data[$i] .= ''; + } + else { + $data[$i] .= html_print_image ("images/cross.disabled.png", true, + array ("title" => __('Is not allowed delete events in process'))).' '; + } + } + } + + $data[$i] .= ''; + $data[$i] .= html_print_input_hidden('event_title_'.$event["id_evento"], "#".$event["id_evento"]." - ".$event["evento"], true); + $data[$i] .= html_print_image ("images/eye.png", true, + array ("title" => __('Show more'))); + $data[$i] .= ''; + + $table->cellstyle[count($table->data)][$i] = 'background: #F3F3F3;'; + + $i++; + + if(!$readonly) { + if (tags_checks_event_acl ($config["id_user"], $event["id_grupo"], "EM", $event['clean_tags'], $childrens_ids) == 1) { + //Checkbox + // Class 'candeleted' must be the fist class to be parsed from javascript. Dont change + $data[$i] = html_print_checkbox_extended ("validate_ids[]", $event['id_evento'], false, false, false, 'class="candeleted chk_val"', true); + } + else if (tags_checks_event_acl ($config["id_user"], $event["id_grupo"], "EW", $event['clean_tags'], $childrens_ids) == 1) { + //Checkbox + $data[$i] = html_print_checkbox_extended ("validate_ids[]", $event['id_evento'], false, false, false, 'class="chk_val"', true); + } + else if (isset($table->header[$i]) || true) { + $data[$i] = ''; + } + } + + $table->cellstyle[count($table->data)][$i] = 'background: #F3F3F3;'; + } + + array_push ($table->data, $data); + + $idx++; } -} -else { - echo '
' . __('No events') . '
'; -} -echo '
'; + echo '
'; + if (!empty ($table->data)) { + + if ($allow_pagination) { + ui_pagination ($total_events, $url, $offset, $pagination); + } + + if ($allow_action) { + echo '
'; + echo ""; + } + + if (defined("METACONSOLE")) + echo '
'; + else + echo '
'; + html_print_table ($table); + echo '
'; + + if ($allow_action) { + + echo '
'; + //~ if (!$readonly && tags_check_acl ($config["id_user"], 0, "EW", $event['clean_tags']) == 1) { + if (!$readonly && $show_validate_button) { + html_print_button(__('Validate selected'), 'validate_button', false, 'validate_selected();', 'class="sub ok"'); + // Fix: validated_selected JS function has to be included with the proper user ACLs + ?> + + + + '; + echo ''; + } + } + else { + echo '
' . __('No events') . '
'; + } + echo '
'; +} ?> diff --git a/pandora_console/operation/events/events_list.php b/pandora_console/operation/events/events_list.php index a4d81d0245..eda56ae8e5 100644 --- a/pandora_console/operation/events/events_list.php +++ b/pandora_console/operation/events/events_list.php @@ -560,6 +560,7 @@ $data[1] .= html_print_input_text ('event_view_hr', $event_view_hr, '', 5, 255, $data[2] = __("Repeated") . $jump; $repeated_sel[0] = __("All events"); $repeated_sel[1] = __("Group events"); +$repeated_sel[2] = __("Group agents"); $data[2] .= html_print_select ($repeated_sel, "group_rep", $group_rep, '', '', 0, true); $table->data[] = $data; $table->rowclass[] = ''; @@ -680,7 +681,7 @@ if ($group_rep == 0) { //Extract the events by filter (or not) from db $result = db_get_all_rows_sql ($sql); } -else { +elseif ($group_rep == 1) { $result = events_get_events_grouped( $sql_post, $offset, @@ -688,6 +689,14 @@ else { $meta, $history); } +elseif ($group_rep == 2) { + $result = events_get_events_grouped_by_agent( + $sql_post, + $offset, + $pagination, + $meta, + $history); +} if (!empty($result)) { if ($group_rep == 0) { @@ -695,7 +704,7 @@ if (!empty($result)) { FROM $event_table WHERE 1=1 " . $sql_post; } - else { + elseif ($group_rep == 1) { switch ($config["dbtype"]) { case "mysql": case "postgresql": @@ -713,6 +722,10 @@ if (!empty($result)) { GROUP BY to_char(evento), id_agentmodule) t"; break; } + } + elseif ($group_rep == 2) { + + } $limit = (int) db_get_sql ($sql); @@ -745,20 +758,26 @@ if (!empty($result)) { //Extract the events by filter (or not) from db $results_graph = db_get_all_rows_sql ($sql); } - else { + elseif ($group_rep == 1) { $results_graph = events_get_events_grouped($sql_post, 0, $limit, $meta, $history); } - - $graph = '
' . - grafico_eventos_agente(350, 185, - $results_graph, $meta, $history, $tags_acls_condition,$limit) . - '
'; - html_print_div(array('id' => 'events_graph', - 'hidden' => true, 'content' => $graph)); + elseif ($group_rep == 2) { + + + } + + if (($group_rep == 1) OR ($group_rep == 0)) { + $graph = '
' . + grafico_eventos_agente(350, 185, + $results_graph, $meta, $history, $tags_acls_condition,$limit) . + '
'; + html_print_div(array('id' => 'events_graph', + 'hidden' => true, 'content' => $graph)); + } } @@ -789,7 +808,7 @@ if ($group_rep == 0) { FROM $event_table WHERE 1=1 $sql_post"; } -else { +elseif ($group_rep == 1) { switch ($config["dbtype"]) { case "mysql": case "postgresql": @@ -808,9 +827,13 @@ else { break; } } - +elseif ($group_rep == 2) { + $sql = "SELECT COUNT(*) FROM (select id_agente as total from $event_table WHERE id_agente > 0 + $sql_post GROUP BY id_agente ORDER BY id_agente ) AS t"; +} $total_events = (int) db_get_sql ($sql); + if (empty ($result)) { $result = array (); }