369 lines
15 KiB
PHP
369 lines
15 KiB
PHP
<?php
|
|
|
|
// Pandora FMS - https://pandorafms.com
|
|
// ==================================================
|
|
// 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; 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.
|
|
global $config;
|
|
|
|
enterprise_include_once('include/functions_policies.php');
|
|
require_once $config['homedir'].'/include/functions_modules.php';
|
|
require_once $config['homedir'].'/include/functions_users.php';
|
|
|
|
$searchModules = check_acl($config['id_user'], 0, 'AR');
|
|
|
|
if (!$modules || !$searchModules) {
|
|
echo "<br><div class='nf'>".__('Zero results found')."</div>\n";
|
|
} else {
|
|
// Show the modal window of an module.
|
|
echo '<div id="module_details_dialog" class=""></div>';
|
|
|
|
$table = new stdClass();
|
|
$table->cellpadding = 4;
|
|
$table->cellspacing = 4;
|
|
$table->width = '98%';
|
|
$table->class = 'info_table';
|
|
$table->head = [];
|
|
$table->head[0] = __('Module').' <a href="index.php?search_category=modules&keywords='.$config['search_keywords'].'&head_search_keywords=abc&offset='.$offset.'&sort_field=module_name&sort=up">'.html_print_image('images/sort_up'.$selectModuleNameUp.'.png', true).'</a><a href="index.php?search_category=modules&keywords='.$config['search_keywords'].'&head_search_keywords=abc&offset='.$offset.'&sort_field=module_name&sort=down">'.html_print_image('images/sort_down'.$selectModuleNameDown.'.png', true).'</a>';
|
|
$table->head[1] = __('Agent').' <a href="index.php?search_category=modules&keywords='.$config['search_keywords'].'&head_search_keywords=abc&offset='.$offset.'&sort_field=agent_name&sort=up">'.html_print_image('images/sort_up'.$selectAgentNameUp.'.png', true).'</a><a href="index.php?search_category=modules&keywords='.$config['search_keywords'].'&head_search_keywords=abc&offset='.$offset.'&sort_field=agent_name&sort=down">'.html_print_image('images/sort_down'.$selectAgentNameDown.'.png', true).'</a>';
|
|
$table->head[2] = __('Type');
|
|
$table->head[3] = __('Interval');
|
|
$table->head[4] = __('Status');
|
|
$table->head[5] = __('Graph');
|
|
$table->head[6] = __('Data');
|
|
$table->head[7] = __('Timestamp');
|
|
$table->head[8] = '';
|
|
|
|
|
|
|
|
$table->align = [];
|
|
$table->align[0] = 'left';
|
|
$table->align[1] = 'left';
|
|
$table->align[2] = 'left';
|
|
$table->align[3] = 'left';
|
|
$table->align[4] = 'left';
|
|
$table->align[5] = 'left';
|
|
$table->align[6] = 'left';
|
|
$table->align[7] = 'left';
|
|
$table->align[8] = 'left';
|
|
|
|
$table->headstyle = [];
|
|
$table->headstyle[0] = 'text-align: left';
|
|
$table->headstyle[1] = 'text-align: left';
|
|
$table->headstyle[2] = 'text-align: left';
|
|
$table->headstyle[3] = 'text-align: left';
|
|
$table->headstyle[4] = 'text-align: left';
|
|
$table->headstyle[5] = 'text-align: left';
|
|
$table->headstyle[6] = 'text-align: left';
|
|
$table->headstyle[7] = 'text-align: left';
|
|
$table->headstyle[8] = 'text-align: left';
|
|
|
|
$table->data = [];
|
|
|
|
$id_type_web_content_string = db_get_value(
|
|
'id_tipo',
|
|
'ttipo_modulo',
|
|
'nombre',
|
|
'web_content_string'
|
|
);
|
|
|
|
$i = 0;
|
|
foreach ($modules as $module) {
|
|
$module['datos'] = modules_get_last_value($module['id_agente_modulo']);
|
|
$module['module_name'] = $module['nombre'];
|
|
|
|
$linked_module_name = '<a href="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$module['id_agente'].'&tab=module&id_agent_module='.$module['id_agente_modulo'].'&edit_module='.$module['id_modulo'].'">';
|
|
$linked_module_name .= $module['module_name'];
|
|
$linked_module_name .= '</a>';
|
|
// To search the monitor status
|
|
$status_sql = sprintf('SELECT estado from tagente_estado where id_agente_modulo ='.$module['id_agente_modulo']);
|
|
$status_sql = db_process_sql($status_sql);
|
|
$status_sql = $status_sql[0];
|
|
// To search the monitor utimestamp
|
|
$utimestamp_sql = sprintf('SELECT utimestamp from tagente_estado where id_agente_modulo ='.$module['id_agente_modulo']);
|
|
$utimestamp_sql = db_process_sql($utimestamp_sql);
|
|
$utimestamp_sql = $utimestamp_sql[0];
|
|
|
|
|
|
$agent = db_get_row('tagente', 'id_agente', $module['id_agente']);
|
|
$agentCell = '<a title='.$module['agent_name'].' href="index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$module['id_agente'].'">'.$agent['alias'].'</a>';
|
|
|
|
$typeCell = ui_print_moduletype_icon($module['id_tipo_modulo'], true);
|
|
|
|
$intervalCell = modules_get_interval($module['id_agente_modulo']);
|
|
|
|
|
|
$module_last_value = modules_get_last_value($module['id_agente_modulo']);
|
|
if (!is_numeric($module_last_value)) {
|
|
$module_last_value = htmlspecialchars($module_last_value);
|
|
}
|
|
|
|
if ($utimestamp_sql['utimestamp'] == 0
|
|
&& ( ($module['id_tipo_modulo'] < 21 || $module['id_tipo_modulo'] > 23)
|
|
&& $module['id_tipo_modulo'] != 100)
|
|
) {
|
|
$statusCell = ui_print_status_image(
|
|
STATUS_MODULE_NO_DATA,
|
|
__('NOT INIT'),
|
|
true
|
|
);
|
|
} else if ($status_sql['estado'] == 0) {
|
|
$statusCell = ui_print_status_image(
|
|
STATUS_MODULE_OK,
|
|
__('NORMAL').': '.$module_last_value,
|
|
true
|
|
);
|
|
} else if ($status_sql['estado'] == 1) {
|
|
$statusCell = ui_print_status_image(
|
|
STATUS_MODULE_CRITICAL,
|
|
__('CRITICAL').': '.$module_last_value,
|
|
true
|
|
);
|
|
} else if ($status_sql['estado'] == 2) {
|
|
$statusCell = ui_print_status_image(
|
|
STATUS_MODULE_WARNING,
|
|
__('WARNING').': '.$module_last_value,
|
|
true
|
|
);
|
|
} else if ($status_sql['estado'] == 3) {
|
|
$statusCell = ui_print_status_image(
|
|
STATUS_MODULE_UNKNOWN,
|
|
__('UNKNOWN').': '.$module_last_value,
|
|
true
|
|
);
|
|
} else {
|
|
$last_status = modules_get_agentmodule_last_status($module['id_agente_modulo']);
|
|
switch ($last_status) {
|
|
case 0:
|
|
$statusCell = ui_print_status_image(
|
|
STATUS_MODULE_OK,
|
|
__('UNKNOWN').' - '.__('Last status').' '.__('NORMAL').': '.$module_last_value,
|
|
true
|
|
);
|
|
break;
|
|
|
|
case 1:
|
|
$statusCell = ui_print_status_image(
|
|
STATUS_MODULE_CRITICAL,
|
|
__('UNKNOWN').' - '.__('Last status').' '.__('CRITICAL').': '.$module_last_value,
|
|
true
|
|
);
|
|
break;
|
|
|
|
case 2:
|
|
$statusCell = ui_print_status_image(
|
|
STATUS_MODULE_WARNING,
|
|
__('UNKNOWN').' - '.__('Last status').' '.__('WARNING').': '.$module_last_value,
|
|
true
|
|
);
|
|
break;
|
|
}
|
|
}
|
|
|
|
$graphCell = '';
|
|
$table->cellclass[$i][5] = 'table_action_buttons';
|
|
if ($module['history_data'] == 1) {
|
|
$graph_type = return_graphtype($module['id_tipo_modulo']);
|
|
|
|
$name_module_type = modules_get_moduletype_name($module['id_tipo_modulo']);
|
|
$handle = 'stat'.$name_module_type.'_'.$module['id_agente_modulo'];
|
|
$url = 'include/procesos.php?agente='.$module['id_agente_modulo'];
|
|
$win_handle = dechex(crc32($module['id_agente_modulo'].$module['module_name']));
|
|
|
|
$link = "winopeng('".'operation/agentes/stat_win.php?'."type=$graph_type&".'period='.SECONDS_1DAY.'&id='.$module['id_agente_modulo'].'&period_graph=0&refresh='.SECONDS_10MINUTES."', "."'day_".$win_handle."')";
|
|
$link_module_detail = 'show_module_detail_dialog('.$module['id_agente_modulo'].', '.$module['id_agente'].', '."'', 0, ".SECONDS_1DAY.", '".$module['module_name']."')";
|
|
|
|
$graphCell = '<a href="javascript:'.$link.'">'.html_print_image('images/module-graph.svg', true, ['border' => 0, 'alt' => '', 'class' => 'main_menu_icon invert_filter' ]).'</a>';
|
|
$graphCell .= ' <a href="javascript:'.$link_module_detail.'">'.html_print_image(
|
|
'images/simple-value.svg',
|
|
true,
|
|
[
|
|
'border' => '0',
|
|
'alt' => '',
|
|
'class' => 'main_menu_icon invert_filter',
|
|
]
|
|
).'</a>';
|
|
}
|
|
|
|
if (is_numeric(modules_get_last_value($module['id_agente_modulo']))) {
|
|
$dataCell = format_numeric(modules_get_last_value($module['id_agente_modulo']));
|
|
} else {
|
|
$dataCell = ui_print_module_string_value(
|
|
$module['datos'],
|
|
$module['id_agente_modulo'],
|
|
$module['current_interval']
|
|
);
|
|
}
|
|
|
|
if ($module['estado'] == 3) {
|
|
$option = ['html_attr' => 'class="redb"'];
|
|
} else {
|
|
$option = [];
|
|
}
|
|
|
|
$timestampCell = ui_print_timestamp($utimestamp_sql['utimestamp'], true, $option);
|
|
|
|
|
|
$group_agent = agents_get_agent_group($module['id_agente']);
|
|
|
|
$table->cellclass[$i][8] = 'table_action_buttons';
|
|
if (check_acl($config['id_user'], $group_agent, 'AW')) {
|
|
$edit_module = 'aaa';
|
|
|
|
$url_edit = 'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$module['id_agente'].'&tab=module&id_agent_module='.$module['id_agente_modulo'].'&edit_module=1';
|
|
|
|
$edit_module = '<a href="'.$url_edit.'">'.html_print_image('images/edit.svg', true, ['class' => 'invert_filter main_menu_icon']).'</a>';
|
|
} else {
|
|
$edit_module = '';
|
|
}
|
|
|
|
|
|
array_push(
|
|
$table->data,
|
|
[
|
|
$linked_module_name,
|
|
$agentCell,
|
|
$typeCell,
|
|
$intervalCell,
|
|
$statusCell,
|
|
$graphCell,
|
|
$dataCell,
|
|
$timestampCell,
|
|
$edit_module,
|
|
]
|
|
);
|
|
|
|
$i++;
|
|
}
|
|
|
|
echo '<br />';
|
|
html_print_table($table);
|
|
unset($table);
|
|
$tablePagination = ui_pagination(
|
|
$totalModules,
|
|
false,
|
|
0,
|
|
0,
|
|
true,
|
|
'offset',
|
|
false
|
|
);
|
|
|
|
html_print_action_buttons(
|
|
'',
|
|
[
|
|
'type' => 'data_table',
|
|
'class' => 'fixed_action_buttons',
|
|
'right_content' => $tablePagination,
|
|
]
|
|
);
|
|
}
|
|
|
|
ui_include_time_picker();
|
|
ui_require_jquery_file('ui.datepicker-'.get_user_language(), 'include/javascript/i18n/');
|
|
|
|
?>
|
|
|
|
<script type="text/javascript">
|
|
function show_module_detail_dialog(module_id, id_agent, server_name, offset, period, module_name) {
|
|
|
|
var server_name = '';
|
|
var extra_parameters = '';
|
|
if ($('input[name=selection_mode]:checked').val()) {
|
|
|
|
period = $('#period').val();
|
|
|
|
var selection_mode = $('input[name=selection_mode]:checked').val();
|
|
var date_from = $('#text-date_from').val();
|
|
var time_from = $('#text-time_from').val();
|
|
var date_to = $('#text-date_to').val();
|
|
var time_to = $('#text-time_to').val();
|
|
|
|
extra_parameters = '&selection_mode=' + selection_mode + '&date_from=' + date_from + '&date_to=' + date_to + '&time_from=' + time_from + '&time_to=' + time_to;
|
|
}
|
|
|
|
// Get the free text in both options
|
|
var freesearch = $('#text-freesearch').val();
|
|
if (freesearch != null && freesearch !== '') {
|
|
var free_checkbox = $('input[name=free_checkbox]:checked').val();
|
|
extra_parameters += '&freesearch=' + freesearch;
|
|
if (free_checkbox == 1) {
|
|
extra_parameters += '&free_checkbox=1';
|
|
} else {
|
|
extra_parameters += '&free_checkbox=0';
|
|
}
|
|
}
|
|
|
|
title = <?php echo '"'.__('Module: ').'"'; ?>;
|
|
$.ajax({
|
|
type: "POST",
|
|
url: "<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
|
|
data: "page=include/ajax/module&get_module_detail=1&server_name=" + server_name + "&id_agent=" + id_agent + "&id_module=" + module_id + "&offset=" + offset + "&period=" + period + extra_parameters,
|
|
dataType: "html",
|
|
success: function(data) {
|
|
$("#module_details_dialog").hide()
|
|
.empty()
|
|
.append(data)
|
|
.dialog({
|
|
resizable: true,
|
|
draggable: true,
|
|
modal: true,
|
|
title: title + module_name,
|
|
overlay: {
|
|
opacity: 0.5,
|
|
background: "black"
|
|
},
|
|
width: 650,
|
|
height: 500
|
|
})
|
|
.show();
|
|
refresh_pagination_callback(module_id, id_agent, "", module_name);
|
|
datetime_picker_callback();
|
|
forced_title_callback();
|
|
}
|
|
});
|
|
}
|
|
|
|
function refresh_pagination_callback (module_id, id_agent, server_name,module_name) {
|
|
$(".binary_dialog").click( function() {
|
|
|
|
var classes = $(this).attr('class');
|
|
classes = classes.split(' ');
|
|
var offset_class = classes[2];
|
|
offset_class = offset_class.split('_');
|
|
var offset = offset_class[1];
|
|
|
|
var period = $('#period').val();
|
|
|
|
show_module_detail_dialog(module_id, id_agent, server_name, offset, period,module_name);
|
|
return false;
|
|
});
|
|
}
|
|
|
|
function datetime_picker_callback() {
|
|
|
|
$("#text-time_from, #text-time_to").timepicker({
|
|
showSecond: true,
|
|
timeFormat: '<?php echo TIME_FORMAT_JS; ?>',
|
|
timeOnlyTitle: '<?php echo __('Choose time'); ?>',
|
|
timeText: '<?php echo __('Time'); ?>',
|
|
hourText: '<?php echo __('Hour'); ?>',
|
|
minuteText: '<?php echo __('Minute'); ?>',
|
|
secondText: '<?php echo __('Second'); ?>',
|
|
currentText: '<?php echo __('Now'); ?>',
|
|
closeText: '<?php echo __('Close'); ?>'});
|
|
|
|
$("#text-date_from, #text-date_to").datepicker({dateFormat: "<?php echo DATE_FORMAT_JS; ?>"});
|
|
|
|
$.datepicker.setDefaults($.datepicker.regional[ "<?php echo get_user_language(); ?>"]);
|
|
}
|
|
datetime_picker_callback();
|
|
|
|
</script>
|