2951 lines
108 KiB
PHP
Executable File
2951 lines
108 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Module management.
|
|
*
|
|
* @category Ajax library.
|
|
* @package Pandora FMS
|
|
* @subpackage Modules.
|
|
* @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.
|
|
* ============================================================================
|
|
*/
|
|
|
|
use PandoraFMS\Enterprise\Metaconsole\Node;
|
|
use PandoraFMS\Agent;
|
|
|
|
// Begin.
|
|
if (check_login()) {
|
|
global $config;
|
|
|
|
include_once $config['homedir'].'/include/functions_agents.php';
|
|
include_once $config['homedir'].'/include/functions_modules.php';
|
|
include_once $config['homedir'].'/include/functions_ui.php';
|
|
include_once $config['homedir'].'/include/functions_macros.php';
|
|
enterprise_include_once('include/functions_metaconsole.php');
|
|
|
|
$get_plugin_macros = get_parameter('get_plugin_macros');
|
|
$get_module_macros = get_parameter('get_module_macros');
|
|
$is_policy = (bool) get_parameter('is_policy', 0);
|
|
$search_modules = get_parameter('search_modules');
|
|
$get_module_detail = get_parameter('get_module_detail', 0);
|
|
$get_module_autocomplete_input = (bool) get_parameter(
|
|
'get_module_autocomplete_input'
|
|
);
|
|
$add_module_relation = (bool) get_parameter('add_module_relation');
|
|
$remove_module_relation = (bool) get_parameter('remove_module_relation');
|
|
$change_module_relation_updates = (bool) get_parameter(
|
|
'change_module_relation_updates'
|
|
);
|
|
$get_id_tag = (bool) get_parameter('get_id_tag', 0);
|
|
$get_type = (bool) get_parameter('get_type', 0);
|
|
$list_modules = (bool) get_parameter('list_modules', 0);
|
|
$get_agent_modules_json_by_name = (bool) get_parameter(
|
|
'get_agent_modules_json_by_name',
|
|
0
|
|
);
|
|
$get_graph_module = (bool) get_parameter('get_graph_module', 0);
|
|
$get_graph_module_interfaces = (bool) get_parameter(
|
|
'get_graph_module_interfaces',
|
|
0
|
|
);
|
|
|
|
$get_children_modules = (bool) get_parameter('get_children_modules', false);
|
|
|
|
$get_data_dataMatrix = (bool) get_parameter(
|
|
'get_data_dataMatrix',
|
|
0
|
|
);
|
|
|
|
$get_data_ModulesByStatus = (bool) get_parameter(
|
|
'get_data_ModulesByStatus',
|
|
0
|
|
);
|
|
|
|
$load_filter_modal = get_parameter('load_filter_modal', 0);
|
|
$save_filter_modal = get_parameter('save_filter_modal', 0);
|
|
$get_monitor_filters = get_parameter('get_monitor_filters', 0);
|
|
$save_monitor_filter = get_parameter('save_monitor_filter', 0);
|
|
$update_monitor_filter = get_parameter('update_monitor_filter', 0);
|
|
$delete_monitor_filter = get_parameter('delete_monitor_filter', 0);
|
|
$get_cluster_module_detail = (bool) get_parameter('get_cluster_module_detail', 0);
|
|
$get_combo_modules = (bool) get_parameter('get_combo_modules', false);
|
|
|
|
if ($get_agent_modules_json_by_name === true) {
|
|
$agent_name = get_parameter('agent_name');
|
|
|
|
$agent_id = agents_get_agent_id($agent_name);
|
|
|
|
$agent_modules = db_get_all_rows_sql(
|
|
'SELECT id_agente_modulo as id_module,
|
|
nombre as name FROM tagente_modulo
|
|
WHERE id_agente = '.$agent_id
|
|
);
|
|
|
|
echo json_encode($agent_modules);
|
|
|
|
return;
|
|
}
|
|
|
|
$id_plugin = get_parameter('id_plugin', 0);
|
|
|
|
if ($id_plugin !== 0) {
|
|
if ($is_policy === true) {
|
|
$id_module_plugin = db_get_value(
|
|
'id_plugin',
|
|
'tpolicy_modules',
|
|
'id',
|
|
$get_module_macros
|
|
);
|
|
} else {
|
|
$id_module_plugin = db_get_value(
|
|
'id_plugin',
|
|
'tagente_modulo',
|
|
'id_agente_modulo',
|
|
$get_module_macros
|
|
);
|
|
}
|
|
|
|
if ($id_plugin !== $id_module_plugin) {
|
|
$get_plugin_macros = true;
|
|
$get_module_macros = 0;
|
|
}
|
|
}
|
|
|
|
if ($get_plugin_macros) {
|
|
if (https_is_running()) {
|
|
header('Content-type: application/json');
|
|
}
|
|
|
|
$id_plugin = get_parameter('id_plugin', 0);
|
|
|
|
$plugin_macros = db_get_value(
|
|
'macros',
|
|
'tplugin',
|
|
'id',
|
|
$id_plugin
|
|
);
|
|
|
|
$macros = [];
|
|
$macros['base64'] = base64_encode($plugin_macros);
|
|
$macros['array'] = json_decode($plugin_macros, true);
|
|
|
|
echo json_encode($macros);
|
|
return;
|
|
}
|
|
|
|
if ($get_module_macros && $get_module_macros > 0) {
|
|
if (https_is_running()) {
|
|
header('Content-type: application/json');
|
|
}
|
|
|
|
$module_id = $get_module_macros;
|
|
|
|
if ($is_policy === true) {
|
|
$module_macros = db_get_value(
|
|
'macros',
|
|
'tpolicy_modules',
|
|
'id',
|
|
$module_id
|
|
);
|
|
} else {
|
|
$module_macros = db_get_value(
|
|
'macros',
|
|
'tagente_modulo',
|
|
'id_agente_modulo',
|
|
$module_id
|
|
);
|
|
}
|
|
|
|
$macros = [];
|
|
$macros['base64'] = base64_encode($module_macros);
|
|
$macros['array'] = json_decode($module_macros, true);
|
|
|
|
echo json_encode($macros);
|
|
return;
|
|
}
|
|
|
|
if ($search_modules) {
|
|
if (https_is_running()) {
|
|
header('Content-type: application/json');
|
|
}
|
|
|
|
$id_agents = json_decode(io_safe_output(get_parameter('id_agents')));
|
|
$filter = '%'.get_parameter('q', '').'%';
|
|
$other_filter = json_decode(
|
|
io_safe_output(get_parameter('other_filter')),
|
|
true
|
|
);
|
|
// TODO TAGS agents_get_modules.
|
|
$modules = agents_get_modules(
|
|
$id_agents,
|
|
false,
|
|
(['tagente_modulo.nombre' => $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] = '<div style="display:flex;align-items:center;font-weight:bold;">'.html_print_radio_button_extended(
|
|
'selection_mode',
|
|
'fromnow',
|
|
'',
|
|
$selection_mode,
|
|
false,
|
|
'',
|
|
'class="mrgn_right_15px"',
|
|
true
|
|
).__('Choose a time from now').'</div>';
|
|
$formtable->colspan[0][0] = 2;
|
|
$formtable->data[0][2] = html_print_select(
|
|
$periods,
|
|
'period',
|
|
$period,
|
|
'',
|
|
'',
|
|
0,
|
|
true,
|
|
false,
|
|
false
|
|
);
|
|
$formtable->data[0][3] = "<a href='javascript: show_module_detail_dialog(".$module_id.', '.$agentId.', "'.$server_name.'", 0, -1,"'.modules_get_agentmodule_name($module_id)."\")'>".html_print_image('images/refresh@svg.svg', true, ['style' => 'vertical-align: middle;', 'border' => '0', 'class' => 'main_menu_icon invert_filter' ]).'</a>';
|
|
$formtable->rowspan[0][3] = 2;
|
|
$formtable->cellstyle[0][3] = 'vertical-align: middle;';
|
|
|
|
$formtable->data[1][0] = '<div style="display:flex;align-items:center;font-weight:bold;">'.html_print_radio_button_extended(
|
|
'selection_mode',
|
|
'range',
|
|
'',
|
|
$selection_mode,
|
|
false,
|
|
'',
|
|
'class="mrgn_right_15px"',
|
|
true
|
|
).__('Specify time range');
|
|
$formtable->data[1][1] = '<span style="font-weight:bold">'.__('Timestamp from:').'</span></div>';
|
|
|
|
$formtable->data[1][2] = '<div class="inputs_date_details">'.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] .= '<br />';
|
|
$formtable->data[1][1] .= '<span style="font-weight:bold">'.__('Timestamp to:').'</span>';
|
|
|
|
$formtable->data[1][2] .= '<br />';
|
|
$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
|
|
).'</div>';
|
|
|
|
$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]
|
|
);
|
|
|
|
$made_enabled = db_get_value_filter(
|
|
'made_enabled',
|
|
'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 = '<img class="w100p" src="';
|
|
$imagetab .= io_safe_input($row[$attr[0]]);
|
|
$imagetab .= '">';
|
|
$image = '<img class="w300px" src="';
|
|
$image .= io_safe_input($row[$attr[0]]);
|
|
$image .= '">';
|
|
$data[] = '<a style="cursor:pointer;" onclick="newTabjs(\''.base64_encode($imagetab).'\')">'.$image.'</a>';
|
|
} else {
|
|
$data[] = '<span>'.wordwrap(io_safe_input($row[$attr[0]]), 60, "<br>\n", true).'</span>';
|
|
}
|
|
} 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_empty_data(__('No available data to show'), '', false);
|
|
} 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';
|
|
|
|
$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;
|
|
$id_grupo = agents_get_agent_group($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');
|
|
|
|
// Disable module edition in cluster module list.
|
|
$cluster_view = false;
|
|
$url = 'index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$id_agent;
|
|
if ((int) agents_get_os($id_agent) === CLUSTER_OS_ID) {
|
|
$cluster = PandoraFMS\Cluster::loadFromAgentId($id_agent);
|
|
$url = sprintf(
|
|
'index.php?sec=estado&sec2=operation/cluster/cluster&op=view&id=%s',
|
|
$cluster->id()
|
|
);
|
|
$cluster_view = true;
|
|
}
|
|
|
|
$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) ? '<span title="'.__('Policy').'">'.__('P').'</span>' : '';
|
|
$table->head[1] = '<span title="'.__('Module type').'">'.__('T').'</span>'.ui_get_sorting_arrows($url_up_type, $url_down_type, $selectTypeUp, $selectTypeDown);
|
|
$table->head[2] = '<span>'.__('Module name').'</span>'.ui_get_sorting_arrows($url_up_name, $url_down_name, $selectNameUp, $selectNameDown);
|
|
$table->head[3] = '<span>'.__('Description').'</span>';
|
|
$table->head[4] = '<span>'.__('Status').'</span>'.ui_get_sorting_arrows($url_up_status, $url_down_status, $selectStatusUp, $selectStatusDown);
|
|
$table->head[5] = '<span>'.__('Thresholds').'</span>';
|
|
$table->head[6] = '<span>'.__('Data').'</span>';
|
|
$table->head[7] = '<span>'.__('Last contact').'</span>'.ui_get_sorting_arrows($url_up_last, $url_down_last, $selectLastContactUp, $selectLastContactDown);
|
|
$table->head[8] = '<span>'.__('Graphs').'</span>';
|
|
$table->head[9] = '<span>'.__('Actions').'</span>';
|
|
|
|
$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, ['<b>'.$module['name'].'</b>']);
|
|
|
|
$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 ((bool) $linked === true) {
|
|
if ((bool) $adopt === true) {
|
|
$img = 'images/policies_brick.png';
|
|
$title = '('.__('Adopted').') '.$name_policy;
|
|
} else {
|
|
$img = 'images/policy@svg.svg';
|
|
$title = $name_policy;
|
|
}
|
|
} else {
|
|
if ((bool) $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] .= '<a 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'].'">';
|
|
$data[2] .= ui_print_truncate_text($module['nombre'], 'module_medium', false, true, true, '…', 'font-size: 9pt;');
|
|
$data[2] .= '</a>';
|
|
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] .= ' <a class="tag_details" href="ajax.php?page=operation/agentes/estado_monitores&get_tag_tooltip=1&id_agente_modulo='.$module['id_agente_modulo'].'">'.html_print_image('images/tag_red.png', true, ['id' => 'tag-details-'.$module['id_agente_modulo'], 'class' => 'img_help invert_filter']).'</a> ';
|
|
}
|
|
|
|
// Adds relations context information.
|
|
if (modules_relation_exists($module['id_agente_modulo']) === true) {
|
|
$data[2] .= ' <a class="relations_details" href="ajax.php?page=operation/agentes/estado_monitores&get_relations_tooltip=1&id_agente_modulo='.$module['id_agente_modulo'].'">'.html_print_image('images/link2.png', true, ['id' => 'relations-details-'.$module['id_agente_modulo'], 'class' => 'img_help']).'</a> ';
|
|
}
|
|
|
|
// 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
|
|
);
|
|
|
|
if (strlen($module['ip_target']) !== 0) {
|
|
// Check if value is custom field.
|
|
if ($module['ip_target'][0] == '_' && $module['ip_target'][(strlen($module['ip_target']) - 1)] == '_') {
|
|
$custom_field_name = substr($module['ip_target'], 1, -1);
|
|
$custom_value = agents_get_agent_custom_field($id_agente, $custom_field_name);
|
|
if (isset($custom_value) && $custom_value !== false) {
|
|
$title .= '<br/>IP: '.$custom_value;
|
|
} else {
|
|
$array_macros = return_agent_macros($id_agente);
|
|
if (isset($array_macros[$module['ip_target']])) {
|
|
$title .= '<br/>IP: '.$array_macros[$module['ip_target']];
|
|
} else {
|
|
$title .= '<br/>IP: '.$module['ip_target'];
|
|
}
|
|
}
|
|
} else {
|
|
$title .= '<br/>IP: '.$module['ip_target'];
|
|
}
|
|
}
|
|
|
|
$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');
|
|
|
|
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');
|
|
}
|
|
}
|
|
|
|
$data[4] .= ui_print_status_image($status, htmlspecialchars($title), true, false, false, true, $last_status_change_text);
|
|
|
|
// 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] .= '<span class="inherited_text_data_for_humans">'.modules_get_agentmodule_data_for_humans($module).'</span>';
|
|
|
|
// 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'];
|
|
$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,
|
|
[
|
|
'title' => __('Event history'),
|
|
'class' => 'main_menu_icon forced_title',
|
|
]
|
|
),
|
|
],
|
|
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.'&period_graph=0&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,
|
|
[
|
|
'title' => __('Module graph'),
|
|
'class' => 'main_menu_icon forced_title',
|
|
]
|
|
),
|
|
],
|
|
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,
|
|
[
|
|
'title' => __('Module detail'),
|
|
'class' => 'main_menu_icon forced_title',
|
|
]
|
|
),
|
|
],
|
|
true
|
|
);
|
|
|
|
if ($cluster_view === true) {
|
|
$graphButtons[] = html_print_anchor(
|
|
[
|
|
'href' => 'javascript: show_cluster_module_detail('.$cluster->id().', \''.$modules_get_agentmodule_name.'\')',
|
|
'content' => html_print_image(
|
|
'images/plus@svg.svg',
|
|
true,
|
|
[
|
|
'title' => __('Module cluster detail'),
|
|
'class' => 'main_menu_icon forced_title',
|
|
]
|
|
),
|
|
],
|
|
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';
|
|
$visibility = '';
|
|
} else {
|
|
$additionalLinkAction = '';
|
|
$linkCaption = __('Refresh');
|
|
$imgaction = 'images/go-back@svg.svg';
|
|
$visibility = 'visibility: initial;';
|
|
}
|
|
|
|
$moduleActionButtons[] = html_print_anchor(
|
|
[
|
|
'href' => $url.'&id_agente_modulo='.$module['id_agente_modulo'].'&refr=60'.$additionalLinkAction.'"',
|
|
'content' => html_print_image(
|
|
$imgaction,
|
|
true,
|
|
[
|
|
'title' => __('Force remote check'),
|
|
'class' => 'main_menu_icon forced_title',
|
|
'style' => $visibility,
|
|
]
|
|
),
|
|
],
|
|
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,
|
|
[
|
|
'title' => __('Edit configuration'),
|
|
'class' => 'main_menu_icon forced_title',
|
|
]
|
|
),
|
|
],
|
|
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');
|
|
?>
|
|
<script type="text/javascript">
|
|
/* <![CDATA[ */
|
|
$("a.tag_details").cluetip ({
|
|
arrows: true,
|
|
attribute: 'href',
|
|
cluetipClass: 'default'
|
|
})
|
|
.click (function () {
|
|
return false;
|
|
});
|
|
$("a.relations_details").cluetip ({
|
|
width: 500,
|
|
arrows: true,
|
|
attribute: 'href',
|
|
cluetipClass: 'default'
|
|
})
|
|
.click (function () {
|
|
return false;
|
|
});
|
|
|
|
/* ]]> */
|
|
</script>
|
|
<?php
|
|
if (empty($table->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);
|
|
$form_data = json_decode(base64_decode(get_parameter('form_data', [])), true);
|
|
$server_id = (int) get_parameter('server_id', 0);
|
|
include_once $config['homedir'].'/include/functions_graph.php';
|
|
|
|
$tab_active = get_parameter('active', 'tabs-chart-module-graph');
|
|
|
|
$output .= draw_form_stat_win($form_data, $tab_active);
|
|
|
|
// 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['enable_projected_period'] === '1') {
|
|
$params_graphic = [
|
|
'period' => $params['period'],
|
|
'date' => strtotime(date('Y-m-d H:i:s')),
|
|
'only_image' => false,
|
|
'homeurl' => ui_get_full_url(false, false, false, false).'/',
|
|
'ttl' => false,
|
|
'height' => $config['graph_image_height'],
|
|
'landscape' => $content['landscape'],
|
|
'return_img_base_64' => true,
|
|
];
|
|
|
|
$params_combined = [
|
|
'projection' => $params['period_projected'],
|
|
];
|
|
|
|
$return['chart'] = graphic_combined_module(
|
|
[$params['agent_module_id']],
|
|
$params_graphic,
|
|
$params_combined
|
|
);
|
|
$output .= '<div class="stat_win_histogram">';
|
|
$output .= $return['chart'];
|
|
$output .= '</div>';
|
|
} else {
|
|
if ($params['histogram'] === true) {
|
|
$params['id_agent_module'] = $params['agent_module_id'];
|
|
$params['dinamic_proc'] = 1;
|
|
|
|
$output .= '<div class="stat_win_histogram">';
|
|
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 .= '</div>';
|
|
} else {
|
|
if ($tab_active === 'tabs-chart-module-graph') {
|
|
$output .= grafico_modulo_sparse($params);
|
|
} else {
|
|
$output .= '<div class="container-periodicity-graph">';
|
|
$output .= '<div>';
|
|
$output .= graphic_periodicity_module($params);
|
|
$output .= '</div>';
|
|
$output .= '</div>';
|
|
if ($params['compare'] === 'separated') {
|
|
$params['date'] = ($params['date'] - $params['period']);
|
|
$output .= '<div class="container-periodicity-graph">';
|
|
$output .= '<div>';
|
|
$output .= graphic_periodicity_module($params);
|
|
$output .= '</div>';
|
|
$output .= '</div>';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
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 {
|
|
$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 = '<span class="widget-module-tabs-data" style="color:'.$status['color'].'">';
|
|
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 .= '</span>';
|
|
$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,
|
|
]
|
|
);
|
|
} catch (Exception $e) {
|
|
echo json_encode(
|
|
['error' => $e->getMessage()]
|
|
);
|
|
}
|
|
}
|
|
|
|
if ($get_cluster_module_detail === true) {
|
|
global $config;
|
|
$data = [];
|
|
|
|
$cluster_id = get_parameter('cluster_id', 0);
|
|
$cluster = new PandoraFMS\Cluster($cluster_id);
|
|
$modules_ids = $cluster->getIdsModulesInvolved();
|
|
$module_name = get_parameter('module_name', '');
|
|
|
|
try {
|
|
$column_names = [
|
|
__('Module name'),
|
|
__('Agent'),
|
|
__('Last status change'),
|
|
__('Status'),
|
|
];
|
|
|
|
$columns = [
|
|
'nombre',
|
|
'alias',
|
|
'last_status_change',
|
|
'estado',
|
|
];
|
|
|
|
$tableId = 'ModuleByStatus';
|
|
// Load datatables user interface.
|
|
ui_print_datatable(
|
|
[
|
|
'id' => $tableId,
|
|
'class' => 'info_table align-left-important',
|
|
'style' => 'width: 100%',
|
|
'columns' => $columns,
|
|
'column_names' => $column_names,
|
|
'ajax_url' => 'include/ajax/module',
|
|
'ajax_data' => [
|
|
'get_data_ModulesByStatus' => 1,
|
|
'table_id' => $tableId,
|
|
'module_name' => $module_name,
|
|
'modules_ids' => $modules_ids,
|
|
'search' => '',
|
|
],
|
|
'default_pagination' => 5,
|
|
'order' => [
|
|
'field' => 'last_status_change',
|
|
'direction' => 'desc',
|
|
],
|
|
'csv' => 0,
|
|
'dom_elements' => 'frtip',
|
|
'no_move_elements_to_action' => true,
|
|
'mini_pagination' => true,
|
|
]
|
|
);
|
|
} catch (\Exception $e) {
|
|
echo $e->getMessage();
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if ($get_data_ModulesByStatus === true) {
|
|
global $config;
|
|
$data = [];
|
|
|
|
$table_id = get_parameter('table_id', '');
|
|
$search = get_parameter('search', '');
|
|
$search_agent = get_parameter('search_agent', '');
|
|
$groupId = (int) get_parameter('groupId', 0);
|
|
$module_name = get_parameter('module_name', '');
|
|
$status = get_parameter('status', '');
|
|
$start = get_parameter('start', 0);
|
|
$modules_ids = get_parameter('modules_ids', []);
|
|
$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);
|
|
$disabled_modules = (bool) get_parameter('disabled_modules', false);
|
|
|
|
$groups_array = [];
|
|
if ($groupId === 0) {
|
|
if (users_can_manage_group_all('AR') === false) {
|
|
$groups_array = users_get_groups(false, 'AR', false);
|
|
}
|
|
} else {
|
|
$groups_array = [$groupId];
|
|
}
|
|
|
|
$where = '1=1';
|
|
$recordsTotal = 0;
|
|
|
|
if (empty($groups_array) === false) {
|
|
$where .= sprintf(
|
|
' AND (tagente.id_grupo IN (%s)
|
|
OR tagent_secondary_group.id_group IN(%s))',
|
|
implode(',', $groups_array),
|
|
implode(',', $groups_array)
|
|
);
|
|
}
|
|
|
|
|
|
if (empty($search) === false) {
|
|
$where .= ' AND tagente_modulo.nombre LIKE "%%'.$search.'%%"';
|
|
}
|
|
|
|
if (empty($search_agent) === false) {
|
|
$where .= ' AND tagente.alias LIKE "%%'.$search_agent.'%%"';
|
|
}
|
|
|
|
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', '3', '4', '5');
|
|
|
|
$status = implode(',', $expl);
|
|
}
|
|
|
|
if (str_contains($status, '5') === true) {
|
|
$expl = explode(',', $status);
|
|
$exist = array_search('5', $expl);
|
|
if (isset($exist) === true) {
|
|
unset($expl[$exist]);
|
|
}
|
|
|
|
array_push($expl, '4', '5');
|
|
|
|
$status = implode(',', $expl);
|
|
}
|
|
|
|
if (empty($status) === false || $status === '0') {
|
|
$where .= sprintf(
|
|
' AND tagente_estado.estado IN (%s)
|
|
AND tagente_modulo.delete_pending = 0',
|
|
$status,
|
|
);
|
|
}
|
|
|
|
if ($disabled_modules === false) {
|
|
$where .= ' AND tagente_modulo.disabled = 0';
|
|
}
|
|
|
|
if (empty($modules_ids) === false && is_array($modules_ids) === true) {
|
|
$where .= sprintf(
|
|
' AND tagente_modulo.id_agente_modulo IN (%s)',
|
|
implode(',', $modules_ids)
|
|
);
|
|
}
|
|
|
|
if (empty($module_name) === false) {
|
|
$where .= sprintf(
|
|
' AND tagente_modulo.nombre = "%s"',
|
|
$module_name
|
|
);
|
|
}
|
|
|
|
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
|
|
LEFT JOIN tagent_secondary_group
|
|
ON tagente.id_agente = tagent_secondary_group.id_agent
|
|
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
|
|
LEFT JOIN tagent_secondary_group
|
|
ON tagente.id_agente = tagent_secondary_group.id_agent
|
|
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
|
|
LEFT JOIN tagent_secondary_group
|
|
ON tagente.id_agente = tagent_secondary_group.id_agent
|
|
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
|
|
LEFT JOIN tagent_secondary_group
|
|
ON tagente.id_agente = tagent_secondary_group.id_agent
|
|
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 = '<a href="index.php?sec=estado&sec2=';
|
|
} else {
|
|
$name_link = '<a href="'.$row['server_url'].'index.php?sec=estado&sec2=';
|
|
}
|
|
|
|
$name_link .= 'operation/agentes/ver_agente&id_agente='.$row['id_agente'];
|
|
$name_link .= '"><b>';
|
|
$name_link .= '<span class="ellipsis-35ch">'.html_ellipsis_characters($row['alias'], 35, true).'</span>';
|
|
$name_link .= '</b></a>';
|
|
|
|
$data[$key]['alias'] = $name_link;
|
|
|
|
$data[$key]['last_status_change'] = ui_print_timestamp(
|
|
$row['last_status_change'],
|
|
true
|
|
);
|
|
|
|
switch ((int) $row['estado']) {
|
|
case AGENT_MODULE_STATUS_NORMAL:
|
|
$status_img = ui_print_status_image(STATUS_MODULE_OK, __('Normal'), true);
|
|
break;
|
|
|
|
case AGENT_MODULE_STATUS_CRITICAL_BAD:
|
|
case AGENT_MODULE_STATUS_NOT_NORMAL:
|
|
$status_img = ui_print_status_image(STATUS_MODULE_CRITICAL, __('Critical'), true);
|
|
break;
|
|
|
|
case AGENT_MODULE_STATUS_WARNING:
|
|
$status_img = ui_print_status_image(STATUS_MODULE_WARNING, __('Warning'), true);
|
|
break;
|
|
|
|
case AGENT_MODULE_STATUS_UNKNOWN:
|
|
$status_img = ui_print_status_image(STATUS_MODULE_UNKNOWN, __('Unknown'), true);
|
|
break;
|
|
|
|
case AGENT_MODULE_STATUS_NO_DATA:
|
|
case AGENT_MODULE_STATUS_NOT_INIT:
|
|
$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 '<div id="load-filter-select" class="load-filter-modal" title="'.__('Load').'">';
|
|
echo '<form method="post" id="form_load_filter" action="index.php?sec=view&sec2=operation/agentes/status_monitor&pure=">';
|
|
|
|
$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 '</form>';
|
|
echo '</div>';
|
|
?>
|
|
|
|
<script type="text/javascript">
|
|
function show_filter() {
|
|
$("#load-filter-select").dialog({
|
|
resizable: true,
|
|
draggable: true,
|
|
modal: false,
|
|
closeOnEscape: true,
|
|
width: 450
|
|
});
|
|
}
|
|
|
|
$(document).ready(function() {
|
|
show_filter();
|
|
});
|
|
|
|
</script>
|
|
<?php
|
|
return;
|
|
}
|
|
|
|
if ($save_filter_modal) {
|
|
echo '<div id="save-filter-select" title="'.__('Save').'">';
|
|
if (check_acl($config['id_user'], 0, 'AW')) {
|
|
echo '<div id="#info_box"></div>';
|
|
$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 '</div>';
|
|
?>
|
|
<script type="text/javascript">
|
|
function show_save_filter() {
|
|
$('#save_filter_row2').hide();
|
|
$('#update_filter_row').hide();
|
|
$('#update_delete_row').hide();
|
|
$('.filter-group-dialog').show();
|
|
// Filter save mode selector
|
|
$("[name='filter_mode']").click(function() {
|
|
if ($(this).val() == 'new') {
|
|
$('#save_filter_row2').hide();
|
|
$('#submit-save_filter').show();
|
|
$('#update_filter_row').hide();
|
|
$('#update_delete_row').hide();
|
|
$('.filter-group-dialog').show();
|
|
}
|
|
else {
|
|
$('#save_filter_row2').show();
|
|
$('#update_filter_row').show();
|
|
$('#submit-save_filter').hide();
|
|
$('#update_delete_row').show();
|
|
$('.filter-group-dialog').hide();
|
|
}
|
|
});
|
|
$("#save-filter-select").dialog({
|
|
resizable: true,
|
|
draggable: true,
|
|
modal: false,
|
|
closeOnEscape: true,
|
|
width: 450,
|
|
height: 350
|
|
});
|
|
}
|
|
|
|
function save_new_filter() {
|
|
// If the filter name is blank show error
|
|
if ($('#text-id_name').val() == '') {
|
|
$('#show_filter_error').html("<h3 class='error'><?php echo __('Filter name cannot be left blank'); ?></h3>");
|
|
|
|
// Close dialog
|
|
$('.ui-dialog-titlebar-close').trigger('click');
|
|
return false;
|
|
}
|
|
|
|
var custom_fields_values = $('input[name^="ag_custom_fields"]').map(function() {
|
|
return this.value;
|
|
}).get();
|
|
|
|
var custom_fields_ids = $("input[name^='ag_custom_fields']").map(function() {
|
|
var name = $(this).attr("name");
|
|
var number = name.match(/\[(.*?)\]/)[1];
|
|
|
|
return number;
|
|
}).get();
|
|
|
|
var ag_custom_fields = custom_fields_ids.reduce(function(result, custom_fields_id, index) {
|
|
result[custom_fields_id] = custom_fields_values[index];
|
|
return result;
|
|
}, {});
|
|
|
|
var id_filter_save;
|
|
jQuery.post ("<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
|
|
{
|
|
"page" : "include/ajax/module",
|
|
"save_monitor_filter" : 1,
|
|
"id_name": $("#text-id_name").val(),
|
|
"id_group_filter": $("#id_group_filter_dialog").val(),
|
|
"ag_group" : $("#ag_group").val(),
|
|
"modulegroup" : $("#modulegroup").val(),
|
|
"recursion" : $("#checkbox-recursion").is(':checked'),
|
|
"status" : $("#status").val(),
|
|
"severity" : $("#severity").val(),
|
|
"ag_modulename" : $("#text-ag_modulename").val(),
|
|
"ag_freestring" : $("#text-ag_freestring").val(),
|
|
"tag_filter" : $("#tag_filter").val(),
|
|
"moduletype" : $("#moduletype").val(),
|
|
"module_option" : $('#module_option').val(),
|
|
"min_hours_status" : $('#text-min_hours_status').val(),
|
|
"datatype" : $("#datatype").val(),
|
|
"not_condition" : $("#not_condition_switch").is(':checked'),
|
|
"ag_custom_fields": JSON.stringify(ag_custom_fields),
|
|
},
|
|
function (data) {
|
|
$("#info_box").hide();
|
|
if (data == 'error') {
|
|
$("#info_box").filter(function(i, item) {
|
|
if ($(item).data('type_info_box') == "error_create_filter") {
|
|
return true;
|
|
}
|
|
else
|
|
return false;
|
|
}).show();
|
|
}
|
|
else if (data == 'duplicate') {
|
|
$("#info_box").filter(function(i, item) {
|
|
if ($(item).data('type_info_box') == "duplicate_create_filter") {
|
|
return true;
|
|
}
|
|
else
|
|
return false;
|
|
}).show();
|
|
}
|
|
else {
|
|
id_filter_save = data;
|
|
|
|
$("#info_box").filter(function(i, item) {
|
|
if ($(item).data('type_info_box') == "success_create_filter") {
|
|
return true;
|
|
}
|
|
else
|
|
return false;
|
|
}).show();
|
|
}
|
|
|
|
// Close dialog.
|
|
$("#save-filter-select").dialog('close');
|
|
}
|
|
);
|
|
}
|
|
|
|
function save_update_filter() {
|
|
var id_filter_update = $("#overwrite_filter").val();
|
|
var name_filter_update = $("#overwrite_filter option[value='"+id_filter_update+"']").text();
|
|
|
|
var custom_fields_values = $('input[name^="ag_custom_fields"]').map(function() {
|
|
return this.value;
|
|
}).get();
|
|
|
|
var custom_fields_ids = $("input[name^='ag_custom_fields']").map(function() {
|
|
var name = $(this).attr("name");
|
|
var number = name.match(/\[(.*?)\]/)[1];
|
|
|
|
return number;
|
|
}).get();
|
|
|
|
var ag_custom_fields = custom_fields_ids.reduce(function(result, custom_fields_id, index) {
|
|
result[custom_fields_id] = custom_fields_values[index];
|
|
return result;
|
|
}, {});
|
|
|
|
jQuery.post ("<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
|
|
{
|
|
"page" : "include/ajax/module",
|
|
"update_monitor_filter" : 1,
|
|
"id" : $("#overwrite_filter").val(),
|
|
"ag_group" : $("#ag_group").val(),
|
|
"modulegroup" : $("#modulegroup").val(),
|
|
"recursion" : $("#checkbox-recursion").is(':checked'),
|
|
"status" : $("#status").val(),
|
|
"severity" : $("#severity").val(),
|
|
"ag_modulename" : $("#text-ag_modulename").val(),
|
|
"ag_freestring" : $("#text-ag_freestring").val(),
|
|
"tag_filter" : $("#tag_filter").val(),
|
|
"moduletype" : $("#moduletype").val(),
|
|
"module_option" : $('#module_option').val(),
|
|
"min_hours_status" : $('#text-min_hours_status').val(),
|
|
"datatype" : $("#datatype").val(),
|
|
"not_condition" : $("#not_condition_switch").is(':checked'),
|
|
"ag_custom_fields": JSON.stringify(ag_custom_fields),
|
|
},
|
|
function (data) {
|
|
$(".info_box").hide();
|
|
if (data == 'ok') {
|
|
$(".info_box").filter(function(i, item) {
|
|
if ($(item).data('type_info_box') == "success_update_filter") {
|
|
return true;
|
|
}
|
|
else
|
|
return false;
|
|
}).show();
|
|
}
|
|
else {
|
|
$(".info_box").filter(function(i, item) {
|
|
if ($(item).data('type_info_box') == "error_create_filter") {
|
|
return true;
|
|
}
|
|
else
|
|
return false;
|
|
}).show();
|
|
}
|
|
});
|
|
|
|
// First remove all options of filters select
|
|
$('#filter_id').find('option').remove().end();
|
|
// Add 'none' option the first
|
|
$('#filter_id').append ($('<option></option>').html ( <?php echo "'".__('none')."'"; ?> ).attr ("value", 0));
|
|
// Reload filters select
|
|
jQuery.post ("<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
|
|
{
|
|
"page" : "include/ajax/module",
|
|
"get_monitor_filters" : 1
|
|
},
|
|
function (data) {
|
|
jQuery.each (data, function (i, val) {
|
|
s = js_html_entity_decode(val);
|
|
if (i == id_filter_update) {
|
|
$('#filter_id').append ($('<option selected="selected"></option>').html (s).attr ("value", i));
|
|
}
|
|
else {
|
|
$('#filter_id').append ($('<option></option>').html (s).attr ("value", i));
|
|
}
|
|
});
|
|
},
|
|
"json"
|
|
);
|
|
|
|
// Close dialog
|
|
$('.ui-dialog-titlebar-close').trigger('click');
|
|
|
|
// Update the info with the loaded filter
|
|
$("#hidden-id_name").val($('#text-id_name').val());
|
|
$('#filter_loaded_span').html($('#filter_loaded_text').html() + ': ' + name_filter_update);
|
|
return false;
|
|
}
|
|
|
|
function save_delete_filter() {
|
|
var id_filter_update = $("#overwrite_filter").val();
|
|
|
|
jQuery.post ("<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
|
|
{
|
|
"page" : "include/ajax/module",
|
|
"delete_monitor_filter" : 1,
|
|
"id" : $("#overwrite_filter").val(),
|
|
},
|
|
function (data) {
|
|
$(".info_box").hide();
|
|
if (data == 'ok') {
|
|
$(".info_box").filter(function(i, item) {
|
|
if ($(item).data('type_info_box') == "success_update_filter") {
|
|
return true;
|
|
}
|
|
else
|
|
return false;
|
|
}).show();
|
|
}
|
|
else {
|
|
$(".info_box").filter(function(i, item) {
|
|
if ($(item).data('type_info_box') == "error_create_filter") {
|
|
return true;
|
|
}
|
|
else
|
|
return false;
|
|
}).show();
|
|
}
|
|
});
|
|
|
|
// First remove all options of filters select.
|
|
$('#filter_id').find('option').remove().end();
|
|
|
|
// Add 'none' option.
|
|
$('#filter_id').append ($('<option></option>').html ( <?php echo "'".__('None')."'"; ?> ).attr ("value", 0));
|
|
|
|
// Reload filters select.
|
|
jQuery.post ("<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
|
|
{
|
|
"page" : "include/ajax/module",
|
|
"get_monitor_filters" : 1
|
|
},
|
|
function (data) {
|
|
jQuery.each (data, function (i, val) {
|
|
s = js_html_entity_decode(val);
|
|
if (i == id_filter_update) {
|
|
$('#filter_id').append ($('<option selected="selected"></option>').html (s).attr ("value", i));
|
|
}
|
|
else {
|
|
$('#filter_id').append ($('<option></option>').html (s).attr ("value", i));
|
|
}
|
|
});
|
|
},
|
|
"json"
|
|
);
|
|
|
|
// Close dialog
|
|
$('.ui-dialog-titlebar-close').trigger('click');
|
|
|
|
return false;
|
|
}
|
|
|
|
$(document).ready(function() {
|
|
show_save_filter();
|
|
});
|
|
</script>
|
|
<?php
|
|
return;
|
|
}
|
|
|
|
if ($get_combo_modules === true) {
|
|
$id_agent = get_parameter('id_source');
|
|
$modules = db_get_all_rows_filter(
|
|
'tagente_modulo',
|
|
['id_agente' => $id_agent],
|
|
[
|
|
'id_agente_modulo as id',
|
|
'nombre as name',
|
|
]
|
|
);
|
|
|
|
echo json_encode($modules);
|
|
return;
|
|
}
|
|
}
|