columns = array('agent' => 1); if ($system->checkACL($this->acl)) { $this->correct_acl = true; } else { $this->correct_acl = false; } } public function setReadOnly() { $this->readOnly = true; } public function ajax($parameter2 = false) { $system = System::getInstance(); if (!$this->correct_acl) { return; } else { switch ($parameter2) { case 'get_events': if ($system->getRequest('agent_events', '0') == 1) { $this->disabledColumns(array('agent')); $filters = array('id_agent' => $system->getRequest('id_agent', 0)); $this->setFilters($filters); $this->setReadOnly(); $this->eventsGetFilters(); } else { $this->eventsGetFilters(); } $page = $system->getRequest('page', 0); $system = System::getInstance(); $listEvents = $this->getListEvents($page); $events_db = $listEvents['events']; $total_events = $listEvents['total']; $events = array(); $end = 1; foreach ($events_db as $event) { $end = 0; switch ($event['estado']) { case 0: $img_st = "images/star_white.png"; break; case 1: $img_st = "images/tick_white.png"; break; case 2: $img_st = "images/hourglass_white.png"; break; } if($event['criticity'] == EVENT_CRIT_WARNING || $event['criticity'] == EVENT_CRIT_MAINTENANCE || $event['criticity'] == EVENT_CRIT_MINOR) { $img_st = str_replace("white.png", "dark.png", $img_st); } $status_icon = html_print_image($img_st, true, false, false, false, false, true); $row = array(); $row[] = '' . __('Event Name') . '
' . io_safe_output(str_replace(array(' ',''), ' ', $event['evento'])) . '
'; if ($event["id_agente"] == 0) { $agent_name = __('System'); } else { $agent_name = '' . ui_print_agent_name ($event["id_agente"], true, 'agent_small', '', false, '', '', false, false) . ''; } $row_1 = '' . $agent_name . ''; $row_1 .= '' . ui_print_timestamp ($event['timestamp_rep'], true, array('units' => 'tiny')) . $status_icon . ''; $row[] = $row_1; $row[] = get_priority_class ($event["criticity"]); $events[$event['id_evento']] = $row; } echo json_encode(array('end' => $end, 'events' => $events)); break; case 'get_detail_event': $system = System::getInstance(); $id_event = $system->getRequest('id_event', 0); $meta = false; if ($system->getConfig('metaconsole')) $meta = true; $event = events_get_event($id_event, false, $meta); if ($event) { //Check if it is a event from module. if ($event['id_agentmodule'] > 0) { $event['module_graph_link'] = '' . html_print_image('images/chart_curve.png', true, array ("style" => 'vertical-align: middle;'), false, false, false, true) . ''; } else { $event['module_graph_link'] = '' . __('N/A') . ''; } if ($event['id_agente'] > 0) { $event['agent'] = "" . agents_get_alias($event['id_agente']) . ""; } else { $event['agent'] = '' . __('N/A') . ''; } $event['evento'] = io_safe_output($event['evento']); $event['clean_tags'] = events_clean_tags($event['tags']); $event["timestamp"] = date($system->getConfig("date_format"), strtotime($event["timestamp"])); if (empty($event["owner_user"])) { $event["owner_user"] = '' . __('N/A') . ''; } else { $user_owner = db_get_value('fullname', 'tusuario', 'id_user', $event["owner_user"]); if (empty($user_owner)) { $user_owner = $event['owner_user']; } $event["owner_user"] = $user_owner; } $event["event_type"] = events_print_type_description($event["event_type"], true); $event["event_type"] .= ' '; $event["event_type"] .= events_print_type_img ($event["event_type"], true); if (!isset($group_rep)) $group_rep = 0; if ($group_rep != 0) { if ($event["event_rep"] <= 1) { $event["event_repeated"] = '' . __('No') . ''; } else { $event["event_repeated"] = sprintf("%d Times",$event["event_rep"]); } } else { $event["event_repeated"] = '' . __('No') . ''; } $event_criticity = get_priority_name ($event["criticity"]); 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; } $event["criticity"] = ' ' . $event_criticity; $event["criticity"] .= html_print_image ($img_sev, true, array ("class" => "image_status", "width" => 12, "height" => 12, "title" => $event_criticity), false, false, false, true); if ($event['estado'] == 1) { $user_ack = db_get_value('fullname', 'tusuario', 'id_user', $event['id_usuario']); if (empty($user_ack)) { $user_ack = $event['id_usuario']; } $date_ack = date ($system->getConfig("date_format"), $event['ack_utimestamp']); $event["acknowledged_by"] = $user_ack . ' (' . $date_ack . ')'; } else { $event["acknowledged_by"] = '' . __('N/A') . ''; } // Get Status switch ($event['estado']) { case 0: $img_st = "images/star_dark.png"; $title_st = __('New event'); break; case 1: $img_st = "images/tick.png"; $title_st = __('Event validated'); break; case 2: $img_st = "images/hourglass.png"; $title_st = __('Event in process'); break; } $event["status"] = $title_st; $event["status"] .= ' '; $event["status"] .= html_print_image($img_st,true, false, false, false, false, true); $event["group"] = groups_get_name ($event["id_grupo"], true); $event["group"] .= ui_print_group_icon ($event["id_grupo"], true); $event["tags"] = tags_get_tags_formatted($event["tags"]); if (empty($event["tags"])) { $event["tags"] = ''.__('N/A').''; } $event_comments = db_get_value('user_comment', 'tevento', 'id_evento', $id_event); $event_comments_array = array(); $event_comments_array = json_decode($event_comments, true); // Support for new format only. if (empty($event_comments_array)) { $comment = ''.__('N/A').''; } else { $comment = ''; $event_comments_array = array_reverse($event_comments_array); foreach($event_comments_array as $c) { $comment .= date ($system->getConfig("date_format"), $c['utimestamp']) . ' (' . $c['id_user'] . ')'; $c['comment'] = io_safe_output($c['comment']); $c['comment'] = str_replace("\n", "
", $c['comment']); $comment .= '
' . $c['comment'] . '
'; } } $event["comments"] = $comment; echo json_encode(array('correct' => 1, 'event' => $event)); } else { echo json_encode(array('correct' => 0, 'event' => array())); } break; case 'validate_event': $system = System::getInstance(); $id_event = $system->getRequest('id_event', 0); if (events_change_status($id_event, EVENT_VALIDATE)) { echo json_encode(array('correct' => 1)); } else { echo json_encode(array('correct' => 0)); } break; } } } public function disabledColumns($columns = null) { if (!empty($columns)) { foreach ($columns as $column) { $this->columns[$column] = 1; } } } private function eventsGetFilters() { $system = System::getInstance(); $user = User::getInstance(); $this->default_filters['severity'] = true; $this->default_filters['group'] = true; $this->default_filters['type'] = true; $this->default_filters['status'] = true; $this->default_filters['free_search'] = true; $this->default_filters['hours_old'] = true; $this->hours_old = $system->getRequest('hours_old', 8); if ($this->hours_old != 8) { $this->default = false; $this->default_filters['hours_old'] = false; } $this->free_search = $system->getRequest('free_search', ''); if ($this->free_search != '') { $this->default = false; $this->default_filters['free_search'] = false; } $this->status = $system->getRequest('status', __("Status")); if (($this->status === __("Status")) || ($this->status == 3)) { $this->status = 3; } else { $this->status = (int)$this->status; $this->default = false; $this->default_filters['status'] = false; } $this->type = $system->getRequest('type', __("Type")); if ($this->type === __("Type")) { $this->type = "all"; } else { $this->default = false; $this->default_filters['type'] = false; } $this->group = $system->getRequest('group', __("Group")); if (!$user->isInGroup($this->acl, $this->group)) { $this->group = 0; } if (($this->group === __("Group")) || ($this->group == 0)) { $this->group = 0; } else { $this->default = false; $this->default_filters['group'] = false; } $this->severity = $system->getRequest('severity', __("Severity")); if ($this->severity === __("Severity")) { $this->severity = -1; } else { $this->default = false; $this->default_filters['severity'] = false; } $this->filter = $system->getRequest('filter', __('Preset Filters')); if (($this->filter === __("Preset Filters")) || ($this->filter == 0)) { $this->filter = 0; } else { $this->default = false; } ///The user set a preset filter if ($this->filter > 0) { $this->loadPresetFilter(); } $this->limit = $system->getRequest('limit', -1); } public function setFilters($filters) { if (isset($filters['id_agent'])) { $this->id_agent = $filters['id_agent']; } if (isset($filters['all_events'])) { $this->all_events = $filters['all_events']; } } private function loadPresetFilter() { $filter = db_get_row('tevent_filter', 'id_filter', $this->filter); $this->free_search = $filter['search']; $this->hours_old = $filter['event_view_hr']; $this->status = $filter['status']; $this->type = $filter['event_type']; $this->severity = $filter['severity']; } public function show() { if (!$this->correct_acl) { $this->show_fail_acl(); } else { $this->eventsGetFilters(); $this->show_events(); } } private function show_fail_acl() { $error['type'] = 'onStart'; $error['title_text'] = __('You don\'t have access to this page'); $error['content_text'] = System::getDefaultACLFailText(); if (class_exists("HomeEnterprise")) $home = new HomeEnterprise(); else $home = new Home(); $home->show($error); } public function get_event_dialog_error_options($options) { $options['type'] = 'hidden'; $options['dialog_id'] = 'detail_event_dialog_error'; $options['title_text'] = __('ERROR: Event detail'); $options['content_text'] = '' . __('Error connecting to DB.') . ''; return $options; } public function get_event_dialog_options() { $ui = Ui::getInstance(); $options['type'] = 'hidden'; $options['dialog_id'] = 'detail_event_dialog'; $options['title_close_button'] = true; $options['title_text'] = __('Event detail'); //Content ob_start(); ?>
__('Validate'), 'id' => 'validate_button', 'href' => 'javascript: validateEvent();'); $options['content_text'] .= $ui->createButton($options_button); $options_hidden = array( 'id' => 'event_id', 'value' => 0, 'type' => 'hidden' ); $options['content_text'] .= $ui->getInput($options_hidden); $options['content_text'] .= ''; $options['content_text'] .= ''; $options['content_text'] .= ''; $options['button_close'] = false; return $options; } private function show_events() { $ui = Ui::getInstance(); $ui->createPage(); $options = $this->get_event_dialog_options(); $ui->addDialog($options); $options = $this->get_event_dialog_error_options($options); $ui->addDialog($options); $ui->createDefaultHeader(__("Events"), $ui->createHeaderButton( array('icon' => 'back', 'pos' => 'left', 'text' => __('Back'), 'href' => 'index.php?page=home'))); $ui->showFooter(false); $ui->beginContent(); $ui->contentAddHtml(""); $ui->contentAddHtml(""); $filter_title = sprintf(__('Filter Events by %s'), $this->filterEventsGetString()); $ui->contentBeginCollapsible($filter_title); $ui->beginForm("index.php?page=events"); /* $options = array( 'name' => 'page', 'type' => 'hidden', 'value' => 'events' ); $ui->formAddInput($options);*/ $items = db_get_all_rows_in_table('tevent_filter'); $items[] = array('id_filter' => 0, 'id_name' => __('None')); $options = array( 'name' => 'filter', 'title' => __('Preset Filters'), 'label' => __('Preset Filters'), 'items' => $items, 'item_id' => 'id_filter', 'item_value' => 'id_name', 'selected' => $this->filter ); $ui->formAddSelectBox($options); $system = System::getInstance(); $groups = users_get_groups_for_select( $system->getConfig('id_user'), "ER", true, true, false, 'id_grupo'); $options = array( 'name' => 'group', 'title' => __('Group'), 'label' => __('Group'), 'items' => $groups, 'selected' => $this->group ); $ui->formAddSelectBox($options); $options = array( 'name' => 'status', 'title' => __('Status'), 'label' => __('Status'), 'items' => events_get_all_status(), 'selected' => $this->status ); $ui->formAddSelectBox($options); $options = array( 'name' => 'type', 'title' => __('Type'), 'label' => __('Type'), 'items' => array_merge(array("all" => __('All')), get_event_types()), 'selected' => $this->type ); $ui->formAddSelectBox($options); $options = array( 'name' => 'severity', 'title' => __('Severity'), 'label' => __('Severity'), 'items' => array("-1" => __('All')) + get_priorities(), 'selected' => $this->severity ); $ui->formAddSelectBox($options); $options = array( 'name' => 'free_search', 'value' => $this->free_search, 'placeholder' => __('Free search') ); $ui->formAddInputSearch($options); $options = array( 'label' => __('Max. hours old'), 'name' => 'hours_old', 'value' => $this->hours_old, 'min' => 0, 'max' => 24 * 7, 'step' => 8 ); $ui->formAddSlider($options); $options = array( 'icon' => 'refresh', 'icon_pos' => 'right', 'text' => __('Apply Filter') ); $ui->formAddSubmitButton($options); $html = $ui->getEndForm(); $ui->contentCollapsibleAddItem($html); $ui->contentEndCollapsible(); $this->listEventsHtml(); $ui->endContent(); $ui->showPage(); } private function getListEvents($page = 0) { $system = System::getInstance(); //--------------Fill the SQL POST------------------------------- $sql_post = ''; switch ($this->status) { case 0: case 1: case 2: $sql_post .= " AND estado = " . $this->status; break; case 3: $sql_post .= " AND (estado = 0 OR estado = 2)"; break; } if ($this->free_search != "") { $sql_post .= " AND evento LIKE '%" . io_safe_input($this->free_search) . "%'"; } if ($this->severity != -1) { switch ($this->severity) { case EVENT_CRIT_WARNING_OR_CRITICAL: $sql_post .= " AND (criticity = " . EVENT_CRIT_WARNING . " OR criticity = " . EVENT_CRIT_CRITICAL . ")"; break; case EVENT_CRIT_NOT_NORMAL: $sql_post .= " AND criticity != " . EVENT_CRIT_NORMAL; break; default: $sql_post .= " AND criticity = " . $this->severity; break; } } if ($this->hours_old > 0) { $unixtime = get_system_time () - ($this->hours_old * SECONDS_1HOUR); $sql_post .= " AND (utimestamp > " . $unixtime . ")"; } if ($this->type != "") { // If normal, warning, could be several (going_up_warning, going_down_warning... too complex // for the user so for him is presented only "warning, critical and normal" if ($this->type == "warning" || $this->type == "critical" || $this->type == "normal") { $sql_post .= " AND event_type LIKE '%" . $this->type . "%' "; } elseif ($this->type == "not_normal") { $sql_post .= " AND event_type LIKE '%warning%' OR event_type LIKE '%critical%' OR event_type LIKE '%unknown%' "; } elseif ($this->type != "all") { $sql_post .= " AND event_type = '" . $this->type."'"; } } $system = System::getInstance(); $groups = users_get_groups($system->getConfig('id_user'), 'ER'); //Group selection if ($this->group > 0 && in_array ($this->group, array_keys ($groups))) { //If a group is selected and it's in the groups allowed $sql_post .= " AND id_grupo = " . $this->group; } else { if (is_user_admin ($system->getConfig('id_user'))) { //Do nothing if you're admin, you get full access $sql_post .= ""; } else { //Otherwise select all groups the user has rights to. $sql_post .= " AND id_grupo IN (" . implode (",", array_keys ($groups)) . ")"; } } if ($this->id_agent > 0) { $sql_post .= " AND id_agente = " . $this->id_agent; } // Skip system messages if user is not PM if (!check_acl($system->getConfig('id_user'), 0, "PM")) { $sql_post .= " AND id_grupo != 0"; } //-------------------------------------------------------------- if (isset($this->limit) && $this->limit != -1) { $offset = 0; $pagination = $this->limit; } else { $offset = $page * $system->getPageSize(); $pagination = $system->getPageSize(); } $meta = false; if ($system->getConfig('metaconsole')) $meta = true; $events_db = events_get_events_grouped($sql_post, $offset, $pagination, $meta, false); if (empty($events_db)) { $events_db = array(); } $total_events = events_get_total_events_grouped($sql_post, $meta); return array('events' => $events_db, 'total' => $total_events); } public function listEventsHtml($page = 0, $return = false, $id_table = 'list_events') { $system = System::getInstance(); $ui = Ui::getInstance(); // Create an empty table to be filled from ajax $table = new Table(); $table->id = $id_table; $no_events = ''; if (!$return) { $ui->contentAddHtml($table->getHTML()); $ui->contentAddHtml('
' . html_print_image('images/spinner.gif', true, false, false, false, false, true) . ' ' . __('Loading...') . '
' . $no_events); $this->addJavascriptAddBottom(); $this->addJavascriptDialog(); } else { $this->addJavascriptAddBottom(); return array('table' => $table->getHTML() . $no_events); } $ui->contentAddLinkListener('list_events'); } public function putEventsTableJS($id_agent) { return ""; } public function addJavascriptDialog() { $ui = Ui::getInstance(); $ui->contentAddHtml(" "); } private function addJavascriptAddBottom() { $ui = Ui::getInstance(); $ui->contentAddHtml(""); } private function filterEventsGetString() { global $system; if ($this->default) { return __("(Default)"); } else { if ($this->filter) { $filter = db_get_row('tevent_filter', 'id_filter', $this->filter); return sprintf(__('Filter: %s'), $filter['id_name']); } else { $filters_to_serialize = array(); if($this->severity == -1) { $severity = __('All'); } else { $severity = get_priorities($this->severity); } if (!$this->default_filters['severity']) { $filters_to_serialize[] = sprintf(__("Severity: %s"), $severity); } if (!$this->default_filters['group']) { $groups = users_get_groups_for_select( $system->getConfig('id_user'), "ER", true, true, false, 'id_grupo'); $filters_to_serialize[] = sprintf(__("Group: %s"), $groups[$this->group]); } if($this->type == 'all') { $type = __('All'); } else { $type = get_event_types($this->type); } if (!$this->default_filters['type']) { $filters_to_serialize[] = sprintf(__("Type: %s"), $type); } if (!$this->default_filters['status']) { $filters_to_serialize[] = sprintf(__("Status: %s"), events_get_status($this->status)); } if (!$this->default_filters['free_search']) { $filters_to_serialize[] = sprintf(__("Free search: %s"), $this->free_search); } if (!$this->default_filters['hours_old']) { $filters_to_serialize[] = sprintf(__("Hours: %s"), $this->hours_old); } $string = '(' . implode(' - ', $filters_to_serialize) . ')'; return $string; } } } } ?>