1199 lines
46 KiB
PHP
Executable File
1199 lines
46 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-2019 Artica Soluciones Tecnologicas
|
|
* Please see http://pandorafms.org 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.
|
|
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';
|
|
enterprise_include_once('include/functions_metaconsole.php');
|
|
|
|
$get_plugin_macros = get_parameter('get_plugin_macros');
|
|
$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);
|
|
|
|
if ($get_agent_modules_json_by_name) {
|
|
$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;
|
|
}
|
|
|
|
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 ($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] = html_print_radio_button_extended(
|
|
'selection_mode',
|
|
'fromnow',
|
|
'',
|
|
$selection_mode,
|
|
false,
|
|
'',
|
|
'style="margin-right: 15px;"',
|
|
true
|
|
).__('Choose a time from now');
|
|
$formtable->data[0][1] = html_print_select($periods, 'period', $period, '', '', 0, true, false, false);
|
|
$formtable->data[0][2] = '';
|
|
$formtable->data[0][3] = "<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.png', true, ['style' => 'vertical-align: middle;', 'border' => '0' ]).'</a>';
|
|
$formtable->rowspan[0][3] = 2;
|
|
$formtable->cellstyle[0][3] = 'vertical-align: middle;';
|
|
|
|
$formtable->data[1][0] = html_print_radio_button_extended(
|
|
'selection_mode',
|
|
'range',
|
|
'',
|
|
$selection_mode,
|
|
false,
|
|
'',
|
|
'style="margin-right: 15px;"',
|
|
true
|
|
).__('Specify time range');
|
|
$formtable->data[1][1] = __('Timestamp from:');
|
|
|
|
$formtable->data[1][2] = html_print_input_text(
|
|
'date_from',
|
|
$date_from,
|
|
'',
|
|
10,
|
|
10,
|
|
true
|
|
);
|
|
$formtable->data[1][2] .= html_print_input_text(
|
|
'time_from',
|
|
$time_from,
|
|
'',
|
|
9,
|
|
7,
|
|
true
|
|
);
|
|
|
|
$formtable->data[1][1] .= '<br />';
|
|
$formtable->data[1][1] .= __('Timestamp to:');
|
|
|
|
$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,
|
|
7,
|
|
true
|
|
);
|
|
|
|
$freesearch_object = '';
|
|
if (preg_match('/_string/', $moduletype_name)) {
|
|
$formtable->data[2][0] = __('Free search').' ';
|
|
$formtable->data[2][1] = html_print_input_text('freesearch', $freesearch, '', 20, null, true);
|
|
$formtable->data[2][2] = html_print_checkbox('free_checkbox', 1, $free_checkbox, true);
|
|
$formtable->data[2][2] .= ' '.__('Exact phrase');
|
|
$freesearch_object = json_encode(
|
|
[
|
|
'value' => io_safe_output($freesearch),
|
|
'exact' => (bool) $free_checkbox,
|
|
]
|
|
);
|
|
}
|
|
|
|
html_print_table($formtable);
|
|
|
|
$offset = (int) get_parameter('offset');
|
|
$block_size = (int) $config['block_size'];
|
|
|
|
$columns = [];
|
|
|
|
$datetime_from = strtotime($date_from.' '.$time_from);
|
|
$datetime_to = strtotime($date_to.' '.$time_to);
|
|
|
|
|
|
$columns = [
|
|
'Data' => [
|
|
'data',
|
|
'modules_format_data',
|
|
'align' => 'center',
|
|
'width' => '230px'
|
|
],
|
|
];
|
|
|
|
if ($config['prominent_time'] == 'comparation') {
|
|
$columns['Time'] = [
|
|
'utimestamp',
|
|
'modules_format_time',
|
|
'align' => 'center',
|
|
'width' => '50px'
|
|
];
|
|
} else {
|
|
$columns['Timestamp'] = [
|
|
'utimestamp',
|
|
'modules_format_timestamp',
|
|
'align' => 'center',
|
|
'width' => '50px'
|
|
];
|
|
}
|
|
|
|
if ($selection_mode == 'fromnow') {
|
|
$date = get_system_time();
|
|
$period = $period;
|
|
} else {
|
|
$period = ($datetime_to - $datetime_from);
|
|
$date = ($datetime_from + $period);
|
|
}
|
|
|
|
$count = modules_get_agentmodule_data(
|
|
$module_id,
|
|
$period,
|
|
$date,
|
|
true,
|
|
$conexion,
|
|
'ASC',
|
|
$freesearch_object
|
|
);
|
|
|
|
$module_data = modules_get_agentmodule_data(
|
|
$module_id,
|
|
$period,
|
|
$date,
|
|
false,
|
|
$conexion,
|
|
'DESC',
|
|
$freesearch_object
|
|
);
|
|
|
|
if (empty($module_data)) {
|
|
$result = [];
|
|
} else {
|
|
// Paginate the result.
|
|
$result = array_slice($module_data, $offset, $block_size);
|
|
}
|
|
|
|
// Definition of new class.
|
|
$table = new stdClass();
|
|
|
|
$table->width = '100%';
|
|
$table->class = 'databox data';
|
|
$table->data = [];
|
|
|
|
$index = 0;
|
|
foreach ($columns as $col => $attr) {
|
|
$table->head[$index] = $col;
|
|
|
|
if (isset($attr['align'])) {
|
|
$table->align[$index] = $attr['align'];
|
|
}
|
|
|
|
if (isset($attr['width'])) {
|
|
$table->size[$index] = $attr['width'];
|
|
}
|
|
|
|
$index++;
|
|
}
|
|
|
|
$id_type_web_content_string = db_get_value(
|
|
'id_tipo',
|
|
'ttipo_modulo',
|
|
'nombre',
|
|
'web_content_string'
|
|
);
|
|
|
|
$post_process = db_get_value_filter('post_process', 'tagente_modulo', ['id_agente_modulo' => $module_id]);
|
|
$unit = db_get_value_filter('unit', 'tagente_modulo', ['id_agente_modulo' => $module_id]);
|
|
foreach ($result as $row) {
|
|
$data = [];
|
|
|
|
$is_web_content_string = (bool) db_get_value_filter(
|
|
'id_agente_modulo',
|
|
'tagente_modulo',
|
|
[
|
|
'id_agente_modulo' => $row['id_agente_modulo'],
|
|
'id_tipo_modulo' => $id_type_web_content_string,
|
|
]
|
|
);
|
|
|
|
foreach ($columns as $col => $attr) {
|
|
if ($attr[1] != 'modules_format_data') {
|
|
$data[] = date('d F Y h:i:s A', $row['utimestamp']);
|
|
} else if (is_snapshot_data($row[$attr[0]])) {
|
|
if ($config['command_snapshot']) {
|
|
$imagetab = '<img style="width:100%" src="';
|
|
$imagetab .= io_safe_input($row[$attr[0]]);
|
|
$imagetab .= '">';
|
|
$image = '<img style="width:300px" 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']));
|
|
}
|
|
} else {
|
|
$data[] = remove_right_zeros(number_format($row[$attr[0]], $config['graph_precision']));
|
|
}
|
|
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']));
|
|
}
|
|
break;
|
|
}
|
|
} else {
|
|
if ($row[$attr[0]] == '') {
|
|
$data[] = 'No data';
|
|
} else {
|
|
$data_macro = modules_get_unit_macro($row[$attr[0]], $unit);
|
|
if ($data_macro) {
|
|
$data[] = $data_macro;
|
|
} else {
|
|
$data[] = html_print_result_div($row[$attr[0]]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
array_push($table->data, $data);
|
|
if (count($table->data) > 200) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (empty($table->data)) {
|
|
ui_print_error_message(__('No available data to show'));
|
|
} else {
|
|
ui_pagination(count($count), false, $offset, 0, false, 'offset', true, 'binary_dialog');
|
|
html_print_table($table);
|
|
}
|
|
|
|
if (is_metaconsole()) {
|
|
metaconsole_restore_db();
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if ($get_module_autocomplete_input) {
|
|
$id_agent = (int) get_parameter('id_agent');
|
|
|
|
ob_clean();
|
|
if ($id_agent > 0) {
|
|
html_print_autocomplete_modules(
|
|
'autocomplete_module_name',
|
|
'',
|
|
[$id_agent]
|
|
);
|
|
return;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if ($add_module_relation) {
|
|
$result = false;
|
|
$id_module_a = (int) get_parameter('id_module_a');
|
|
$id_module_b = (int) get_parameter('id_module_b');
|
|
$type = (string) get_parameter('relation_type');
|
|
|
|
if ($id_module_a < 1) {
|
|
$name_module_a = get_parameter('name_module_a', '');
|
|
if ($name_module_a) {
|
|
$id_module_a = (int) db_get_value(
|
|
'id_agente_modulo',
|
|
'tagente_modulo',
|
|
'nombre',
|
|
$name_module_a
|
|
);
|
|
} else {
|
|
echo json_encode($result);
|
|
return;
|
|
}
|
|
}
|
|
|
|
if ($id_module_b < 1) {
|
|
$name_module_b = get_parameter('name_module_b', '');
|
|
if ($name_module_b) {
|
|
$id_module_b = (int) db_get_value(
|
|
'id_agente_modulo',
|
|
'tagente_modulo',
|
|
'nombre',
|
|
$name_module_b
|
|
);
|
|
} else {
|
|
echo json_encode($result);
|
|
return;
|
|
}
|
|
}
|
|
|
|
if ($id_module_a > 0 && $id_module_b > 0) {
|
|
$result = modules_add_relation($id_module_a, $id_module_b, $type);
|
|
}
|
|
|
|
echo json_encode($result);
|
|
return;
|
|
}
|
|
|
|
if ($remove_module_relation) {
|
|
$id_relation = (int) get_parameter('id_relation');
|
|
if ($id_relation > 0) {
|
|
$result = (bool) modules_delete_relation($id_relation);
|
|
}
|
|
|
|
echo json_encode($result);
|
|
return;
|
|
}
|
|
|
|
if ($change_module_relation_updates) {
|
|
$id_relation = (int) get_parameter('id_relation');
|
|
if ($id_relation > 0) {
|
|
$result = (bool) modules_change_relation_lock($id_relation);
|
|
}
|
|
|
|
echo json_encode($result);
|
|
return;
|
|
}
|
|
|
|
if ($get_id_tag) {
|
|
$tag_name = get_parameter('tag_name');
|
|
|
|
if ($tag_name) {
|
|
$tag_id = db_get_value('id_tag', 'ttag', 'name', $tag_name);
|
|
} else {
|
|
$tag_id = 0;
|
|
}
|
|
|
|
echo $tag_id;
|
|
return;
|
|
}
|
|
|
|
if ($list_modules) {
|
|
include_once $config['homedir'].'/include/functions_modules.php';
|
|
include_once $config['homedir'].'/include/functions_servers.php';
|
|
include_once $config['homedir'].'/include/functions_tags.php';
|
|
include_once $config['homedir'].'/include/functions_clippy.php';
|
|
|
|
|
|
// Disable module edition in cluster module list.
|
|
$cluster_view = (bool) preg_match(
|
|
'/operation\/cluster\/cluster/',
|
|
$_SERVER['HTTP_REFERER']
|
|
);
|
|
|
|
$agent_a = check_acl($config['id_user'], 0, 'AR');
|
|
$agent_w = check_acl($config['id_user'], 0, 'AW');
|
|
$access = ($agent_a == true) ? 'AR' : (($agent_w == true) ? 'AW' : 'AR');
|
|
|
|
$id_agent = (int) get_parameter('id_agente', 0);
|
|
$id_agente = $id_agent;
|
|
$show_notinit = (int) get_parameter('show_notinit', 0);
|
|
$cluster_list = (int) get_parameter('cluster_list', 0);
|
|
$url = 'index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$id_agent;
|
|
$selectTypeUp = false;
|
|
$selectTypeDown = false;
|
|
$selectNameUp = false;
|
|
$selectNameDown = false;
|
|
$selectStatusUp = false;
|
|
$selectStatusDown = false;
|
|
$selectDataUp = false;
|
|
$selectDataDown = false;
|
|
$selectLastContactUp = false;
|
|
$selectLastContactDown = false;
|
|
$sortField = get_parameter('sort_field');
|
|
$sort = get_parameter('sort', 'none');
|
|
$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 = get_parameter('status_text_monitor', '');
|
|
$filter_monitors = (bool) get_parameter('filter_monitors', false);
|
|
$status_module_group = get_parameter('status_module_group', -1);
|
|
$monitors_change_filter = (bool) get_parameter('monitors_change_filter', false);
|
|
|
|
$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)) {
|
|
$status_text_monitor_sql .= $status_text_monitor.'%';
|
|
}
|
|
|
|
if (!$show_notinit) {
|
|
$monitor_filter = AGENT_MODULE_STATUS_NO_DATA;
|
|
} else {
|
|
$monitor_filter = -15;
|
|
}
|
|
|
|
// Count monitors/modules
|
|
// Build the order sql.
|
|
$first = true;
|
|
foreach ($order as $ord) {
|
|
if ($first) {
|
|
$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);
|
|
|
|
if (isset($count_modules[0])) {
|
|
$count_modules = reset($count_modules[0]);
|
|
} else {
|
|
$count_modules = 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) {
|
|
$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'])) {
|
|
$paginate_module = $config['paginate_module'];
|
|
}
|
|
|
|
if ($paginate_module) {
|
|
$modules = db_get_all_rows_sql($sql_modules_info.$limit);
|
|
} else {
|
|
$modules = db_get_all_rows_sql($sql_modules_info);
|
|
}
|
|
|
|
if (empty($modules)) {
|
|
$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;
|
|
|
|
|
|
$table = new stdClass();
|
|
$table->width = '100%';
|
|
$table->styleTable = 'border: 0;border-radius: 0;';
|
|
$table->cellpadding = 0;
|
|
$table->cellspacing = 0;
|
|
$table->class = 'info_table';
|
|
$table->head = [];
|
|
$table->data = [];
|
|
|
|
$isFunctionPolicies = enterprise_include_once('include/functions_policies.php');
|
|
if ($agent_w) {
|
|
$table->head[0] = "<span title='".__('Force execution')."'>".__('F.').'</span>';
|
|
}
|
|
|
|
if ($isFunctionPolicies !== ENTERPRISE_NOT_HOOK) {
|
|
$table->head[1] = "<span title='".__('Policy')."'>".__('P.').'</span>';
|
|
}
|
|
|
|
$table->head[2] = __('Type').ui_get_sorting_arrows($url_up_type, $url_down_type, $selectTypeUp, $selectTypeDown);
|
|
$table->head[3] = __('Module name').ui_get_sorting_arrows($url_up_name, $url_down_name, $selectNameUp, $selectNameDown);
|
|
$table->head[4] = __('Description');
|
|
$table->head[5] = __('Status').ui_get_sorting_arrows($url_up_status, $url_down_status, $selectStatusUp, $selectStatusDown);
|
|
$table->head[6] = __('Thresholds');
|
|
$table->head[7] = __('Data');
|
|
$table->head[8] = __('Graph');
|
|
$table->head[9] = __('Last contact').ui_get_sorting_arrows($url_up_last, $url_down_last, $selectLastContactUp, $selectLastContactDown);
|
|
$table->align = [];
|
|
$table->align[0] = 'center';
|
|
$table->align[1] = 'left';
|
|
$table->align[2] = 'left';
|
|
$table->align[3] = 'left';
|
|
$table->align[4] = 'left';
|
|
$table->align[5] = 'left';
|
|
$table->align[6] = 'center';
|
|
$table->align[7] = 'left';
|
|
$table->align[8] = 'center';
|
|
$table->align[9] = 'right';
|
|
|
|
$table->headstyle[2] = 'min-width: 65px';
|
|
$table->headstyle[3] = 'min-width: 80px';
|
|
$table->size[3] = '25%';
|
|
$table->style[3] = 'max-width: 28em;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;';
|
|
$table->size[4] = '25%';
|
|
$table->headstyle[5] = 'min-width: 65px';
|
|
$table->headstyle[6] = 'min-width: 80px; text-align: center;';
|
|
$table->headstyle[7] = 'min-width: 80px;';
|
|
$table->headstyle[8] = 'min-width: 70px; text-align: center;';
|
|
$table->headstyle[9] = 'min-width: 100px; text-align: right;';
|
|
|
|
$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 = get_parameter('hierachy_mode', false);
|
|
|
|
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) {
|
|
if ($hierachy_mode !== 'true') {
|
|
// 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.
|
|
}
|
|
|
|
$data = [];
|
|
if (($module['id_modulo'] != 1) && ($module['id_tipo_modulo'] != 100)) {
|
|
if ($agent_w) {
|
|
if ($module['flag'] == 0) {
|
|
$data[0] = '<a href="index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$id_agente.'&id_agente_modulo='.$module['id_agente_modulo'].'&flag=1&refr=60">'.html_print_image('images/target.png', true, ['border' => '0', 'title' => __('Force')]).'</a>';
|
|
} else {
|
|
$data[0] = '<a href="index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$id_agente.'&id_agente_modulo='.$module['id_agente_modulo'].'&refr=60">'.html_print_image('images/refresh.png', true, ['border' => '0', 'title' => __('Refresh')]).'</a>';
|
|
}
|
|
}
|
|
} else {
|
|
if ($agent_w) {
|
|
$data[0] = '';
|
|
}
|
|
}
|
|
|
|
if ($isFunctionPolicies !== ENTERPRISE_NOT_HOOK) {
|
|
if ($module['id_policy_module'] != 0) {
|
|
$linked = 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']);
|
|
|
|
if ($id_policy != '') {
|
|
$name_policy = db_get_value_sql('SELECT name FROM tpolicies WHERE id = '.$id_policy);
|
|
} else {
|
|
$name_policy = __('Unknown');
|
|
}
|
|
|
|
$policyInfo = policies_info_module_policy($module['id_policy_module']);
|
|
|
|
$adopt = false;
|
|
if (policies_is_module_adopt($module['id_agente_modulo'])) {
|
|
$adopt = true;
|
|
}
|
|
|
|
if ($linked) {
|
|
if ($adopt) {
|
|
$img = 'images/policies_brick.png';
|
|
$title = '('.__('Adopted').') '.$name_policy;
|
|
} else {
|
|
$img = 'images/policies.png';
|
|
$title = $name_policy;
|
|
}
|
|
} else {
|
|
if ($adopt) {
|
|
$img = 'images/policies_not_brick.png';
|
|
$title = '('.__('Unlinked').') ('.__('Adopted').') '.$name_policy;
|
|
} else {
|
|
$img = 'images/unlinkpolicy.png';
|
|
$title = '('.__('Unlinked').') '.$name_policy;
|
|
}
|
|
}
|
|
|
|
$data[1] = '<a href="?sec=gmodules&sec2=enterprise/godmode/policies/policies&id='.$id_policy.'">'.html_print_image($img, true, ['title' => $title]).'</a>';
|
|
} else {
|
|
$data[1] = '';
|
|
}
|
|
}
|
|
|
|
$data[2] = servers_show_type($module['id_modulo']).' ';
|
|
|
|
if (check_acl($config['id_user'], $id_grupo, 'AW')
|
|
&& $cluster_view === false
|
|
) {
|
|
$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'].'">'.html_print_image('images/config.png', true, ['alt' => '0', 'border' => '', 'title' => __('Edit'), 'class' => 'action_button_img']).'</a>';
|
|
}
|
|
|
|
|
|
|
|
$data[3] = '';
|
|
|
|
if (isset($module['deep']) && ($module['deep'] != 0)) {
|
|
$data[3] .= str_repeat(' ', $module['deep']);
|
|
$data[3] .= html_print_image('images/icono_escuadra.png', true, ['style' => 'padding-bottom: inherit;']).' ';
|
|
}
|
|
|
|
if ($module['quiet']) {
|
|
$data[3] .= html_print_image(
|
|
'images/dot_blue.png',
|
|
true,
|
|
[
|
|
'border' => '0',
|
|
'title' => __('Quiet'),
|
|
'alt' => '',
|
|
]
|
|
).' ';
|
|
}
|
|
|
|
$data[3] .= ui_print_truncate_text($module['nombre'], 'module_medium');
|
|
if (!empty($module['extended_info'])) {
|
|
if ($module['extended_info'] != '') {
|
|
$data[3] .= 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[3] .= ' <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']).'</a> ';
|
|
}
|
|
|
|
// Adds relations context information.
|
|
if (modules_relation_exists($module['id_agente_modulo'])) {
|
|
$data[3] .= ' <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> ';
|
|
}
|
|
|
|
$data[4] = ui_print_string_substr($module['descripcion'], 60, true, 8);
|
|
|
|
if ($module['datos'] != strip_tags($module['datos'])) {
|
|
$module_value = io_safe_input($module['datos']);
|
|
} else {
|
|
$module_value = io_safe_output($module['datos']);
|
|
}
|
|
|
|
modules_get_status(
|
|
$module['id_agente_modulo'],
|
|
$module['estado'],
|
|
$module_value,
|
|
$status,
|
|
$title
|
|
);
|
|
|
|
$last_status_change_text = 'Time elapsed since last status change: ';
|
|
$last_status_change_text .= !empty($module['last_status_change']) ? human_time_comparation($module['last_status_change']) : __('N/A');
|
|
|
|
$data[5] = ui_print_status_image($status, htmlspecialchars($title), true, false, false, false, $last_status_change_text);
|
|
if (!$show_context_help_first_time) {
|
|
$show_context_help_first_time = true;
|
|
|
|
if ($module['estado'] == AGENT_MODULE_STATUS_UNKNOWN) {
|
|
$data[5] .= clippy_context_help('module_unknow');
|
|
}
|
|
}
|
|
|
|
$salida = modules_get_agentmodule_data_for_humans($module);
|
|
|
|
if ($module['id_tipo_modulo'] != 25) {
|
|
$data[6] = 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']);
|
|
} else {
|
|
$data[6] = '';
|
|
}
|
|
|
|
$data[7] = $salida;
|
|
$graph_type = return_graphtype($module['id_tipo_modulo']);
|
|
|
|
$data[8] = ' ';
|
|
if ($module['history_data'] == 1) {
|
|
$nombre_tipo_modulo = modules_get_moduletype_name($module['id_tipo_modulo']);
|
|
$handle = 'stat'.$nombre_tipo_modulo.'_'.$module['id_agente_modulo'];
|
|
$url = 'include/procesos.php?agente='.$module['id_agente_modulo'];
|
|
$win_handle = dechex(crc32($module['id_agente_modulo'].$module['nombre']));
|
|
|
|
// Try to display the SNMP module realtime graph
|
|
$rt_button = get_module_realtime_link_graph($module);
|
|
if (!empty($rt_button)) {
|
|
$data[8] = $rt_button.' ';
|
|
}
|
|
|
|
// Show events for boolean modules by default.
|
|
if ($graph_type == 'boolean') {
|
|
$draw_events = 1;
|
|
} else {
|
|
$draw_events = 0;
|
|
}
|
|
|
|
$link = "winopeng_var('".'operation/agentes/stat_win.php?'."type=$graph_type&".'period='.SECONDS_1DAY.'&id='.$module['id_agente_modulo'].'&refresh='.SECONDS_10MINUTES.'&'."draw_events=$draw_events', 'day_".$win_handle."', 800, 480)";
|
|
if (!is_snapshot_data($module['datos'])) {
|
|
$data[8] .= '<a href="javascript:'.$link.'">'.html_print_image('images/chart_curve.png', true, ['border' => '0', 'alt' => '']).'</a> ';
|
|
}
|
|
|
|
$server_name = '';
|
|
|
|
$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);
|
|
|
|
$data[8] .= "<a href='javascript: ".'show_module_detail_dialog('.$module['id_agente_modulo'].', '.$id_agente.', "'.$server_name.'", '.(0).', '.SECONDS_1DAY.', " '.$modules_get_agentmodule_name."\")'>".html_print_image('images/binary.png', true, ['border' => '0', 'alt' => '']).'</a>';
|
|
}
|
|
|
|
if ($module['estado'] == 3) {
|
|
$data[9] = '<span class="redb">';
|
|
} else {
|
|
$data[9] = '<span>';
|
|
}
|
|
|
|
$data[9] .= ui_print_timestamp($module['utimestamp'], true, ['style' => 'font-size: 7pt']);
|
|
$data[9] .= '</span>';
|
|
|
|
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)) {
|
|
if ($filter_monitors) {
|
|
ui_print_info_message([ 'no_close' => true, 'message' => __('Any monitors aren\'t with this filter.') ]);
|
|
} else {
|
|
ui_print_info_message([ 'no_close' => true, 'message' => __('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) {
|
|
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) {
|
|
ui_pagination(
|
|
$count_modules,
|
|
false,
|
|
0,
|
|
0,
|
|
false,
|
|
'offset',
|
|
true,
|
|
'pagination-bottom',
|
|
'pagination_list_modules(offset_param)',
|
|
[
|
|
'count' => '',
|
|
'offset' => 'offset_param',
|
|
]
|
|
);
|
|
}
|
|
}
|
|
|
|
unset($table);
|
|
unset($table_data);
|
|
}
|
|
|
|
if ($get_type) {
|
|
$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;
|
|
}
|
|
}
|