<?php /** * Tree view. * * @category Operation * @package Pandora FMS * @subpackage Community * @version 1.0.0 * @license See below * * ______ ___ _______ _______ ________ * | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __| * | __/| _ | | _ || _ | _| _ | | ___| |__ | * |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______| * * ============================================================================ * Copyright (c) 2005-2023 Pandora FMS * Please see https://pandorafms.com/community/ for full contribution list * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation for version 2. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * ============================================================================ */ // Begin. ui_require_css_file('tree'); ui_require_css_file('fixed-bottom-box'); global $config; $pure = get_parameter('pure', 0); $tab = get_parameter('tab', 'group'); $search_group = get_parameter('searchGroup', ''); $search_agent = get_parameter('searchAgent', ''); $status_agent = get_parameter('statusAgent', AGENT_STATUS_ALL); $search_module = get_parameter('searchModule', ''); $status_module = get_parameter('statusModule', -1); $show_not_init_agents = get_parameter('show_not_init_agents', true); $show_not_init_modules = get_parameter('show_not_init_modules', true); $group_id = (int) get_parameter('group_id'); $tag_id = (int) get_parameter('tag_id'); $strict_acl = (bool) db_get_value('strict_acl', 'tusuario', 'id_user', $config['id_user']); $serach_hirearchy = (bool) get_parameter('searchHirearchy', false); $show_disabled = get_parameter('show_disabled', false); // ---------------------Tabs ------------------------------------------- $enterpriseEnable = false; if (enterprise_include_once('include/functions_policies.php') !== ENTERPRISE_NOT_HOOK) { $enterpriseEnable = true; } $url = 'index.php?sec=estado&sec2=operation/tree&refr=0&pure='.$pure.'&tab=%s'; $tabs = []; if ($strict_acl === false) { $tabs['tag'] = [ 'text' => "<a href='".sprintf($url, 'tag')."'>".html_print_image( 'images/tag@svg.svg', true, [ 'title' => __('Tags'), 'class' => 'invert_filter', ] ).'</a>', 'active' => ($tab == 'tag'), ]; $tabs['os'] = [ 'text' => "<a href='".sprintf($url, 'os')."'>".html_print_image( 'images/workstation@groups.svg', true, [ 'title' => __('OS'), 'class' => 'invert_filter', ] ).'</a>', 'active' => ($tab == 'os'), ]; $tabs['group'] = [ 'text' => "<a href='".sprintf($url, 'group')."'>".html_print_image( 'images/groups@svg.svg', true, [ 'title' => __('Groups'), 'class' => 'invert_filter', ] ).'</a>', 'active' => ($tab == 'group'), ]; $tabs['module_group'] = [ 'text' => "<a href='".sprintf($url, 'module_group')."'>".html_print_image( 'images/modules-group@svg.svg', true, [ 'title' => __('Module groups'), 'class' => 'invert_filter', ] ).'</a>', 'active' => ($tab == 'module_group'), ]; $tabs['module'] = [ 'text' => "<a href='".sprintf($url, 'module')."'>".html_print_image( 'images/modules@svg.svg', true, [ 'title' => __('Modules'), 'class' => 'invert_filter', ] ).'</a>', 'active' => ($tab == 'module'), ]; if ($enterpriseEnable) { $tabs['policies'] = [ 'text' => "<a href='".sprintf($url, 'policies')."'>".html_print_image( 'images/policy@svg.svg', true, [ 'title' => __('Policies'), 'class' => 'invert_filter', ] ).'</a>', 'active' => ($tab == 'policies'), ]; } } $header_title = __('Tree view'); $header_sub_title = __('Sort the agents by %s'); switch ($tab) { case 'tag': $header_sub_title = sprintf($header_sub_title, __('tags')); break; case 'os': $header_sub_title = sprintf($header_sub_title, __('OS')); break; case 'group': $header_sub_title = sprintf($header_sub_title, __('groups')); break; case 'module_group': $header_sub_title = sprintf($header_sub_title, __('module groups')); break; case 'module': $header_sub_title = sprintf($header_sub_title, __('modules')); break; case 'policies': if ($enterpriseEnable) { $header_sub_title = sprintf($header_sub_title, __('policies')); } break; } if (!$strict_acl) { $header_title = $header_title.' » '.$header_sub_title; } if (is_metaconsole() === true) { $tabs = []; } ui_print_standard_header( $header_title, 'images/extensions.png', false, '', false, $tabs, [ [ 'link' => '', 'label' => __('Monitoring'), ], [ 'link' => '', 'label' => __('View'), ], ] ); // ---------------------Tabs ------------------------------------------- // --------------------- form filter ----------------------------------- $table = new StdClass(); $table->width = '100%'; $table->class = 'filter-table-adv'; $table->data = []; $table->rowspan = []; $table->size = []; // Agent filter. $agent_status_arr = []; $agent_status_arr[AGENT_STATUS_ALL] = __('All'); // Default. $agent_status_arr[AGENT_STATUS_NORMAL] = __('Normal'); $agent_status_arr[AGENT_STATUS_WARNING] = __('Warning'); $agent_status_arr[AGENT_STATUS_CRITICAL] = __('Critical'); $agent_status_arr[AGENT_STATUS_UNKNOWN] = __('Unknown'); $agent_status_arr[AGENT_STATUS_NOT_INIT] = __('Not init'); $agent_status_arr[AGENT_STATUS_ALERT_FIRED] = __('Fired alerts'); $table->data['group_row'][] = html_print_label_input_block( __('Search group'), html_print_input_text('search_group', $search_group, '', 25, 30, true) ); if (is_metaconsole() === true) { $table->data['group_row'][] = html_print_label_input_block( __('Show not init modules'), html_print_checkbox( 'show_not_init_modules', $show_not_init_modules, true, true ) ); } $table->data['agent_row'][] = html_print_label_input_block( __('Search agent'), html_print_input_text( 'search_agent', $search_agent, '', 25, 30, true ) ); $table->data['agent_row'][] = html_print_label_input_block( __('Show not init agents'), html_print_checkbox_switch( 'show_not_init_agents', $show_not_init_agents, true, true ) ); $table->data['agent_row'][] = html_print_label_input_block( __('Show full hirearchy'), html_print_checkbox_switch( 'serach_hirearchy', $serach_hirearchy, false, true ) ); $table->data['agent_row'][] = html_print_label_input_block( __('Agent status'), html_print_select( $agent_status_arr, 'status_agent', $status_agent, '', '', 0, true, false, false, '', false, 'width:100%' ).html_print_input_hidden( 'show_not_init_modules_hidden', $show_not_init_modules, true ) ); // Button. if (is_metaconsole() === true) { $table->data['captions_disabled_row'][] = html_print_label_input_block( __('Show only disabled'), html_print_checkbox('show_disabled', $show_disabled, false, true) ); } // if (is_metaconsole() === false) { // Module filter. $module_status_arr = []; $module_status_arr[-1] = __('All'); // Default. $module_status_arr[AGENT_MODULE_STATUS_NORMAL] = __('Normal'); $module_status_arr[AGENT_MODULE_STATUS_WARNING] = __('Warning'); $module_status_arr[AGENT_MODULE_STATUS_CRITICAL_BAD] = __('Critical'); $module_status_arr[AGENT_MODULE_STATUS_UNKNOWN] = __('Unknown'); $module_status_arr[AGENT_MODULE_STATUS_NOT_INIT] = __('Not init'); $module_status_arr['fired'] = __('Fired alerts'); $table->data['last_row'][] = html_print_label_input_block( __('Search module'), html_print_input_text('search_module', $search_module, '', 25, 30, true) ); $table->data['last_row'][] = html_print_label_input_block( __('Show not init modules'), html_print_checkbox_switch('show_not_init_modules', $show_not_init_modules, true, true) ); $table->data['last_row'][] = html_print_label_input_block( __('Module status'), html_print_select( $module_status_arr, 'status_module', $status_module, '', '', 0, true, false, false, '', false, 'width:100%' ) ); // } $form_html = '<form id="tree_search" method="post" action="index.php?sec=monitoring&sec2=operation/tree&refr=0&tab='.$tab.'&pure='.$config['pure'].'">'; $form_html .= html_print_table($table, true); $form_html .= html_print_div( [ 'class' => 'action-buttons', 'content' => html_print_submit_button( __('Filter'), 'uptbutton', false, [ 'icon' => 'search', 'mode' => 'mini', ], true ), ], true ); $form_html .= '</form>'; ui_toggle( $form_html, '<span class="subsection_header_title">'.__('Tree search').'</span>', 'tree_search', false, true, false, '', 'white-box-content', 'box-flat white_table_graph fixed_filter_bar' ); html_print_input_hidden('group-id', $group_id); html_print_input_hidden('tag-id', $tag_id); // --------------------- form filter ----------------------------------- ui_include_time_picker(); ui_require_jquery_file('ui.datepicker-'.get_user_language(), 'include/javascript/i18n/'); ui_require_javascript_file('TreeController', 'include/javascript/tree/'); ui_print_spinner(__('Loading')); html_print_div( [ 'id' => 'tree-controller-recipient', 'content' => '', ] ); $infoHeadTitle = ''; ?> <?php if (is_metaconsole() === false) { ?> <script type="text/javascript" src="include/javascript/fixed-bottom-box.js"></script> <?php } else { ?> <script type="text/javascript" src="../../include/javascript/fixed-bottom-box.js"></script> <?php } ?> <script type="text/javascript"> var treeController = TreeController.getController(); processTreeSearch(); $("form#tree_search").submit(function(e) { e.preventDefault(); processTreeSearch(); }); function processTreeSearch () { // Clear the tree if (typeof treeController.recipient != 'undefined' && treeController.recipient.length > 0) treeController.recipient.empty(); showSpinner(); //$(".loading_tree").show(); var parameters = {}; parameters['page'] = "include/ajax/tree.ajax"; parameters['getChildren'] = 1; parameters['type'] = "<?php echo $tab; ?>"; parameters['filter'] = {}; parameters['filter']['searchGroup'] = $("input#text-search_group").val(); parameters['filter']['searchAgent'] = $("input#text-search_agent").val(); parameters['filter']['statusAgent'] = $("select#status_agent").val(); parameters['filter']['searchModule'] = $("input#text-search_module").val(); parameters['filter']['statusModule'] = $("select#status_module").val(); parameters['filter']['groupID'] = $("input#hidden-group-id").val(); parameters['filter']['tagID'] = $("input#hidden-tag-id").val(); if($("#checkbox-serach_hirearchy").is(':checked')){ parameters['filter']['searchHirearchy'] = 1; } else{ parameters['filter']['searchHirearchy'] = 0; } if($("#checkbox-show_not_init_agents").is(':checked')){ parameters['filter']['show_not_init_agents'] = 1; } else{ parameters['filter']['show_not_init_agents'] = 0; } if($("#checkbox-show_not_init_modules").is(':checked')){ parameters['filter']['show_not_init_modules'] = 1; $('#hidden-show_not_init_modules_hidden').val(1); } else{ parameters['filter']['show_not_init_modules'] = 0; $('#hidden-show_not_init_modules_hidden').val(0); } if($("#checkbox-show_disabled").is(':checked')){ parameters['filter']['show_disabled'] = 1; } else{ parameters['filter']['show_disabled'] = 0; } $.ajax({ type: "POST", url: "<?php echo ui_get_full_url('ajax.php', false, false, false); ?>", data: parameters, success: function(data) { if (data.success) { hideSpinner(); //$(".loading_tree").hide(); var foundMessage = ''; if (data.tree.length === 0) { foundMessage = "<?php echo __('No data found'); ?>"; $("div#tree-controller-recipient").append(foundMessage); } else { switch (parameters['type']) { case 'policies': foundMessage = "<?php echo __('Policies found'); ?>"; break; case 'os': foundMessage = "<?php echo __('Operating systems found'); ?>"; break; case 'tag': foundMessage = "<?php echo __('Tags found'); ?>"; break; case 'module_group': foundMessage = "<?php echo __('Module Groups found'); ?>"; break; case 'module': foundMessage = "<?php echo __('Modules found'); ?>"; break; case 'group': default: foundMessage = "<?php echo __('Groups found'); ?>"; break; } } treeController.init({ recipient: $("div#tree-controller-recipient"), detailRecipient: $.fixedBottomBox({ width: 400, height: window.innerHeight * 0.9, headTitle: "<?php echo $infoHeadTitle; ?>" }), page: parameters['page'], emptyMessage: "<?php echo __('No data found'); ?>", foundMessage: foundMessage, tree: data.tree, baseURL: "<?php echo ui_get_full_url(false, false, false, false); ?>", ajaxURL: "<?php echo ui_get_full_url('ajax.php', false, false, false); ?>", filter: parameters['filter'], counterTitles: { total: { agents: "<?php echo __('Total agents'); ?>", modules: "<?php echo __('Total modules'); ?>", none: "<?php echo __('Total'); ?>" }, alerts: { agents: "<?php echo __('Fired alerts'); ?>", modules: "<?php echo __('Fired alerts'); ?>", none: "<?php echo __('Fired alerts'); ?>" }, critical: { agents: "<?php echo __('Critical agents'); ?>", modules: "<?php echo __('Critical modules'); ?>", none: "<?php echo __('Critical'); ?>" }, warning: { agents: "<?php echo __('Warning agents'); ?>", modules: "<?php echo __('Warning modules'); ?>", none: "<?php echo __('Warning'); ?>" }, unknown: { agents: "<?php echo __('Unknown agents'); ?>", modules: "<?php echo __('Unknown modules'); ?>", none: "<?php echo __('Unknown'); ?>" }, not_init: { agents: "<?php echo __('Not init agents'); ?>", modules: "<?php echo __('Not init modules'); ?>", none: "<?php echo __('Not init'); ?>" }, ok: { agents: "<?php echo __('Normal agents'); ?>", modules: "<?php echo __('Normal modules'); ?>", none: "<?php echo __('Normal'); ?>" }, not_normal: { agents: "<?php echo __('Not normal agents'); ?>", modules: "<?php echo __('Not normal modules'); ?>", none: "<?php echo __('Not normal'); ?>" }, } }); } }, dataType: "json" }); } // Show the modal window of an module var moduleDetailsWindow = $("<div></div>"); moduleDetailsWindow .hide() .prop("id", "module_details_window") .appendTo('body'); function show_module_detail_dialog(module_id, id_agent, server_name, offset, period, module_name) { var params = {}; var f = new Date(); period = $('#period').val(); params.selection_mode = $('input[name=selection_mode]:checked').val(); if (!params.selection_mode) { params.selection_mode='fromnow'; } params.date_from = $('#text-date_from').val(); if (!params.date_from) { params.date_from = f.getFullYear() + "/" + (f.getMonth() +1) + "/" + f.getDate(); } params.time_from = $('#text-time_from').val(); if (!params.time_from) { params.time_from = f.getHours() + ":" + f.getMinutes(); } params.date_to = $('#text-date_to').val(); if (!params.date_to) { params.date_to =f.getFullYear() + "/" + (f.getMonth() +1) + "/" + f.getDate(); } params.time_to = $('#text-time_to').val(); if (!params.time_to) { params.time_to = f.getHours() + ":" + f.getMinutes(); } params.page = "include/ajax/module"; params.get_module_detail = 1; params.server_name = server_name; params.id_agent = id_agent; params.id_module = module_id; params.offset = offset; params.period = period; title = <?php echo "'".__('Module: ')."'"; ?> ; $.ajax({ type: "POST", url: "<?php echo ui_get_full_url('ajax.php', false, false, false); ?>", data: params, dataType: "html", success: function(data) { $("#module_details_window").hide () .empty () .append (data) .dialog ({ resizable: true, draggable: true, modal: true, title: title + module_name, overlay: { opacity: 0.5, background: "black" }, width: "auto", height: 500 }).css({"min-width": "650px"}) .show (); refresh_pagination_callback(module_id, id_agent, server_name, module_name); datetime_picker_callback(); forced_title_callback(); } }); } function datetime_picker_callback() { $("#text-time_from, #text-time_to").timepicker({ showSecond: true, timeFormat: '<?php echo TIME_FORMAT_JS; ?>', timeOnlyTitle: '<?php echo __('Choose time'); ?>', timeText: '<?php echo __('Time'); ?>', hourText: '<?php echo __('Hour'); ?>', minuteText: '<?php echo __('Minute'); ?>', secondText: '<?php echo __('Second'); ?>', currentText: '<?php echo __('Now'); ?>', closeText: '<?php echo __('Close'); ?>'}); $.datepicker.setDefaults($.datepicker.regional[ "<?php echo get_user_language(); ?>"]); $("#text-date_from, #text-date_to").datepicker({dateFormat: "<?php echo DATE_FORMAT_JS; ?>"}); } function refresh_pagination_callback (module_id, id_agent, server_name,module_name) { $(".binary_dialog").click( function() { var classes = $(this).attr('class'); classes = classes.split(' '); var offset_class = classes[2]; offset_class = offset_class.split('_'); var offset = offset_class[1]; var period = $('#period').val(); show_module_detail_dialog(module_id, id_agent, server_name, offset, period,module_name); return false; }); } </script>