$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->data[0][1] = html_print_select( $periods, 'period', $period, '', '', 0, true, false, false ); $formtable->data[0][2] = ''; $formtable->data[0][3] = "".html_print_image('images/refresh.png', true, ['style' => 'vertical-align: middle;', 'border' => '0', 'class' => '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, 7, 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, 7, 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, false, $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'); } else { $additionalLinkAction = ''; $linkCaption = __('Refresh'); } $moduleActionButtons[] = html_print_button( $linkCaption, 'additional_action_for_'.$idAgenteModulo, false, 'window.location.action(\'index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$id_agente.'&id_agente_modulo='.$module['id_agente_modulo'].'&refr=60'.$addedLinkParams.'\')', [ 'mode' => 'link', 'style' => 'justify-content: flex-end;', ], true ); } } if ((bool) check_acl($config['id_user'], $id_grupo, 'AW') === true && $cluster_view === false ) { $moduleActionButtons[] = html_print_button( __('Edit'), 'edit_module_'.$idAgenteModulo, false, 'window.location.action(\'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'].'\')', [ 'mode' => 'link', 'style' => 'justify-content: flex-end;', ], 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-bottom', '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; } }