$id] ); if ($result === false) { echo 'error'; } else { echo 'ok'; } } // Get db values of a single filter. if ($get_filter_values) { $id_filter = get_parameter('id'); $event_filter = events_get_event_filter($id_filter); if ($event_filter === false) { $event_filter = [ 'status' => EVENT_NO_VALIDATED, 'event_view_hr' => $config['event_view_hr'], 'group_rep' => 1, 'tag_with' => [], 'tag_without' => [], 'history' => false, 'module_search' => '', 'filter_only_alert' => '-1', 'user_comment' => '', 'id_extra' => '', 'id_user_ack' => '', 'date_from' => '', 'date_to' => '', 'severity' => '', 'event_type' => '', 'group_rep' => 0, 'id_group' => 0, 'id_group_filter' => 0, 'group_name' => 'All', 'text_agent' => '', 'id_agent' => 0, 'id_name' => 'None', 'filter_id' => 0, ]; } else { $event_filter['module_search'] = io_safe_output(db_get_value_filter('nombre', 'tagente_modulo', ['id_agente_modulo' => $event_filter['id_agent_module']])); $a = array_keys(users_get_groups(false)); $event_filter['group_name'] = ''; foreach ($a as $key => $value) { if ($value == $event_filter['id_group']) { $event_filter['group_name'] = db_get_value('nombre', 'tgrupo', 'id_grupo', $event_filter['id_group_filter']); if ($event_filter['group_name'] === false) { $event_filter['group_name'] = __('All'); } } } $event_filter['module_search'] = io_safe_output(db_get_value_filter('nombre', 'tagente_modulo', ['id_agente_modulo' => $event_filter['id_agent_module']])); } $event_filter['search'] = io_safe_output($event_filter['search']); $event_filter['id_name'] = io_safe_output($event_filter['id_name']); $event_filter['text_agent'] = io_safe_output($event_filter['text_agent']); $event_filter['source'] = io_safe_output($event_filter['source']); $event_filter['tag_with'] = base64_encode( io_safe_output($event_filter['tag_with']) ); $event_filter['tag_without'] = base64_encode( io_safe_output($event_filter['tag_without']) ); echo io_json_mb_encode($event_filter); } if ($load_filter_modal) { $current = db_get_value_filter('default_event_filter', 'tusuario', ['id_user' => $config['id_user']]); $filters = events_get_event_filter_select(); $user_groups_array = users_get_groups_for_select( $config['id_user'], $access, true, true, false ); echo '
'; echo '
'; $table = new StdClass; $table->id = 'load_filter_form'; $table->width = '100%'; $table->cellspacing = 4; $table->cellpadding = 4; $table->class = 'databox'; if (is_metaconsole()) { $table->cellspacing = 0; $table->cellpadding = 0; $table->class = 'databox filters'; } $table->styleTable = 'font-weight: bold; color: #555; text-align:left;'; $filter_id_width = '200px'; if (is_metaconsole()) { $filter_id_width = '150px'; } $data = []; $table->rowid[3] = 'update_filter_row1'; $data[0] = __('Load filter').$jump; $data[0] .= html_print_select( $filters, 'filter_id', $current, '', __('None'), 0, true, false, true, '', false, 'margin-left:5px; width:'.$filter_id_width.';' ); $data[1] = html_print_submit_button( __('Load filter'), 'load_filter', false, 'class="sub upd"', true ); $data[1] .= html_print_input_hidden('load_filter', 1, true); $table->data[] = $data; $table->rowclass[] = ''; html_print_table($table); echo '
'; echo '
'; ?> '; if (check_acl($config['id_user'], 0, 'EW') || check_acl($config['id_user'], 0, 'EM') ) { echo '
'; $table = new StdClass; $table->id = 'save_filter_form'; $table->width = '100%'; $table->cellspacing = 4; $table->cellpadding = 4; $table->class = 'databox'; if (is_metaconsole()) { $table->class = 'databox filters'; $table->cellspacing = 0; $table->cellpadding = 0; } $table->styleTable = 'font-weight: bold; text-align:left;'; if (!is_metaconsole()) { $table->style[0] = 'width: 50%; width:50%;'; } $data = []; $table->rowid[0] = 'update_save_selector'; $data[0] = html_print_radio_button( 'filter_mode', 'new', '', true, true ).__('New filter').''; $data[1] = html_print_radio_button( 'filter_mode', 'update', '', false, true ).__('Update filter').''; $table->data[] = $data; $table->rowclass[] = ''; $data = []; $table->rowid[1] = 'save_filter_row1'; $data[0] = __('Filter name').$jump; $data[0] .= html_print_input_text('id_name', '', '', 15, 255, true); if (is_metaconsole()) { $data[1] = __('Save in Group').$jump; } else { $data[1] = __('Filter group').$jump; } $user_groups_array = users_get_groups_for_select( $config['id_user'], 'EW', users_can_manage_group_all(), true ); $data[1] .= html_print_select( $user_groups_array, 'id_group_filter', $id_group_filter, '', '', 0, true, false, false, 'w130' ); $table->data[] = $data; $table->rowclass[] = ''; $data = []; $table->rowid[2] = 'save_filter_row2'; $table->data[] = $data; $table->rowclass[] = ''; $data = []; $table->rowid[3] = 'update_filter_row1'; $data[0] = __('Overwrite filter').$jump; // Fix : Only admin user can see filters of group ALL for update. $_filters_update = events_get_event_filter_select(false); $data[0] .= html_print_select( $_filters_update, 'overwrite_filter', '', '', '', 0, true ); $data[1] = html_print_submit_button( __('Update filter'), 'update_filter', false, 'class="sub upd" onclick="save_update_filter();"', true ); $table->data[] = $data; $table->rowclass[] = ''; html_print_table($table); echo '
'; echo html_print_submit_button( __('Save filter'), 'save_filter', false, 'class="sub upd float-right" onclick="save_new_filter();"', true ); echo '
'; } else { include 'general/noaccess.php'; } echo ''; ?> ', $description); echo $description; return; } if ($get_response_params) { if (! check_acl($config['id_user'], 0, 'EW')) { echo 'unauthorized'; return; } $response_id = get_parameter('response_id'); $params = db_get_value('params', 'tevent_response', 'id', $response_id); if ($params === false) { return; } echo json_encode(explode(',', $params)); return; } if ($get_response_target) { if (! check_acl($config['id_user'], 0, 'EW')) { echo 'unauthorized'; return; } $response_id = (int) get_parameter('response_id'); $event_id = (int) get_parameter('event_id'); $server_id = (int) get_parameter('server_id'); $event_response = db_get_row('tevent_response', 'id', $response_id); if (empty($event_response)) { return; } echo events_get_response_target($event_id, $response_id, $server_id); return; } if ($get_response) { if (! check_acl($config['id_user'], 0, 'EW')) { echo 'unauthorized'; return; } $response_id = get_parameter('response_id'); $event_response = db_get_row('tevent_response', 'id', $response_id); if (empty($event_response)) { return; } echo json_encode($event_response); return; } if ($perform_event_response) { global $config; if (! check_acl($config['id_user'], 0, 'EW')) { echo 'unauthorized'; return; } $target = get_parameter('target', ''); $response_id = get_parameter('response_id'); $event_id = (int) get_parameter('event_id'); $server_id = (int) get_parameter('server_id', 0); if (empty($target)) { $command = events_get_response_target($event_id, $response_id, $server_id); } else { $command = $target; } $event_response = db_get_row('tevent_response', 'id', $response_id); $command_timeout = $event_response !== false ? $event_response['command_timeout'] : 90; if (enterprise_installed()) { if ($event_response['server_to_exec'] != 0 && $event_response['type'] == 'command') { $commandExclusions = [ 'vi', 'vim', 'nano', ]; $server_data = db_get_row( 'tserver', 'id_server', $event_response['server_to_exec'] ); if (in_array(strtolower($command), $commandExclusions)) { echo 'Only stdin/stdout commands are supported'; } else { switch (PHP_OS) { case 'FreeBSD': $timeout_bin = '/usr/local/bin/gtimeout'; break; case 'NetBSD': $timeout_bin = '/usr/pkg/bin/gtimeout'; break; default: $timeout_bin = '/usr/bin/timeout'; break; } if (empty($server_data['port'])) { system('ssh pandora_exec_proxy@'.$server_data['ip_address'].' "'.$timeout_bin.' '.$command_timeout.' '.io_safe_output($command).' 2>&1"', $ret_val); } else { system('ssh -p '.$server_data['port'].' pandora_exec_proxy@'.$server_data['ip_address'].' "'.$timeout_bin.' '.$command_timeout.' '.io_safe_output($command).' 2>&1"', $ret_val); } } } else { switch (PHP_OS) { case 'FreeBSD': $timeout_bin = '/usr/local/bin/gtimeout'; break; case 'NetBSD': $timeout_bin = '/usr/pkg/bin/gtimeout'; break; default: $timeout_bin = '/usr/bin/timeout'; break; } system($timeout_bin.' '.$command_timeout.' '.io_safe_output($command).' 2>&1', $ret_val); } } else { switch (PHP_OS) { case 'FreeBSD': $timeout_bin = '/usr/local/bin/gtimeout'; break; case 'NetBSD': $timeout_bin = '/usr/pkg/bin/gtimeout'; break; default: $timeout_bin = '/usr/bin/timeout'; break; } system($timeout_bin.' '.$command_timeout.' '.io_safe_output($command).' 2>&1', $ret_val); } if ($ret_val != 0) { echo "
"; echo __('Error executing response'); echo '

'; } return; } if ($dialogue_event_response) { global $config; if (! check_acl($config['id_user'], 0, 'EW')) { echo 'unauthorized'; return; } $event_id = get_parameter('event_id'); $response_id = get_parameter('response_id'); $command = get_parameter('target'); $massive = get_parameter('massive'); $end = get_parameter('end'); $show_execute_again_btn = get_parameter('show_execute_again_btn'); $out_iterator = get_parameter('out_iterator'); $event_response = db_get_row('tevent_response', 'id', $response_id); $server_id = get_parameter('server_id'); $event = db_get_row('tevento', 'id_evento', $event_id); $prompt = '
> '; switch ($event_response['type']) { case 'command': if ($massive) { echo "
"; echo $prompt.sprintf( '(Event #'.$event_id.') '.__( 'Executing command: %s', $command ) ); echo '

'; echo "
'; echo "



"; if ($end) { echo "
'; } } else { echo "
"; echo $prompt."Executing command: $command"; echo '

'; echo "'; echo "


"; echo "
'; } break; case 'url': $command = str_replace('localhost', $_SERVER['SERVER_NAME'], $command); echo ""; break; default: // Ignore. break; } } if ($add_comment) { $aviability_comment = true; $comment = get_parameter('comment'); if (preg_match('/script/i', io_safe_output($comment))) { $aviability_comment = false; $return = false; } $event_id = get_parameter('event_id'); if ($aviability_comment !== false) { $return = events_comment($event_id, $comment, 'Added comment', $meta, $history); } if ($return) { echo 'comment_ok'; } else { echo 'comment_error'; } return; } if ($change_status) { $event_ids = get_parameter('event_ids'); $new_status = get_parameter('new_status'); $return = events_change_status( explode(',', $event_ids), $new_status, $meta, $history ); if ($return !== false) { echo json_encode( [ 'status' => 'status_ok', 'user' => db_get_value( 'fullname', 'tusuario', 'id_user', $config['id_user'] ), ] ); } else { echo json_encode( [ 'status' => 'status_error', 'user' => db_get_value( 'fullname', 'tusuario', 'id_user', $config['id_user'] ), ] ); } return; } if ($change_owner) { $new_owner = get_parameter('new_owner'); $event_id = get_parameter('event_id'); $similars = true; if ($new_owner == -1) { $new_owner = ''; } $return = events_change_owner($event_id, $new_owner, true, $meta, $history); if ($return) { echo 'owner_ok'; } else { echo 'owner_error'; } return; } // Generate a modal window with extended information of given event. if ($get_extended_event) { global $config; $event = get_parameter('event', false); $filter = get_parameter('filter', false); if ($event === false) { return; } $event_id = $event['id_evento']; $readonly = false; if (!$meta && isset($config['event_replication']) && $config['event_replication'] == 1 && $config['show_events_in_local'] == 1 ) { $readonly = true; } // Clean url from events and store in array. $event['clean_tags'] = events_clean_tags($event['tags']); // If the event is not found, we abort. if (empty($event)) { ui_print_error_message('Event not found'); return false; } $dialog_page = get_parameter('dialog_page', 'general'); $filter = get_parameter('filter', []); $similar_ids = get_parameter('similar_ids', $event_id); $group_rep = $filter['group_rep']; $event_rep = $event['event_rep']; $timestamp_first = $event['min_timestamp']; $timestamp_last = $event['max_timestamp']; $server_id = $event['server_id']; $comments = $event['comments']; $event['similar_ids'] = $similar_ids; if (!isset($comments)) { $comments = $event['user_comment']; } // Check ACLs. $access = false; if (is_user_admin($config['id_user'])) { // Do nothing if you're admin, you get full access. $access = true; } else if ($config['id_user'] == $event['owner_user']) { // Do nothing if you're the owner user, you get access. $access = true; } else if ($event['id_grupo'] == 0) { // If the event has access to all groups, you get access. $access = true; } else { // Get your groups. $groups = users_get_groups($config['id_user'], 'ER'); if (in_array($event['id_grupo'], array_keys($groups))) { // If event group is among the groups of the user, you get access. $access = true; } else if ($event['id_agente'] && agents_check_access_agent($event['id_agente'], 'ER') ) { // Secondary group, indirect access. $access = true; } } if (!$access) { // If all the access types fail, abort. echo 'Access denied'; return false; } // Print group_rep in a hidden field to recover it from javascript. html_print_input_hidden('group_rep', (int) $group_rep); if ($event === false) { return; } // Tabs. $tabs = "'; // Get criticity image. switch ($event['criticity']) { default: case 0: $img_sev = 'images/status_sets/default/severity_maintenance_rounded.png'; break; case 1: $img_sev = 'images/status_sets/default/severity_informational_rounded.png'; break; case 2: $img_sev = 'images/status_sets/default/severity_normal_rounded.png'; break; case 3: $img_sev = 'images/status_sets/default/severity_warning_rounded.png'; break; case 4: $img_sev = 'images/status_sets/default/severity_critical_rounded.png'; break; case 5: $img_sev = 'images/status_sets/default/severity_minor_rounded.png'; break; case 6: $img_sev = 'images/status_sets/default/severity_major_rounded.png'; break; } if (!$readonly && ((tags_checks_event_acl( $config['id_user'], $event['id_grupo'], 'EM', $event['clean_tags'], $childrens_ids )) || (tags_checks_event_acl( $config['id_user'], $event['id_grupo'], 'EW', $event['clean_tags'], $childrens_ids )) || (tags_checks_event_acl( $config['id_user'], $event['id_grupo'], 'ER', $event['clean_tags'], $childrens_ids ))) ) { $responses = events_page_responses($event); } else { $responses = ''; } $console_url = ''; // If metaconsole switch to node to get details and custom fields. if ($meta) { $server = metaconsole_get_connection_by_id($server_id); } else { $server = ''; } $details = events_page_details($event, $server); if (events_has_extended_info($event['id_evento']) === true) { $related = events_page_related($event, $server); } $connected = true; if ($meta) { if (metaconsole_connect($server) === NOERR) { $connected = true; } else { $connected = false; } } if ($connected === true) { $custom_fields = events_page_custom_fields($event); $custom_data = events_page_custom_data($event); } if ($meta && $connected === true) { metaconsole_restore_db(); } $general = events_page_general($event); $comments = '
'; $notifications = ''; $notifications .= ''; $notifications .= ''; $notifications .= ''; $notifications .= ''; $notifications .= ''; $loading = ''; $i = 0; $tab['general'] = $i++; $tab['details'] = $i++; if (!empty($related)) { $tab['related'] = $i++; } $tab['custom_fields'] = $i++; $tab['comments'] = $i++; $tab['responses'] = $i++; $tab['custom_data'] = $i++; $out = '
'.$tabs.$notifications.$loading.$general.$details.$related.$custom_fields.$comments.$responses.$custom_data.html_print_input_hidden('id_event', $event['id_evento']).'
'; $js = ''; echo $out.$js; } if ($get_events_details) { $event_ids = explode(',', get_parameter('event_ids')); $events = db_get_all_rows_filter( 'tevento', [ 'id_evento' => $event_ids, 'order' => 'utimestamp ASC', ], [ 'evento', 'utimestamp', 'estado', 'criticity', 'id_usuario', ], 'AND', true ); $out = ''; $out .= ''; foreach ($events as $event) { switch ($event['estado']) { case 0: $img = ui_get_full_url('images/star.png', false, false, false); $title = __('New event'); break; case 1: $img = ui_get_full_url('images/tick.png', false, false, false); $title = __('Event validated'); break; case 2: $img = ui_get_full_url('images/hourglass.png', false, false, false); $title = __('Event in process'); break; default: // Ignore. break; } $out .= ''; $out .= ''; $out .= ''; $out .= ''; $out .= ''; $out .= ''; $out .= ''; $out .= ''; $out .= ''; } $out .= '
'; $out .= io_safe_output($event['evento']); $out .= '
'; $out .= html_print_image(ui_get_full_url('images/clock.png', false, false, false), true, ['title' => __('Timestamp'), 'class' => 'invert_filter'], false, true); $out .= ''; $out .= date($config['date_format'], $event['utimestamp']); $out .= '
'; $out .= html_print_image($img, true, ['title' => $title], false, true); $out .= ''; $out .= $title; if ($event['estado'] == 1) { if (empty($event['id_usuario'])) { $ack_user = ''.__('Auto').''; } else { $ack_user = $event['id_usuario']; } $out .= ' ('.$ack_user.')'; } $out .= '
'; $out .= '
'; $out .= '
'; echo $out; } if ($table_events) { include_once 'include/functions_events.php'; include_once 'include/functions_graph.php'; $id_agente = (int) get_parameter('id_agente', 0); $all_events_24h = (int) get_parameter('all_events_24h', 0); // Fix: for tag functionality groups have to be all user_groups // (propagate ACL funct!). $groups = users_get_groups($config['id_user']); $tags_condition = tags_get_acl_tags( $config['id_user'], array_keys($groups), 'ER', 'event_condition', 'AND' ); echo '
'; echo ''; echo html_print_switch( [ 'name' => 'all_events_24h', 'value' => $all_events_24h, 'id' => 'checkbox-all_events_24h', ] ); echo '
'; $date_subtract_day = (time() - (24 * 60 * 60)); if ($all_events_24h) { events_print_event_table( 'utimestamp > '.$date_subtract_day, 200, '100%', false, $id_agente, true ); } else { events_print_event_table( 'estado <> 1 '.$tags_condition, 200, '100%', false, $id_agente, true ); } } if ($get_list_events_agents) { global $config; $id_agent = get_parameter('id_agent'); $server_id = get_parameter('server_id'); $event_type = get_parameter('event_type'); $severity = implode(',', get_parameter('severity', -1)); $status = get_parameter('status'); $search = get_parameter('search'); $id_agent_module = get_parameter('id_agent_module'); $event_view_hr = get_parameter('event_view_hr'); $id_user_ack = get_parameter('id_user_ack'); $tag_with = get_parameter('tag_with'); $tag_without = get_parameter('tag_without'); $filter_only_alert = get_parameter('filter_only_alert'); $date_from = get_parameter('date_from'); $date_to = get_parameter('date_to'); $id_user = $config['id_user']; $returned_sql = events_sql_events_grouped_agents( $id_agent, $server_id, $event_type, $severity, $status, $search, $id_agent_module, $event_view_hr, $id_user_ack, $tag_with, $tag_without, $filter_only_alert, $date_from, $date_to, $id_user ); $returned_list = events_list_events_grouped_agents($returned_sql); echo $returned_list; return; } if ($total_events) { global $config; $sql_count_event = 'SELECT SQL_NO_CACHE COUNT(id_evento) FROM tevento '; if ($config['event_view_hr']) { $sql_count_event .= 'WHERE utimestamp > (UNIX_TIMESTAMP(NOW()) - '.($config['event_view_hr'] * SECONDS_1HOUR).')'; } $system_events = db_get_value_sql($sql_count_event); echo $system_events; return; } if ($total_event_graph) { global $config; include_once $config['homedir'].'/include/functions_graph.php'; $prueba = grafico_eventos_total('', 280, 150, false, true); echo $prueba; return; } if ($graphic_event_group) { global $config; include_once $config['homedir'].'/include/functions_graph.php'; $prueba = grafico_eventos_grupo(280, 150, '', false, true); echo $prueba; return; } if ($get_table_response_command) { global $config; $response_id = get_parameter('event_response_id'); $params_string = db_get_value( 'params', 'tevent_response', 'id', $response_id ); $params = explode(',', $params_string); $table = new stdClass; $table->id = 'events_responses_table_command'; $table->width = '90%'; $table->styleTable = 'text-align:center; margin: 0 auto;'; $table->style = []; $table->style[0] = 'text-align:center;'; $table->style[1] = 'text-align:center;'; $table->head = []; $table->head[0] = __('Parameters'); $table->head[0] .= ui_print_help_tip( __('These commands will apply to all selected events'), true ); $table->head[1] = __('Value'); if (isset($params) === true && is_array($params) === true ) { foreach ($params as $key => $value) { $table->data[$key][0] = $value; $table->data[$key][1] = html_print_input_text( $value.'-'.$key, '', '', 50, 255, true, false, false, '', 'response_command_input' ); } } echo '
'; echo html_print_table($table, true); echo '
'; echo html_print_submit_button( __('Execute'), 'enter_command', false, 'class="sub next float-right mrgn_top_15px mrgn_right_25px"', true ); return; } if ($get_events_fired) { global $config; $id = get_parameter('id_row'); $idGroup = get_parameter('id_group'); $agents = get_parameter('agents', null); $query = ' AND id_evento >= '.$id; $type = []; $alert = get_parameter('alert_fired'); if ($alert == 'true') { $resultAlert = alerts_get_event_status_group( $idGroup, [ 'alert_fired', 'alert_ceased', ], $query, $agents ); } $critical = get_parameter('critical'); if ($critical == 'true') { $resultCritical = alerts_get_event_status_group( $idGroup, [ 'going_up_critical', 'going_down_critical', ], $query, $agents ); } $warning = get_parameter('warning'); if ($warning == 'true') { $resultWarning = alerts_get_event_status_group( $idGroup, [ 'going_up_warning', 'going_down_warning', ], $query, $agents ); } $unknown = get_parameter('unknown'); if ($unknown == 'true') { $resultUnknown = alerts_get_event_status_group( $idGroup, 'going_unknown', $query, $agents ); } if ($resultAlert) { $return = [ 'fired' => $resultAlert, 'sound' => $config['sound_alert'], ]; $event = events_get_event($resultAlert); $module_name = modules_get_agentmodule_name($event['id_agentmodule']); $agent_name = agents_get_alias($event['id_agente']); $return['message'] = io_safe_output($agent_name).' - '; $return['message'] .= __('Alert fired in module '); $return['message'] .= io_safe_output($module_name).' - '; $return['message'] .= $event['timestamp']; } else if ($resultCritical) { $return = [ 'fired' => $resultCritical, 'sound' => $config['sound_critical'], ]; $event = events_get_event($resultCritical); $module_name = modules_get_agentmodule_name($event['id_agentmodule']); $agent_name = agents_get_alias($event['id_agente']); $return['message'] = io_safe_output($agent_name).' - '; $return['message'] .= __('Module ').io_safe_output($module_name); $return['message'] .= __(' is going to critical').' - '; $return['message'] .= $event['timestamp']; } else if ($resultWarning) { $return = [ 'fired' => $resultWarning, 'sound' => $config['sound_warning'], ]; $event = events_get_event($resultWarning); $module_name = modules_get_agentmodule_name($event['id_agentmodule']); $agent_name = agents_get_alias($event['id_agente']); $return['message'] = io_safe_output($agent_name).' - '; $return['message'] .= __('Module ').io_safe_output($module_name); $return['message'] .= __(' is going to warning').' - '; $return['message'] .= $event['timestamp']; } else if ($resultUnknown) { $return = [ 'fired' => $resultUnknown, 'sound' => $config['sound_alert'], ]; $event = events_get_event($resultUnknown); $module_name = modules_get_agentmodule_name($event['id_agentmodule']); $agent_name = agents_get_alias($event['id_agente']); $return['message'] = io_safe_output($agent_name).' - '; $return['message'] .= __('Module ').io_safe_output($module_name); $return['message'] .= __(' is going to unknown').' - '; $return['message'] .= $event['timestamp']; } else { $return = ['fired' => 0]; } echo io_json_mb_encode($return); }