$filter] + $other_filter) ); if ($modules === false) { $modules = []; } $modules = array_unique($modules); $modules = io_safe_output($modules); echo json_encode($modules); return; } if ($get_module_detail) { // This script is included manually to be // included after jquery and avoid error. ui_include_time_picker(); ui_require_jquery_file( 'ui.datepicker-'.get_user_language(), 'include/javascript/i18n/' ); $module_id = (int) get_parameter('id_module'); $period = get_parameter('period', SECONDS_1DAY); if ($period === 'undefined') { $period = SECONDS_1DAY; } else { $period = (int) $period; } $group = agents_get_agentmodule_group($module_id); $agentId = (int) get_parameter('id_agent'); $server_name = (string) get_parameter('server_name'); if (is_metaconsole()) { $server = metaconsole_get_connection($server_name); if (metaconsole_connect($server) != NOERR) { return; } $conexion = false; } else { $conexion = false; } $freesearch = (string) get_parameter('freesearch', ''); $free_checkbox = (bool) get_parameter('free_checkbox', false); $selection_mode = get_parameter('selection_mode', 'fromnow'); $utimestamp = get_system_time(); $date_from = (string) get_parameter( 'date_from', date(DATE_FORMAT, ($utimestamp - SECONDS_1DAY)) ); $time_from = (string) get_parameter( 'time_from', date(TIME_FORMAT, ($utimestamp - SECONDS_1DAY)) ); $date_to = (string) get_parameter( 'date_to', date(DATE_FORMAT, $utimestamp) ); $time_to = (string) get_parameter( 'time_to', date(TIME_FORMAT, $utimestamp) ); // Definition of new table. $formtable = new stdClass(); $formtable->width = '98%'; $formtable->class = 'databox'; $formtable->data = []; $formtable->size = []; $moduletype_name = modules_get_moduletype_name( modules_get_agentmodule_type($module_id) ); $periods = [ SECONDS_5MINUTES => __('5 minutes'), SECONDS_30MINUTES => __('30 minutes'), SECONDS_1HOUR => __('1 hour'), SECONDS_6HOURS => __('6 hours'), SECONDS_12HOURS => __('12 hours'), SECONDS_1DAY => __('1 day'), SECONDS_1WEEK => __('1 week'), SECONDS_15DAYS => __('15 days'), SECONDS_1MONTH => __('1 month'), SECONDS_3MONTHS => __('3 months'), SECONDS_6MONTHS => __('6 months'), SECONDS_1YEAR => __('1 year'), SECONDS_2YEARS => __('2 years'), SECONDS_3YEARS => __('3 years'), ]; $formtable->data[0][0] = '
'.html_print_radio_button_extended( 'selection_mode', 'fromnow', '', $selection_mode, false, '', 'class="mrgn_right_15px"', true ).__('Choose a time from now').'
'; $formtable->colspan[0][0] = 2; $formtable->data[0][2] = html_print_select( $periods, 'period', $period, '', '', 0, true, false, false ); $formtable->data[0][3] = "".html_print_image('images/refresh@svg.svg', true, ['style' => 'vertical-align: middle;', 'border' => '0', 'class' => 'main_menu_icon invert_filter' ]).''; $formtable->rowspan[0][3] = 2; $formtable->cellstyle[0][3] = 'vertical-align: middle;'; $formtable->data[1][0] = '
'.html_print_radio_button_extended( 'selection_mode', 'range', '', $selection_mode, false, '', 'class="mrgn_right_15px"', true ).__('Specify time range'); $formtable->data[1][1] = ''.__('Timestamp from:').'
'; $formtable->data[1][2] = '
'.html_print_input_text( 'date_from', $date_from, '', 10, 10, true ); $formtable->data[1][2] .= html_print_input_text( 'time_from', $time_from, '', 9, 8, true ); $formtable->data[1][1] .= '
'; $formtable->data[1][1] .= ''.__('Timestamp to:').''; $formtable->data[1][2] .= '
'; $formtable->data[1][2] .= html_print_input_text( 'date_to', $date_to, '', 10, 10, true ); $formtable->data[1][2] .= html_print_input_text( 'time_to', $time_to, '', 9, 8, true ).'
'; $freesearch_object = ''; if (preg_match('/_string/', $moduletype_name)) { $formtable->data[2][0] = __('Free search').' '; $formtable->data[2][1] = html_print_input_text( 'freesearch', $freesearch, '', 20, null, true ); $formtable->data[2][2] = html_print_checkbox( 'free_checkbox', 1, $free_checkbox, true ); $formtable->data[2][2] .= ' '.__('Exact phrase'); $freesearch_object = json_encode( [ 'value' => io_safe_output($freesearch), 'exact' => (bool) $free_checkbox, ] ); } html_print_table($formtable); $offset = (int) get_parameter('offset'); $block_size = (int) $config['block_size']; $columns = []; $datetime_from = strtotime($date_from.' '.$time_from); $datetime_to = strtotime($date_to.' '.$time_to); $columns = [ 'Data' => [ 'data', 'modules_format_data', 'align' => 'center', 'width' => '230px' ], ]; if ($config['prominent_time'] == 'comparation') { $columns['Time'] = [ 'utimestamp', 'modules_format_time', 'align' => 'center', 'width' => '50px' ]; } else { $columns['Timestamp'] = [ 'utimestamp', 'modules_format_timestamp', 'align' => 'center', 'width' => '50px' ]; } if ($selection_mode === 'fromnow') { $date = get_system_time(); $period = $period; } else { $period = ($datetime_to - $datetime_from); $date = ($datetime_from + $period); } $count = modules_get_agentmodule_data( $module_id, $period, $date, true, $conexion, 'ASC', $freesearch_object ); $module_data = modules_get_agentmodule_data( $module_id, $period, $date, false, $conexion, 'DESC', $freesearch_object ); if (empty($module_data)) { $result = []; } else { // Paginate the result. $result = array_slice($module_data, $offset, $block_size); } // Definition of new class. $table = new stdClass(); $table->width = '100%'; $table->class = 'databox data'; $table->data = []; $index = 0; foreach ($columns as $col => $attr) { $table->head[$index] = $col; if ($col === 'Data') { $table->head[$index] .= ui_print_help_tip( __('In Pandora FMS, data is stored compressed. The data visualization in database, charts or CSV exported data won\'t match, because is interpreted at runtime. Please check \'Pandora FMS Engineering\' chapter from documentation.'), true ); } if (isset($attr['align'])) { $table->align[$index] = $attr['align']; } if (isset($attr['width'])) { $table->size[$index] = $attr['width']; } $index++; } $id_type_web_content_string = db_get_value( 'id_tipo', 'ttipo_modulo', 'nombre', 'web_content_string' ); $post_process = db_get_value_filter( 'post_process', 'tagente_modulo', ['id_agente_modulo' => $module_id] ); $unit = db_get_value_filter( 'unit', 'tagente_modulo', ['id_agente_modulo' => $module_id] ); foreach ($result as $row) { $data = []; $is_web_content_string = (bool) db_get_value_filter( 'id_agente_modulo', 'tagente_modulo', [ 'id_agente_modulo' => $row['id_agente_modulo'], 'id_tipo_modulo' => $id_type_web_content_string, ] ); foreach ($columns as $col => $attr) { if ($attr[1] != 'modules_format_data') { $data[] = date('d F Y h:i:s A', $row['utimestamp']); } else if (is_snapshot_data($row[$attr[0]])) { if ($config['command_snapshot']) { $imagetab = ''; $image = ''; $data[] = ''.$image.''; } else { $data[] = ''.wordwrap(io_safe_input($row[$attr[0]]), 60, "
\n", true).'
'; } } else if (($config['command_snapshot'] == '0') && (preg_match("/[\n]+/i", $row[$attr[0]]))) { // Its a single-data, multiline data (data snapshot) ? // I dont why, but using index (value) method, data is automatically converted to html entities ¿? $data[] = html_print_result_div($row[$attr[0]]); } else if ($is_web_content_string) { // Fixed the goliat sends the strings from web // without HTML entities. $data[] = io_safe_input($row[$attr[0]]); } else { // Fixed the data from Selenium Plugin. if ($row[$attr[0]] != strip_tags($row[$attr[0]])) { $data[] = html_print_result_div($row[$attr[0]]); } else if (is_numeric($row[$attr[0]]) && !modules_is_string_type($row['module_type']) ) { switch ($row['module_type']) { case 15: $value = db_get_value( 'snmp_oid', 'tagente_modulo', 'id_agente_modulo', $module_id ); // System Uptime: // In case of System Uptime module, // shows data in format // "Days hours minutes seconds" if and only if // selected module unit is "_timeticks_" // Take notice that selected unit // may not be postrocess unit. if ($value == '.1.3.6.1.2.1.1.3.0' || $value == '.1.3.6.1.2.1.25.1.1.0' ) { $data_macro = modules_get_unit_macro( $row[$attr[0]], $unit ); if ($data_macro) { $data[] = $data_macro; } else { $data[] = remove_right_zeros( number_format( $row[$attr[0]], $config['graph_precision'], $config['decimal_separator'], $config['thousand_separator'] ) ); } } else { $data[] = remove_right_zeros( number_format( $row[$attr[0]], $config['graph_precision'], $config['decimal_separator'], $config['thousand_separator'] ) ); } break; default: $data_macro = modules_get_unit_macro( $row[$attr[0]], $unit ); if ($data_macro) { $data[] = $data_macro; } else { $data[] = remove_right_zeros( number_format( $row[$attr[0]], $config['graph_precision'], $config['decimal_separator'], $config['thousand_separator'] ) ); } break; } } else { if ($row[$attr[0]] == '') { $data[] = 'No data'; } else { $data_macro = modules_get_unit_macro( $row[$attr[0]], $unit ); if ($data_macro) { $data[] = $data_macro; } else { $data[] = html_print_result_div( $row[$attr[0]] ); } } } } } array_push($table->data, $data); if (count($table->data) > 200) { break; } } if (empty($table->data)) { ui_print_error_message(__('No available data to show')); } else { ui_pagination( count($count), false, $offset, 0, false, 'offset', true, 'binary_dialog' ); html_print_table($table); } if (is_metaconsole()) { metaconsole_restore_db(); } return; } if ($get_module_autocomplete_input) { $id_agent = (int) get_parameter('id_agent'); ob_clean(); if ($id_agent > 0) { html_print_autocomplete_modules( 'autocomplete_module_name', '', [$id_agent] ); return; } return; } if ($add_module_relation) { $result = false; $id_module_a = (int) get_parameter('id_module_a'); $id_module_b = (int) get_parameter('id_module_b'); $type = (string) get_parameter('relation_type'); if ($id_module_a < 1) { $name_module_a = get_parameter('name_module_a', ''); if ($name_module_a) { $id_module_a = (int) db_get_value( 'id_agente_modulo', 'tagente_modulo', 'nombre', $name_module_a ); } else { echo json_encode($result); return; } } if ($id_module_b < 1) { $name_module_b = get_parameter('name_module_b', ''); if ($name_module_b) { $id_module_b = (int) db_get_value( 'id_agente_modulo', 'tagente_modulo', 'nombre', $name_module_b ); } else { echo json_encode($result); return; } } if ($id_module_a > 0 && $id_module_b > 0) { $result = modules_add_relation($id_module_a, $id_module_b, $type); } echo json_encode($result); return; } if ($remove_module_relation) { $id_relation = (int) get_parameter('id_relation'); if ($id_relation > 0) { $result = (bool) modules_delete_relation($id_relation); } echo json_encode($result); return; } if ($change_module_relation_updates) { $id_relation = (int) get_parameter('id_relation'); if ($id_relation > 0) { $result = (bool) modules_change_relation_lock($id_relation); } echo json_encode($result); return; } if ($get_id_tag) { $tag_name = get_parameter('tag_name'); if ($tag_name) { $tag_id = db_get_value('id_tag', 'ttag', 'name', $tag_name); } else { $tag_id = 0; } echo $tag_id; return; } if ($list_modules) { include_once $config['homedir'].'/include/functions_modules.php'; include_once $config['homedir'].'/include/functions_servers.php'; include_once $config['homedir'].'/include/functions_tags.php'; include_once $config['homedir'].'/include/functions_clippy.php'; // Disable module edition in cluster module list. $cluster_view = (bool) preg_match( '/operation\/cluster\/cluster/', $_SERVER['HTTP_REFERER'] ); $agent_a = (bool) check_acl($config['id_user'], 0, 'AR'); $agent_w = (bool) check_acl($config['id_user'], 0, 'AW'); $access = ($agent_a === true) ? 'AR' : (($agent_w === true) ? 'AW' : 'AR'); $id_agent = (int) get_parameter('id_agente'); $id_agente = $id_agent; $show_notinit = (bool) get_parameter('show_notinit'); $cluster_list = (int) get_parameter('cluster_list'); $sortField = (string) get_parameter('sort_field'); $sort = (string) get_parameter('sort', 'none'); $url = 'index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$id_agent; $selectTypeUp = false; $selectTypeDown = false; $selectNameUp = false; $selectNameDown = false; $selectStatusUp = false; $selectStatusDown = false; $selectDataUp = false; $selectDataDown = false; $selectLastContactUp = false; $selectLastContactDown = false; $selected = true; $order[] = [ 'field' => 'tmodule_group.name', 'order' => 'ASC', ]; switch ($sortField) { case 'type': switch ($sort) { case 'up': default: $selectTypeUp = $selected; $order[] = [ 'field' => 'tagente_modulo.id_modulo', 'order' => 'ASC', ]; break; case 'down': $selectTypeDown = $selected; $order[] = [ 'field' => 'tagente_modulo.id_modulo', 'order' => 'DESC', ]; break; } break; case 'name': switch ($sort) { case 'up': $selectNameUp = $selected; $order[] = [ 'field' => 'tagente_modulo.nombre', 'order' => 'ASC', ]; break; case 'down': $selectNameDown = $selected; $order[] = [ 'field' => 'tagente_modulo.nombre', 'order' => 'DESC', ]; break; default: // Ignore. break; } break; case 'status': switch ($sort) { case 'up': $selectStatusUp = $selected; $order[] = [ 'field' => 'tagente_estado.estado=0 DESC,tagente_estado.estado=3 DESC,tagente_estado.estado=2 DESC,tagente_estado.estado=1 DESC', 'order' => '', ]; break; case 'down': $selectStatusDown = $selected; $order[] = [ 'field' => 'tagente_estado.estado=1 DESC,tagente_estado.estado=2 DESC,tagente_estado.estado=3 DESC,tagente_estado.estado=0 DESC', 'order' => '', ]; break; default: // Ignore. break; } break; case 'last_contact': switch ($sort) { case 'up': $selectLastContactUp = $selected; $order[] = [ 'field' => 'tagente_estado.utimestamp', 'order' => 'ASC', ]; break; case 'down': $selectLastContactDown = $selected; $order[] = [ 'field' => 'tagente_estado.utimestamp', 'order' => 'DESC', ]; break; default: // Ignore. break; } break; default: $selectTypeUp = false; $selectTypeDown = false; $selectNameUp = $selected; $selectNameDown = false; $selectStatusUp = false; $selectStatusDown = false; $selectDataUp = false; $selectDataDown = false; $selectLastContactUp = false; $selectLastContactDown = false; $order[] = [ 'field' => 'tagente_modulo.nombre', 'order' => 'ASC', ]; break; } // Fix: for tag functionality groups have to be all user_groups // (propagate ACL funct!). $groups = users_get_groups($config['id_user'], $access); $tags_join = ''; $tags_sql = ''; if ($cluster_list != 1) { $tags = tags_get_user_applied_agent_tags($id_agent, $access); if ($tags === false) { $tags_sql = ' AND 1=0'; } else if (is_array($tags)) { $tags_sql = ' AND ttag_module.id_tag IN ('.implode(',', $tags).')'; $tags_join = 'LEFT JOIN ttag_module ON ttag_module.id_agente_modulo = tagente_modulo.id_agente_modulo'; } } $status_filter_monitor = (int) get_parameter('status_filter_monitor', -1); $status_text_monitor = (string) get_parameter('status_text_monitor'); $filter_monitors = (bool) get_parameter('filter_monitors'); $status_module_group = (int) get_parameter('status_module_group', -1); $monitors_change_filter = (bool) get_parameter('monitors_change_filter'); $status_filter_sql = '1 = 1'; if ($status_filter_monitor === AGENT_MODULE_STATUS_NOT_NORMAL) { // Not normal. $status_filter_sql = ' tagente_estado.estado <> 0'; } else if ($status_filter_monitor !== -1) { $status_filter_sql = 'tagente_estado.estado = '.$status_filter_monitor; } if ($status_module_group !== -1) { $status_module_group_filter = 'tagente_modulo.id_module_group = '.$status_module_group; } else { $status_module_group_filter = 'tagente_modulo.id_module_group >= 0'; } $status_text_monitor_sql = '%'; if (empty($status_text_monitor) === false) { $status_text_monitor_sql .= $status_text_monitor.'%'; } $monitor_filter = (($show_notinit === false) ? AGENT_MODULE_STATUS_NO_DATA : -15); // Count monitors/modules // Build the order sql. $first = true; foreach ($order as $ord) { if ($first === true) { $first = false; } else { $order_sql .= ','; } $order_sql .= $ord['field'].' '.$ord['order']; } $sql_condition = "FROM tagente_modulo $tags_join INNER JOIN tagente_estado ON tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo LEFT JOIN tmodule_group ON tagente_modulo.id_module_group = tmodule_group.id_mg WHERE tagente_modulo.id_agente = $id_agente AND nombre LIKE '$status_text_monitor_sql' AND delete_pending = 0 AND disabled = 0 AND $status_filter_sql AND $status_module_group_filter $tags_sql AND tagente_estado.estado != $monitor_filter "; $count_modules = db_get_all_rows_sql( 'SELECT COUNT(DISTINCT tagente_modulo.id_agente_modulo)'.$sql_condition ); $count_modules = (isset($count_modules[0]) === true) ? reset($count_modules[0]) : 0; // Get monitors/modules // Get all module from agent. $sql_modules_info = "SELECT tagente_estado.*, tagente_modulo.*, tmodule_group.* $sql_condition GROUP BY tagente_modulo.id_agente_modulo ORDER BY $order_sql"; if ($monitors_change_filter === true) { $limit = ' LIMIT '.$config['block_size'].' OFFSET 0'; } else { $limit = ' LIMIT '.$config['block_size'].' OFFSET '.get_parameter('offset', 0); } $paginate_module = false; if (isset($config['paginate_module']) === true) { $paginate_module = (bool) $config['paginate_module']; } if ($paginate_module === true) { $modules = db_get_all_rows_sql($sql_modules_info.$limit); } else { $modules = db_get_all_rows_sql($sql_modules_info); } if (empty($modules) === true) { $modules = []; } // Urls to sort the table. $url_up_type = $url.'&sort_field=type&sort=up&refr=&filter_monitors=1&status_filter_monitor='.$status_filter_monitor.' &status_text_monitor='.$status_text_monitor.'&status_module_group= '.$status_module_group; $url_down_type = $url.'&sort_field=type&sort=down&refr=&filter_monitors=1&status_filter_monitor='.$status_filter_monitor.' &status_text_monitor='.$status_text_monitor.'&status_module_group= '.$status_module_group; $url_up_name = $url.'&sort_field=name&sort=up&refr=&filter_monitors=1&status_filter_monitor='.$status_filter_monitor.' &status_text_monitor='.$status_text_monitor.'&status_module_group= '.$status_module_group; $url_down_name = $url.'&sort_field=name&sort=down&refr=&filter_monitors=1&status_filter_monitor='.$status_filter_monitor.' &status_text_monitor='.$status_text_monitor.'&status_module_group= '.$status_module_group; $url_up_status = $url.'&sort_field=status&sort=up&refr=&filter_monitors=1&status_filter_monitor='.$status_filter_monitor.' &status_text_monitor='.$status_text_monitor.'&status_module_group= '.$status_module_group; $url_down_status = $url.'&sort_field=status&sort=down&refr=&filter_monitors=1&status_filter_monitor='.$status_filter_monitor.' &status_text_monitor='.$status_text_monitor.'&status_module_group= '.$status_module_group; $url_up_last = $url.'&sort_field=last_contact&sort=up&refr=&filter_monitors=1&status_filter_monitor='.$status_filter_monitor.' &status_text_monitor='.$status_text_monitor.'&status_module_group= '.$status_module_group; $url_down_last = $url.'&sort_field=last_contact&sort=down&refr=&filter_monitors=1&status_filter_monitor='.$status_filter_monitor.' &status_text_monitor='.$status_text_monitor.'&status_module_group= '.$status_module_group; // Enterprise policies functions included. $isFunctionPolicies = enterprise_include_once('include/functions_policies.php'); // Table. $table = new stdClass(); $table->width = '100%'; $table->styleTable = 'border: 0;border-radius: 0;vertical-align: baseline;'; $table->cellpadding = 0; $table->cellspacing = 0; $table->class = 'tactical_table info_table'; $table->align = []; $table->style = []; $table->head = []; $table->data = []; $table->headstyle = []; // Cell alignments. $table->align[0] = 'center'; $table->align[1] = 'center'; $table->align[2] = 'left'; $table->align[3] = 'left'; $table->align[4] = 'center'; $table->align[5] = 'left'; $table->align[6] = 'left'; $table->align[7] = 'center'; // Fixed styles. $table->headstyle[0] = 'width: 4%;text-align: center;'; $table->headstyle[1] = 'width: 55px;text-align: left;'; $table->headstyle[4] = 'width: 100px; text-align: center'; $table->headstyle[7] = 'width: 130px; text-align: center'; $table->headstyle[8] = 'width: 10%; text-align: center'; $table->headstyle[9] = 'text-align: center'; // Row class. $table->head[0] = ($isFunctionPolicies !== ENTERPRISE_NOT_HOOK) ? ''.__('P').'' : ''; $table->head[1] = ''.__('T').''.ui_get_sorting_arrows($url_up_type, $url_down_type, $selectTypeUp, $selectTypeDown); $table->head[2] = ''.__('Module name').''.ui_get_sorting_arrows($url_up_name, $url_down_name, $selectNameUp, $selectNameDown); $table->head[3] = ''.__('Description').''; $table->head[4] = ''.__('Status').''.ui_get_sorting_arrows($url_up_status, $url_down_status, $selectStatusUp, $selectStatusDown); $table->head[5] = ''.__('Thresholds').''; $table->head[6] = ''.__('Data').''; $table->head[7] = ''.__('Last contact').''.ui_get_sorting_arrows($url_up_last, $url_down_last, $selectLastContactUp, $selectLastContactDown); $table->head[8] = ''.__('Graphs').''; $table->head[9] = ''.__('Actions').''; $last_modulegroup = 0; $rowIndex = 0; $id_type_web_content_string = db_get_value( 'id_tipo', 'ttipo_modulo', 'nombre', 'web_content_string' ); $show_context_help_first_time = false; $hierachy_mode = (string) get_parameter('hierachy_mode'); if ($hierachy_mode === 'true') { $modules_hierachy = []; $modules_hierachy = get_hierachy_modules_tree($modules); $modules_dt = get_dt_from_modules_tree($modules_hierachy); $modules = $modules_dt; } foreach ($modules as $module) { $idAgenteModulo = $module['id_agente_modulo']; if ($hierachy_mode === 'false') { // The code add the row of 1 cell with title of group for to be more organice the list. if ($module['id_module_group'] != $last_modulegroup) { $table->colspan[$rowIndex][0] = count($table->head); $table->rowclass[$rowIndex] = 'datos4'; array_push($table->data, [''.$module['name'].'']); $rowIndex++; $last_modulegroup = $module['id_module_group']; } // End of title of group. } $table->rowstyle[$rowIndex] = 'vertical-align: baseline'; $data = []; // Module policy. $data[0] = ''; if ($isFunctionPolicies !== ENTERPRISE_NOT_HOOK) { if ((int) $module['id_policy_module'] !== 0) { $linked = (bool) policies_is_module_linked($module['id_agente_modulo']); $id_policy = db_get_value_sql('SELECT id_policy FROM tpolicy_modules WHERE id = '.$module['id_policy_module']); $name_policy = (empty($id_policy) === false) ? db_get_value_sql('SELECT name FROM tpolicies WHERE id = '.$id_policy) : __('Unknown'); $policyInfo = policies_info_module_policy($module['id_policy_module']); $adopt = policies_is_module_adopt($module['id_agente_modulo']); if ($linked === true) { if ($adopt === true) { $img = 'images/policies_brick.png'; $title = '('.__('Adopted').') '.$name_policy; } else { $img = 'images/policy@svg.svg'; $title = $name_policy; } } else { if ($adopt === true) { $img = 'images/policies_not_brick.png'; $title = '('.__('Unlinked').') ('.__('Adopted').') '.$name_policy; } else { $img = 'images/unlinkpolicy.png'; $title = '('.__('Unlinked').') '.$name_policy; } } $data[0] .= html_print_anchor( [ 'href' => ui_get_full_url('?sec=gmodules&sec2=enterprise/godmode/policies/policies&id='.$id_policy), 'content' => html_print_image( $img, true, [ 'title' => $title, 'style' => 'margin: 0 5px;', 'class' => 'main_menu_icon', ] ), ], true ); } } // Module server type. $data[1] = ''; $data[1] .= ui_print_servertype_icon((int) $module['id_modulo']); // Module name. $data[2] = ''; if (isset($module['deep']) === true && ((int) $module['deep'] !== 0)) { $data[2] .= str_repeat('    ', $module['deep']); $data[2] .= html_print_image('images/icono_escuadra.png', true, ['style' => 'padding-bottom: inherit;']).'  '; } if ((bool) $module['quiet'] === true) { $data[2] .= html_print_image( 'images/dot_blue.png', true, [ 'border' => '0', 'title' => __('Quiet'), 'alt' => '', ] ); } $data[2] .= ui_print_truncate_text($module['nombre'], 'module_medium', false, true, true, '…', 'font-size: 9pt;'); if (empty($module['extended_info']) === false) { $data[2] .= ui_print_help_tip($module['extended_info'], true, '/images/default_list.png'); } // Adds tag context information. if (tags_get_modules_tag_count($module['id_agente_modulo']) > 0) { $data[2] .= ' '.html_print_image('images/tag_red.png', true, ['id' => 'tag-details-'.$module['id_agente_modulo'], 'class' => 'img_help invert_filter']).' '; } // Adds relations context information. if (modules_relation_exists($module['id_agente_modulo']) === true) { $data[2] .= ' '.html_print_image('images/link2.png', true, ['id' => 'relations-details-'.$module['id_agente_modulo'], 'class' => 'img_help']).' '; } // Module description. $data[3] = ''; $data[3] .= ui_print_string_substr($module['descripcion'], 60, true, 9); // Module status. $data[4] = ''; if ($module['datos'] !== strip_tags($module['datos'])) { $module_value = io_safe_input($module['datos']); } else { $module_value = io_safe_output($module['datos']); } modules_get_status( $module['id_agente_modulo'], $module['estado'], $module_value, $status, $title ); $last_status_change_text = __('Time elapsed since last status change: '); $last_status_change_text .= (empty($module['last_status_change']) === false) ? human_time_comparation($module['last_status_change']) : __('N/A'); $data[4] .= ui_print_status_image($status, htmlspecialchars($title), true, false, false, true, $last_status_change_text); if ($show_context_help_first_time === false) { $show_context_help_first_time = true; if ((int) $module['estado'] === AGENT_MODULE_STATUS_UNKNOWN) { $data[4] .= clippy_context_help('module_unknow'); } } // Module thresholds. $data[5] = ''; if ((int) $module['id_tipo_modulo'] !== 25) { $data[5] = ui_print_module_warn_value($module['max_warning'], $module['min_warning'], $module['str_warning'], $module['max_critical'], $module['min_critical'], $module['str_critical'], $module['warning_inverse'], $module['critical_inverse'], 'class="font_9pt"'); } else { $data[5] = ''; } // Module last value. $data[6] = ''; $data[6] .= ''.modules_get_agentmodule_data_for_humans($module).''; // Last contact. $data[7] = ''; if ((int) $module['estado'] === 3) { $timestampClass = 'redb font_9pt'; } else { $timestampClass = 'font_9pt'; } $data[7] .= ui_print_timestamp($module['utimestamp'], true, ['class' => $timestampClass ]); // Graph buttons. $data[8] = ''; if ((int) $module['history_data'] === 1) { if (empty((float) $module['min_warning']) === true && empty((float) $module['max_warning']) === true && empty($module['warning_inverse']) === true && empty((float) $module['min_critical']) === true && empty((float) $module['max_critical']) === true && empty($module['critical_inverse']) === true ) { $tresholds = false; } else { $tresholds = true; } $graphButtons = []; $graph_type = return_graphtype($module['id_tipo_modulo']); $nombre_tipo_modulo = modules_get_moduletype_name($module['id_tipo_modulo']); $handle = 'stat'.$nombre_tipo_modulo.'_'.$module['id_agente_modulo']; $url = 'include/procesos.php?agente='.$module['id_agente_modulo']; $win_handle = dechex(crc32($module['id_agente_modulo'].$module['nombre'])); // Show events for boolean modules by default. $draw_events = ($graph_type === 'boolean') ? 1 : 0; // Try to display the SNMP module realtime graph. $rt_button = get_module_realtime_link_graph($module); if (empty($rt_button) === false) { $graphButtons[] = $rt_button; } if ($tresholds === true || $graph_type === 'boolean') { $link = 'winopeng_var(\'operation/agentes/stat_win.php?type='.$graph_type.'&period='.SECONDS_1DAY.'&id='.$module['id_agente_modulo'].'&refresh='.SECONDS_10MINUTES.'&histogram=1\', \'day_'.$win_handle.'\', 800, 480)'; $graphButtons[] = html_print_anchor( [ 'href' => 'javascript:'.$link, 'content' => html_print_image( 'images/event-history.svg', true, [ 'class' => 'main_menu_icon' ] ), ], true ); } if (is_snapshot_data($module['datos']) === false) { $link = 'winopeng_var(\'operation/agentes/stat_win.php?type='.$graph_type.'&period='.SECONDS_1DAY.'&id='.$module['id_agente_modulo'].'&refresh='.SECONDS_10MINUTES.'&draw_events='.$draw_events.'\', \'day_'.$win_handle.'\', 800, 480)'; $graphButtons[] = html_print_anchor( [ 'href' => 'javascript:'.$link, 'content' => html_print_image( 'images/module-graph.svg', true, [ 'class' => 'main_menu_icon' ] ), ], true ); } $modules_get_agentmodule_name = modules_get_agentmodule_name($module['id_agente_modulo']); // Escape the double quotes that may have the name of the module. $modules_get_agentmodule_name = str_replace('"', '\"', $modules_get_agentmodule_name); $graphButtons[] = html_print_anchor( [ 'href' => 'javascript: show_module_detail_dialog('.$module['id_agente_modulo'].', '.$id_agente.', \'\', '.(0).', '.SECONDS_1DAY.', \''.$modules_get_agentmodule_name.'\')', 'content' => html_print_image( 'images/simple-value.svg', true, [ 'class' => 'main_menu_icon' ] ), ], true ); $data[8] = html_print_div( [ 'class' => 'table_action_buttons', 'content' => implode('', $graphButtons), ], true ); } // Actions. $data[9] = ''; $moduleActionButtons = []; if (((int) $module['id_modulo'] !== 1) && ((int) $module['id_tipo_modulo'] !== 100)) { if ($agent_w === true) { if ((int) $module['flag'] === 0) { $additionalLinkAction = '&flag=1'; $linkCaption = __('Force checks'); $imgaction = 'images/force@svg.svg'; } else { $additionalLinkAction = ''; $linkCaption = __('Refresh'); $imgaction = 'images/go-back@svg.svg'; } $moduleActionButtons[] = html_print_anchor( [ 'href' => 'index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$id_agente.'&id_agente_modulo='.$module['id_agente_modulo'].'&refr=60'.$additionalLinkAction.'"', 'content' => html_print_image( $imgaction, true, [ 'class' => 'main_menu_icon' ] ), ], true ); } } if ((bool) check_acl($config['id_user'], $id_grupo, 'AW') === true && $cluster_view === false ) { $moduleActionButtons[] = html_print_anchor( [ 'href' => 'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$id_agente.'&tab=module&id_agent_module='.$module['id_agente_modulo'].'&edit_module='.$module['id_modulo'].'"', 'content' => html_print_image( 'images/edit.svg', true, [ 'class' => 'main_menu_icon' ] ), ], true ); } $data[9] = html_print_div( [ 'class' => 'table_action_buttons', 'content' => implode('', $moduleActionButtons), ], true ); array_push($table->data, $data); $rowIndex++; } ui_require_javascript_file('pandora.js'); ?> data) === true) { ui_print_info_message( [ 'no_close' => true, 'message' => ($filter_monitors === true) ? __('Any monitors aren\'t with this filter.') : __('This agent doesn\'t have any active monitors.'), ] ); } else { $url = 'index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$id_agente.'&refr=&filter_monitors=1&status_filter_monitor='.$status_filter_monitor.'&status_text_monitor='.$status_text_monitor.'&status_module_group='.$status_module_group; if ($paginate_module === true) { ui_pagination( $count_modules, false, 0, 0, false, 'offset', true, '', 'pagination_list_modules(offset_param)', [ 'count' => '', 'offset' => 'offset_param', ] ); } html_print_table($table); if ($paginate_module === true) { ui_pagination( $count_modules, false, 0, 0, false, 'offset', true, '', 'pagination_list_modules(offset_param)', [ 'count' => '', 'offset' => 'offset_param', ] ); } } unset($table); unset($table_data); } if ($get_type === true) { $id_module = (int) get_parameter('id_module'); $module = modules_get_agentmodule($id_module); $graph_type = return_graphtype($module['id_tipo_modulo']); echo $graph_type; return; } if ($get_graph_module === true) { global $config; $output = ''; $graph_data = get_parameter('graph_data', ''); $params = json_decode(base64_decode($graph_data), true); $server_id = (int) get_parameter('server_id', 0); include_once $config['homedir'].'/include/functions_graph.php'; // Metaconsole connection to the node. if (is_metaconsole() === true && empty($server_id) === false) { $server = metaconsole_get_connection_by_id($server_id); metaconsole_connect($server); } if ($params['histogram'] === true) { $params['id_agent_module'] = $params['agent_module_id']; $params['dinamic_proc'] = 1; $output .= '
'; if ($params['compare'] === 'separated') { $graph = \reporting_module_histogram_graph( ['datetime' => ($params['begin_date'] - $params['period'])], $params ); $output .= $graph['chart']; } $graph = \reporting_module_histogram_graph( ['datetime' => $params['begin_date']], $params ); $output .= $graph['chart']; $output .= '
'; } else { $output .= grafico_modulo_sparse($params); } if (is_metaconsole() === true && empty($server_id) === false) { metaconsole_restore_db(); } echo $output; return; } if ($get_graph_module_interfaces === true) { global $config; include_once $config['homedir'].'/include/functions_graph.php'; $output = ''; $graph_data = get_parameter('graph_data', ''); $params = json_decode(base64_decode($graph_data), true); $modules = get_parameter('modules', ''); $modules = json_decode(base64_decode($modules), true); $graph_data_combined = get_parameter('graph_data_combined', ''); $params_combined = json_decode( base64_decode($graph_data_combined), true ); $output .= graphic_combined_module( $modules, $params, $params_combined ); echo $output; return; } if ($get_data_dataMatrix === true) { global $config; $table_id = get_parameter('table_id', ''); $modules = json_decode( io_safe_output( get_parameter('modules', '') ), true ); $period = get_parameter('period', 0); $slice = get_parameter('slice', 0); // Datatables offset, limit. $start = get_parameter('start', 0); $formatData = (bool) get_parameter('formatData', 0); $length = get_parameter( 'length', $config['block_size'] ); $order = get_datatable_order(true); // Total time per page. $time_all_box = ($length * $slice); // Total number of boxes. $total_box = ceil($period / $slice); if ($start > 0) { $start = ($start / $length); } // Uncompress. try { ob_start(); $dateNow = get_system_time(); $final = ($dateNow - $period); $date = ($dateNow - ($time_all_box * $start)); if (($date - $time_all_box) > $final) { $datelimit = ($date - $time_all_box); } else { $datelimit = $final; } foreach ($modules as $key => $value) { if (is_metaconsole() === true) { try { $node = new Node((int) $value['id_node']); $node->connect(); } catch (\Exception $e) { // Unexistent agent. $node->disconnect(); } } $value['thresholds'] = [ 'min_critical' => (empty($value['c_min']) === true) ? null : $value['c_min'], 'max_critical' => (empty($value['c_max']) === true) ? null : $value['c_max'], 'min_warning' => (empty($value['w_min']) === true) ? null : $value['w_min'], 'max_warning' => (empty($value['w_max']) === true) ? null : $value['w_max'], ]; $module_data = db_uncompress_module_data( $value['id'], $datelimit, $date, $slice, true ); $uncompressData[] = array_reduce( $module_data, function ($carry, $item) use ($value, $config, $formatData) { // Last value. $vdata = null; if (is_array($item['data']) === true) { foreach ($item['data'] as $v) { $vdata = $v['datos']; } } $status = get_status_data_modules( $value['id'], $vdata, $value['thresholds'] ); $resultData = ''; if ($vdata !== null && $vdata !== '' && $vdata !== false) { if (isset($formatData) === true && (bool) $formatData === true ) { $resultData .= format_for_graph( $vdata, $config['graph_precision'] ); } else { $resultData .= sla_truncate( $vdata, $config['graph_precision'] ); } $resultData .= ' '.$value['unit']; } else { $resultData .= '--'; } $resultData .= ''; $carry[] = [ 'utimestamp' => $item['utimestamp'], 'Column-'.$value['id'] => $resultData, ]; return $carry; }, [] ); if (is_metaconsole() === true) { $node->disconnect(); } } if (empty($uncompressData) === false) { $data = array_reduce( $uncompressData, function ($carry, $item) { foreach ($item as $data_module) { foreach ($data_module as $key => $value) { if ($key === 'utimestamp') { $carry[$data_module['utimestamp']]['date'] = date('Y-m-d H:i', (int) $value); } else { $carry[$data_module['utimestamp']][$key] = $value; } } } return $carry; } ); } if (empty($data) === false) { $data = array_reverse(array_values($data)); } else { $data = []; } // RecordsTotal && recordsfiltered resultados totales. echo json_encode( [ 'data' => $data, 'recordsTotal' => $total_box, 'recordsFiltered' => $total_box, ] ); $response = ob_get_clean(); // Clean output buffer. while (ob_get_level() !== 0) { ob_end_clean(); } } catch (Exception $e) { echo json_encode( ['error' => $e->getMessage()] ); } // If not valid it will throw an exception. json_decode($response); if (json_last_error() === JSON_ERROR_NONE) { // If valid dump. echo $response; } else { echo json_encode( ['error' => $response] ); } return; } if ($get_data_ModulesByStatus === true) { global $config; $data = []; $table_id = get_parameter('table_id', ''); $search = get_parameter('search', ''); $status = get_parameter('status', ''); $start = get_parameter('start', 0); $length = get_parameter('length', $config['block_size']); // There is a limit of (2^32)^2 (18446744073709551615) rows in a MyISAM table, show for show all use max nrows. $length = ($length != '-1') ? $length : '18446744073709551615'; $order = get_datatable_order(true); $nodes = get_parameter('nodes', 0); $where = ''; $recordsTotal = 0; if (empty($search) === false) { $where = 'tagente_modulo.nombre LIKE "%%'.$search.'%%" AND '; } if (str_contains($status, '6') === true) { $expl = explode(',', $status); $exist = array_search('6', $expl); if (isset($exist) === true) { unset($expl[$exist]); } array_push($expl, '1', '2'); $status = implode(',', $expl); } $where .= sprintf( 'tagente_estado.estado IN (%s) AND tagente_modulo.delete_pending = 0', $status ); if (is_metaconsole() === false) { $order_by = ''; switch ($order['field']) { case 'nombre': $order_by = 'tagente_modulo.'.$order['field'].' '.$order['direction']; break; case 'alias': $order_by = 'tagente.'.$order['field'].' '.$order['direction']; break; case 'last_status_change': $order_by = 'tagente_estado.'.$order['field'].' '.$order['direction']; break; case 'estado': $order_by = 'tagente_estado.'.$order['field'].' '.$order['direction']; break; default: $order_by = 'tagente_estado.last_status_change desc'; break; } $sql = sprintf( 'SELECT tagente_modulo.nombre, tagente.alias, tagente.id_agente, tagente_estado.last_status_change, tagente_estado.estado FROM tagente_modulo INNER JOIN tagente ON tagente_modulo.id_agente = tagente.id_agente INNER JOIN tagente_estado ON tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo WHERE %s ORDER BY %s LIMIT %d, %d', $where, $order_by, $start, $length ); $data = db_get_all_rows_sql($sql); $sql_count = sprintf( 'SELECT COUNT(*) AS "total" FROM tagente_modulo INNER JOIN tagente ON tagente_modulo.id_agente = tagente.id_agente INNER JOIN tagente_estado ON tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo WHERE %s', $where ); $recordsTotal = db_get_value_sql($sql_count); // Metaconsole. } else { // $servers_ids = array_column(metaconsole_get_servers(), 'id'); $servers_ids = explode(',', $nodes); foreach ($servers_ids as $server_id) { try { $node = new Node((int) $server_id); $node->connect(); $sql = sprintf( 'SELECT tagente_modulo.nombre, tagente.alias, tagente.id_agente, tagente_estado.last_status_change, tagente_estado.estado FROM tagente_modulo INNER JOIN tagente ON tagente_modulo.id_agente = tagente.id_agente INNER JOIN tagente_estado ON tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo WHERE %s', $where ); $res_sql = db_get_all_rows_sql($sql); foreach ($res_sql as $row_sql) { $row_sql['server_name'] = $node->server_name(); $row_sql['server_url'] = $node->server_url(); array_push($data, $row_sql); } $node->disconnect(); } catch (\Exception $e) { // Unexistent modules. $node->disconnect(); } } if (in_array(0, $servers_ids) === true) { $sql = sprintf( 'SELECT tagente_modulo.nombre, tagente.alias, tagente.id_agente, tagente_estado.last_status_change, tagente_estado.estado FROM tagente_modulo INNER JOIN tagente ON tagente_modulo.id_agente = tagente.id_agente INNER JOIN tagente_estado ON tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo WHERE %s', $where ); $res_sql = db_get_all_rows_sql($sql); foreach ($res_sql as $row_sql) { $row_sql['server_name'] = __('Metaconsole'); $row_sql['server_url'] = $config['homeurl']; array_push($data, $row_sql); } } // Drop temporary table if exist. db_process_sql('DROP TEMPORARY TABLE IF EXISTS temp_modules_status;'); $table_temporary = 'CREATE TEMPORARY TABLE IF NOT EXISTS temp_modules_status ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, nombre VARCHAR(600), alias VARCHAR(600), id_agente INT, last_status_change INT, estado INT, server_name VARCHAR(100), server_url VARCHAR(200), PRIMARY KEY (`id`), KEY `nombre` (`nombre`(600)) )'; db_process_sql($table_temporary); $result = db_process_sql_insert_multiple('temp_modules_status', $data); if (empty($result) === false) { $data = []; $sql = ''; $where = ''; if (empty($search) === false) { $where = 'nombre LIKE "%%'.$search.'%%" AND '; } $where .= sprintf( 'estado IN (%s)', $status ); $order_by = $order['field'].' '.$order['direction']; $sql = sprintf( 'SELECT nombre, alias, id_agente, last_status_change, estado, server_name, server_url FROM temp_modules_status WHERE %s ORDER BY %s LIMIT %d, %d', $where, $order_by, $start, $length ); $data = db_get_all_rows_sql($sql); $sql_count = sprintf( 'SELECT COUNT(*) AS "total" FROM temp_modules_status WHERE %s', $where ); $recordsTotal = db_get_value_sql($sql_count); } } if ($data === false) { $data = []; } foreach ($data as $key => $row) { $data[$key]['nombre'] = html_ellipsis_characters($row['nombre'], 35, true); if (is_metaconsole() === false) { $name_link = ''; $name_link .= ''; $data[$key]['alias'] = $name_link; $data[$key]['last_status_change'] = ui_print_timestamp( $row['last_status_change'], true ); switch ((int) $row['estado']) { case 0: $status_img = ui_print_status_image(STATUS_MODULE_OK, __('Normal'), true); break; case 1: case 6: $status_img = ui_print_status_image(STATUS_MODULE_CRITICAL, __('Critical'), true); break; case 2: $status_img = ui_print_status_image(STATUS_MODULE_WARNING, __('Warning'), true); break; case 3: $status_img = ui_print_status_image(STATUS_MODULE_UNKNOWN, __('Unknown'), true); break; case 5: $status_img = ui_print_status_image(STATUS_MODULE_NO_DATA, __('Not init'), true); break; default: $status_img = ''; break; } $data[$key]['estado'] = $status_img; } echo json_encode( [ 'data' => $data, 'recordsTotal' => $recordsTotal, 'recordsFiltered' => $recordsTotal, ] ); } if ($get_children_modules === true) { $parent_modules = get_parameter('parent_modulues', false); $children_selected = []; if ($parent_modules === false) { $children_selected = false; } else { foreach ($parent_modules as $parent) { $child_modules = get_children_module($parent_modules, ['nombre', 'id_agente_modulo'], true); if ((bool) $child_modules === false) { continue; } foreach ($child_modules as $child) { $module_exist = in_array($child['id_agente_modulo'], $parent_modules); $child_exist = in_array($child, $children_selected); if ($module_exist === false && $child_exist === false) { array_push($children_selected, $child); } } } } if (empty($children_selected) === true) { $children_selected = false; } echo json_encode($children_selected); return; } // Saves an event filter. if ($save_monitor_filter) { $values = []; $values['id_name'] = get_parameter('id_name'); $values['id_group_filter'] = get_parameter('id_group_filter'); $values['ag_group'] = get_parameter('ag_group'); $values['modulegroup'] = get_parameter('modulegroup'); $values['recursion'] = get_parameter('recursion'); $values['status'] = get_parameter('status'); $values['ag_modulename'] = get_parameter('ag_modulename'); $values['ag_freestring'] = get_parameter('ag_freestring'); $values['tag_filter'] = json_encode(get_parameter('tag_filter')); $values['moduletype'] = get_parameter('moduletype'); $values['module_option'] = get_parameter('module_option'); $values['min_hours_status'] = get_parameter('min_hours_status'); $values['datatype'] = get_parameter('datatype'); $values['not_condition'] = get_parameter('not_condition'); $values['ag_custom_fields'] = get_parameter('ag_custom_fields'); $exists = (bool) db_get_value_filter( 'id_filter', 'tmonitor_filter', $values ); if ($exists === true) { echo 'duplicate'; } else { $result = db_process_sql_insert('tmonitor_filter', $values); if ($result === false) { echo 'error'; } else { echo $result; } } } if ($update_monitor_filter) { $values = []; $id = get_parameter('id'); $values['ag_group'] = get_parameter('ag_group'); $values['modulegroup'] = get_parameter('modulegroup'); $values['recursion'] = get_parameter('recursion'); $values['status'] = get_parameter('status'); $values['ag_modulename'] = get_parameter('ag_modulename'); $values['ag_freestring'] = get_parameter('ag_freestring'); $values['tag_filter'] = json_encode(get_parameter('tag_filter')); $values['moduletype'] = get_parameter('moduletype'); $values['module_option'] = get_parameter('module_option'); $values['min_hours_status'] = get_parameter('min_hours_status'); $values['datatype'] = get_parameter('datatype'); $values['not_condition'] = get_parameter('not_condition'); $values['ag_custom_fields'] = get_parameter('ag_custom_fields'); $result = db_process_sql_update( 'tmonitor_filter', $values, ['id_filter' => $id] ); if ($result === false) { echo 'error'; } else { ui_update_name_fav_element($id, 'Modules', $values['ag_modulename']); echo 'ok'; } } if ($delete_monitor_filter) { $id = get_parameter('id'); $user_groups = users_get_groups( $config['id_user'], 'AW', users_can_manage_group_all('AW'), true ); $sql = 'DELETE FROM tmonitor_filter WHERE id_filter = '.$id.' AND id_group_filter IN ('.implode(',', array_keys($user_groups)).')'; $monitor_filters = db_process_sql($sql); if ($monitor_filters === false) { echo 'error'; } else { db_process_sql_delete( 'tfavmenu_user', [ 'id_element' => $id, 'section' => 'Modules', 'id_user' => $config['id_user'], ] ); echo 'ok'; } } if ($get_monitor_filters) { $sql = 'SELECT id_filter, id_name FROM tmonitor_filter'; $monitor_filters = db_get_all_rows_sql($sql); $result = []; if ($monitor_filters !== false) { foreach ($monitor_filters as $monitor_filter) { $result[$monitor_filter['id_filter']] = $monitor_filter['id_name']; } } echo io_json_mb_encode($result); } if ((int) $load_filter_modal === 1) { $user_groups = users_get_groups( $config['id_user'], 'AR', users_can_manage_group_all('AR'), true ); $sql = 'SELECT id_filter, id_name FROM tmonitor_filter WHERE id_group_filter IN ('.implode(',', array_keys($user_groups)).')'; $event_filters = db_get_all_rows_sql($sql); $filters = []; foreach ($event_filters as $event_filter) { $filters[$event_filter['id_filter']] = $event_filter['id_name']; } echo '
'; echo '
'; $table = new StdClass; $table->id = 'load_filter_form'; $table->width = '100%'; $table->class = 'filter-table-adv'; $data = []; $table->rowid[3] = 'update_filter_row1'; $data[0] = html_print_label_input_block( __('Load filter'), html_print_select( $filters, 'filter_id', $current, '', __('None'), 0, true, false, true, '', false ) ); $table->data[] = $data; $table->rowclass[] = ''; html_print_table($table); html_print_div( [ 'class' => 'action-buttons', 'content' => html_print_submit_button( __('Load filter'), 'srcbutton', false, [ 'icon' => 'search', 'mode' => 'mini', ], true ), ], false ); echo html_print_input_hidden('load_filter', 1, true); echo '
'; echo '
'; ?> '; if (check_acl($config['id_user'], 0, 'AW')) { echo '
'; $table = new StdClass; $table->id = 'save_filter_form'; $table->size = []; $table->size[0] = '50%'; $table->size[1] = '50%'; $table->class = 'filter-table-adv'; $data = []; $table->rowid[0] = 'update_save_selector'; $data[0][0] = html_print_label_input_block( __('New filter'), html_print_radio_button( 'filter_mode', 'new', '', true, true ) ); $data[0][1] = html_print_label_input_block( __('Update/delete filter'), html_print_radio_button( 'filter_mode', 'update', '', false, true ) ); $table->rowid[1] = 'save_filter_row1'; $data[1][0] = html_print_label_input_block( __('Filter name'), html_print_input_text('id_name', '', '', 15, 255, true) ); $labelInput = __('Filter group'); if (is_metaconsole() === true) { $labelInput = __('Save in Group'); } $user_groups_array = users_get_groups_for_select( $config['id_user'], 'AW', users_can_manage_group_all('AW'), true ); $data[1][1] = html_print_label_input_block( $labelInput, html_print_select( $user_groups_array, 'id_group_filter_dialog', $id_group_filter, '', '', 0, true, false, false ), ['div_class' => 'filter-group-dialog'] ); $table->rowid[2] = 'save_filter_row2'; $sql = 'SELECT id_filter, id_name FROM tmonitor_filter'; $monitor_filters = db_get_all_rows_sql($sql); $_filters_update = []; if ($monitor_filters !== false) { foreach ($monitor_filters as $monitor_filter) { $_filters_update[$monitor_filter['id_filter']] = $monitor_filter['id_name']; } } $data[2][0] = html_print_label_input_block( __('Overwrite filter'), html_print_select( $_filters_update, 'overwrite_filter', '', '', '', 0, true ) ); $table->data = $data; html_print_table($table); html_print_div( [ 'id' => 'submit-save_filter', 'class' => 'action-buttons', 'content' => html_print_submit_button( __('Save current filter'), 'srcbutton', false, [ 'icon' => 'search', 'mode' => 'mini', 'onclick' => 'save_new_filter();', ], true ), ], false ); $input_actions = html_print_submit_button( __('Delete filter'), 'delete_filter', false, [ 'icon' => 'delete', 'mode' => 'mini', 'onclick' => 'save_delete_filter();', ], true ); $input_actions .= html_print_submit_button( __('Update filter'), 'srcbutton', false, [ 'icon' => 'update', 'mode' => 'mini', 'onclick' => 'save_update_filter();', ], true ); html_print_div( [ 'id' => 'update_filter_row', 'class' => 'action-buttons', 'content' => $input_actions, ], false ); } else { include 'general/noaccess.php'; } echo ''; ?>