pandorafms/pandora_console/operation/agentes/graphs.php

579 lines
18 KiB
PHP
Raw Normal View History

<?php
// Pandora FMS - http://pandorafms.com
// ==================================================
2020-11-27 13:52:35 +01:00
// Copyright (c) 2005-2021 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.
// Load global vars
global $config;
require_once 'include/functions_agents.php';
require_once 'include/functions_custom_graphs.php';
ui_require_javascript_file('calendar');
if (! check_acl($config['id_user'], $id_grupo, 'AR') && ! check_acl($config['id_user'], 0, 'AW')) {
db_pandora_audit(
'ACL Violation',
'Trying to access (read) to agent '.agents_get_name($id_agente)
);
include 'general/noaccess.php';
return;
}
require_once $config['homedir'].'/include/functions_graph.php';
$draw_alerts = get_parameter('draw_alerts', 0);
$period = get_parameter('period', SECONDS_1HOUR);
$width = get_parameter('width', 555);
$height = get_parameter('height', 245);
$label = get_parameter('label', '');
$start_date = get_parameter('start_date', date('Y-m-d'));
$draw_events = get_parameter('draw_events', 0);
$modules = get_parameter('modules', []);
$filter = get_parameter('filter', 0);
$combined = get_parameter('combined', 1);
$option_type = get_parameter('option_type', 0);
// ----------------------------------------------------------------------
// Get modules of agent sorted as:
// - modules network no proc
// - modules network proc
// - others
// ----------------------------------------------------------------------
$list_modules = [];
$modules_networkmap_no_proc = agents_get_modules(
$id_agente,
false,
[
'id_modulo' => 2,
// networkmap type
'id_tipo_modulo' => [
'<>2',
// != generic_proc
'<>6',
// != remote_icmp_proc
'<>9',
// != remote_tcp_proc
'<>6',
// != remote_tcp_proc
'<>18',
// != remote_snmp_proc
'<>21',
// != async_proc
'<>31',
],
// != web_proc
]
);
if (empty($modules_networkmap_no_proc)) {
$modules_networkmap_no_proc = [];
}
$modules_others = agents_get_modules(
$id_agente,
false,
[
'id_tipo_modulo' => [
'<>2',
// != generic_proc
'<>6',
// != remote_icmp_proc
'<>9',
// != remote_tcp_proc
'<>6',
// != remote_tcp_proc
'<>18',
// != remote_snmp_proc
'<>21',
// != async_proc
'<>31',
],
// != web_proc
]
);
if (empty($modules_others)) {
$modules_others = [];
}
$modules_boolean = agents_get_modules(
$id_agente,
false,
[
'id_tipo_modulo' => [
'<>1',
'<>3',
'<>4',
'<>5',
'<>7',
'<>8',
'<>10',
'<>11',
'<>15',
'<>16',
'<>17',
'<>22',
'<>23',
'<>24',
'<>30',
'<>32',
'<>33',
'<>100',
],
]
);
if (empty($modules_boolean)) {
$modules_boolean = [];
}
// Cleaned the duplicate $modules and other things
$modules_others = array_diff_key(
$modules_others,
$modules_networkmap_no_proc
);
foreach ($modules_others as $i => $m) {
$modules_others[$i] = [
'optgroup' => __('Other modules'),
'name' => $m,
];
}
foreach ($modules_networkmap_no_proc as $i => $m) {
$modules_networkmap_no_proc[$i] = [
'optgroup' => __('Modules network no proc'),
'name' => $m,
];
}
foreach ($modules_boolean as $i => $m) {
$modules_boolean[$i] = [
'optgroup' => __('Modules boolean'),
'name' => $m,
];
}
$list_modules = ($modules_networkmap_no_proc + $modules_others + $modules_boolean);
// ----------------------------------------------------------------------
if (empty($modules)) {
// Selected the first 6 modules.
$module_ids = array_keys($list_modules);
$module_ids = array_slice($module_ids, 0, 6);
$modules = $module_ids;
}
2015-06-25 10:07:53 +02:00
$table = new stdClass();
2015-04-15 09:45:13 +02:00
$table->width = '100%';
2015-04-21 17:26:20 +02:00
$table->class = 'databox filters';
2015-04-21 17:26:20 +02:00
$table->style[0] = 'font-weight: bolder; text-align: left;';
2015-06-12 15:50:46 +02:00
$table->size[0] = '10%';
$table->style[1] = 'font-weight: bolder; text-align: left;';
$table->size[1] = '15%';
2015-04-21 17:26:20 +02:00
$table->style[2] = 'font-weight: bolder; text-align: left;';
2015-06-12 15:50:46 +02:00
$table->size[2] = '10%';
$table->style[3] = 'font-weight: bolder; text-align: left;';
$table->size[3] = '20%';
2015-06-12 15:50:46 +02:00
$table->rowspan[0][0] = 7;
$table->rowspan[0][1] = 7;
$table->data[0][0] = __('Modules');
$table->data[0][1] = html_print_select(
$list_modules,
'modules[]',
$modules,
'',
'',
0,
true,
true,
true,
'',
false,
'min-width:200px;max-width:460px;height: 200px;'
);
2015-06-12 15:50:46 +02:00
$table->rowspan[2][0] = 7;
$table->data[2][0] = '';
2015-06-12 15:50:46 +02:00
$table->data[2][1] = __('Begin date');
$table->data[2][2] = html_print_input_text('start_date', substr($start_date, 0, 10), '', 10, 40, true);
$table->data[2][2] .= html_print_image(
'images/calendar_view_day.png',
true,
[
'class' => 'invert_filter',
'onclick' => "scwShow(scwID('text-start_date'),this);",
]
);
2015-06-12 15:50:46 +02:00
$table->data[3][1] = __('Time range');
$table->data[3][2] = html_print_extended_select_for_time('period', $period, '', '', 0, 7, true);
$table->data[4][2] = __('Show events');
$table->data[4][3] = html_print_checkbox('draw_events', 1, (bool) $draw_events, true);
$table->data[5][2] = __('Show alerts').ui_print_help_tip(__('the combined graph does not show the alerts into this graph'), true);
$table->data[5][3] = html_print_checkbox('draw_alerts', 1, (bool) $draw_alerts, true);
$table->data[6][2] = __('Show as one combined graph');
$graph_option_one_or_several = [
0 => __('several graphs for each module'),
1 => __('One combined graph'),
];
$table->data[6][3] = html_print_select($graph_option_one_or_several, 'combined', $combined, '', '', 1, true);
$table->data[7][2] = __('Chart type');
if ($combined == 1) {
$graph_option_type = [
0 => __('Area'),
1 => __('Area stack'),
2 => __('Line'),
3 => __('Line stack'),
];
} else {
$graph_option_type = [
0 => __('Area'),
2 => __('Line'),
];
}
$table->data[7][3] = html_print_select($graph_option_type, 'option_type', $option_type, '', '', 1, true);
$htmlForm = '<form method="post" action="index.php?sec=estado&sec2=operation/agentes/ver_agente&tab=graphs&id_agente='.$id_agente.'" >';
2011-04-27 Juan Manuel Ramon <juanmanuel.ramon@artica.es> * include/functions_graph.php include/functions_users.php include/functions_events.php include/functions_html.php include/functions_menu.php include/styles/pandora.css include/graphs/functions_pchart.php include/functions_messages.php include/functions_exportserver.php include/functions_modules.php include/functions_reporting.php include/functions_filemanager.php include/functions_groups.php include/functions_gis.php include/functions_networkmap.php include/functions_servers.php include/functions_network_components.php include/functions_visual_map.php include/ajax/skins.ajax.php include/ajax/visual_console_builder.ajax.php include/help/en/help_gis_map_builder.php include/help/en/help_agent_status.php include/help/en/help_eventview.php include/help/en/help_configure_gis_map.php include/help/en/help_cascade_protection.php include/help/en/help_setup_gis_index.php include/help/es/help_gis_map_builder.php include/help/es/help_agent_status.php include/help/es/help_eventview.php include/help/es/help_configure_gis_map.php include/help/es/help_cascade_protection.php include/help/ja/help_gis_map_builder.php include/help/ja/help_agent_status.php include/help/ja/help_eventview.php include/help/ja/help_configure_gis_map.php include/help/ja/help_cascade_protection.php include/help/ja/help_setup_gis_index.php include/functions_ui.php include/functions_incidents.php include/functions.php include/functions_agents.php include/functions_db.php include/functions_fsgraph.php include/functions_extensions.php include/functions_ui_renders.php extensions/insert_data.php extensions/system_info.php extensions/extension_uploader.php extensions/agents_modules.php extensions/dbmanager.php extensions/resource_registration.php extensions/resource_exportation.php extensions/users_connected.php extensions/module_groups.php extensions/update_manager/settings.php extensions/update_manager/main.php operation/incidents/incident.incident.php operation/incidents/incident.php operation/incidents/incident.files.php operation/incidents/incident.tracking.php operation/incidents/incident_detail.php operation/incidents/incident.workunits.php operation/incidents/incident.list.php operation/search_modules.php operation/extensions.php operation/visual_console/render_view.php operation/visual_console/index.php operation/agentes/status_monitor.php operation/agentes/estado_ultimopaquete.php operation/agentes/datos_agente.php operation/agentes/alerts_status.php operation/agentes/estado_generalagente.php operation/agentes/custom_fields.php operation/agentes/estado_agente.php operation/agentes/networkmap.topology.php operation/agentes/alerts_status.functions.php operation/agentes/networkmap.groups.php operation/agentes/sla_view.php operation/agentes/exportdata.php operation/agentes/gis_view.php operation/agentes/estado_monitores.php operation/agentes/ver_agente.php operation/agentes/graphs.php operation/agentes/tactical.php operation/agentes/group_view.php operation/agentes/networkmap.php operation/agentes/stat_win.php operation/servers/view_server.php operation/servers/view_server_detail.php operation/search_agents.php operation/search_graphs.php operation/snmpconsole/snmp_view.php operation/users/user_edit.php operation/integria_incidents/incident.incident.php operation/integria_incidents/incident.php operation/integria_incidents/incident.files.php operation/integria_incidents/incident.tracking.php operation/integria_incidents/incident_detail.php operation/integria_incidents/incident.workunits.php operation/integria_incidents/incident.list.php operation/gis_maps/render_view.php operation/gis_maps/ajax.php operation/gis_maps/index.php operation/events/export_csv.php operation/events/sound_events.php operation/events/events_validate.php operation/events/events_list.php operation/events/events.php operation/search_alerts.php operation/messages/message.php operation/reporting/reporting_xml.php operation/reporting/reporting_viewer.php operation/reporting/graph_viewer.php operation/reporting/custom_reporting.php operation/search_reports.php operation/search_maps.php operation/search_results.php operation/search_users.php mobile/operation/agents/monitor_status.php mobile/operation/agents/view_agents.php mobile/operation/agents/tactical.php mobile/operation/agents/view_alerts.php mobile/operation/agents/group_view.php mobile/operation/events/events.php mobile/operation/servers/view_servers.php mobile/include/user.class.php general/pandora_help.php general/noaccess.php general/login_page.php general/logon_ok.php general/logoff.php general/ui/agents_list.php general/header.php godmode/groups/modu_group_list.php godmode/groups/configure_group.php godmode/groups/configure_modu_group.php godmode/groups/group_list.php godmode/admin_access_logs.php godmode/extensions.php godmode/db/db_sanity.php godmode/db/db_refine.php godmode/db/db_info.php godmode/db/db_event.php godmode/db/db_purge.php godmode/agentes/agent_template.php godmode/agentes/module_manager_editor_common.php godmode/agentes/module_manager_editor_network.php godmode/agentes/fields_manager.php godmode/agentes/module_manager_editor_wmi.php godmode/agentes/module_manager_editor_plugin.php godmode/agentes/agent_conf_gis.php godmode/agentes/module_manager_editor_prediction.php godmode/agentes/module_manager.php godmode/agentes/modificar_agente.php godmode/agentes/configurar_agente.php godmode/agentes/configure_field.php godmode/agentes/module_manager_editor.php godmode/agentes/planned_downtime.php godmode/agentes/manage_config_remote.php godmode/agentes/agent_manager.php godmode/servers/recon_script.php godmode/servers/plugin.php godmode/servers/manage_recontask.php godmode/servers/modificar_server.php godmode/servers/manage_recontask_form.php godmode/alerts/alert_list.list.php godmode/alerts/configure_alert_compound.php godmode/alerts/alert_compounds.php godmode/alerts/alert_list.php godmode/alerts/configure_alert_template.php godmode/alerts/alert_templates.php godmode/alerts/configure_alert_action.php godmode/alerts/configure_alert_command.php godmode/alerts/alert_actions.php godmode/alerts/alert_list.builder.php godmode/alerts/alert_commands.php godmode/snmpconsole/snmp_alert.php godmode/snmpconsole/snmp_filters.php godmode/setup/file_manager.php godmode/setup/os.list.php godmode/setup/news.php godmode/setup/gis_step_2.php godmode/setup/links.php godmode/setup/setup.php godmode/setup/os.php godmode/setup/performance.php godmode/setup/setup_auth.php godmode/setup/gis.php godmode/setup/os.builder.php godmode/setup/setup_visuals.php godmode/users/user_list.php godmode/users/configure_user.php godmode/users/configure_profile.php godmode/gis_maps/configure_gis_map.php godmode/gis_maps/index.php godmode/massive/massive_add_alerts.php godmode/massive/massive_copy_modules.php godmode/massive/massive_delete_agents.php godmode/massive/massive_enable_disable_alerts.php godmode/massive/massive_operations.php godmode/massive/massive_delete_profiles.php godmode/massive/massive_edit_agents.php godmode/massive/massive_delete_action_alerts.php godmode/massive/massive_delete_modules.php godmode/massive/massive_add_profiles.php godmode/massive/massive_delete_alerts.php godmode/massive/massive_edit_modules.php godmode/massive/massive_standby_alerts.php godmode/massive/massive_add_action_alerts.php godmode/modules/manage_network_components_form.php godmode/modules/manage_nc_groups_form.php godmode/modules/manage_network_templates.php godmode/modules/module_list.php godmode/modules/manage_network_components_form_common.php godmode/modules/manage_network_components_form_network.php godmode/modules/manage_network_templates_form.php godmode/modules/manage_network_components_form_wmi.php godmode/modules/manage_network_components.php godmode/modules/manage_nc_groups.php godmode/modules/manage_network_components_form_plugin.php godmode/reporting/reporting_builder.list_items.php godmode/reporting/graph_builder.main.php godmode/reporting/visual_console_builder.wizard.php godmode/reporting/visual_console_builder.php godmode/reporting/reporting_builder.preview.php godmode/reporting/reporting_builder.main.php godmode/reporting/visual_console_builder.data.php godmode/reporting/visual_console_builder.elements.php godmode/reporting/graph_builder.php godmode/reporting/graph_builder.graph_editor.php godmode/reporting/reporting_builder.php godmode/reporting/visual_console_builder.editor.php godmode/reporting/reporting_builder.item_editor.php godmode/reporting/map_builder.php godmode/reporting/graphs.php godmode/reporting/graph_builder.preview.php: Now functions on functions_html.php, functions_gis.php, functions_filemanager.php, functions_exportserver.php have "html_", "gis_", "filemanager_" and "exportserver_" prefix respectively. git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@4281 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2011-04-27 15:43:31 +02:00
$htmlForm .= html_print_table($table, true);
$htmlForm .= html_print_input_hidden('filter', 1, true);
$htmlForm .= '<div class="action-buttons" style="width: '.$table->width.'">';
if (check_acl($config['id_user'], 0, 'RW') || check_acl($config['id_user'], 0, 'RM')) {
$htmlForm .= html_print_button(
__('Save as custom graph'),
'save_custom_graph',
false,
'',
'class="sub add" ',
true
);
}
$htmlForm .= '&nbsp;&nbsp;'.html_print_submit_button(__('Filter'), 'filter_button', false, 'class="sub upd" ', true);
$htmlForm .= '</div>';
$htmlForm .= '</form>';
2019-06-04 13:57:55 +02:00
ui_toggle($htmlForm, __('Filter graphs'), __('Toggle filter(s)'), '', false);
$utime = get_system_time();
$current = date('Y-m-d', $utime);
if ($start_date != $current) {
$date = strtotime($start_date);
} else {
$date = $utime;
}
if ($combined) {
// Pass the $modules before the ajax call
echo '<div class="combined-graph-container center w100p"'.'data-period="'.$period.'"'.'data-stacked="'.CUSTOM_GRAPH_LINE.'"'.'data-date="'.$date.'"'.'data-height="'.$height.'"'.'>'.html_print_image('images/spinner.gif', true).'</div>';
} else {
foreach ($modules as $id_module) {
$title = modules_get_agentmodule_name($id_module);
$unit = modules_get_unit($id_module);
echo '<h4>'.$title.'</h4>';
echo '<div class="sparse-graph-container center w100p"'.'data-id_module="'.$id_module.'"'.'data-period="'.$period.'"'.'data-draw_events="'.(int) $draw_events.'"'.'data-title="'.$title.'"'.'data-draw_alerts="'.(int) $draw_alerts.'"'.'data-date="'.$date.'"'.'data-unit="'.$unit.'"'.'data-date="'.$date.'"'.'data-height="'.$height.'"'.'>'.html_print_image('images/spinner.gif', true).'</div>';
}
}
echo "<div class='both'></div>";
echo '<div id="graph-error-message" class="invisible">';
ui_print_error_message(__('There was an error loading the graph'));
echo '</div>';
// Dialog to save the custom graph
echo "<div id='dialog_save_custom_graph' class='invisible'>";
2018-11-21 16:28:43 +01:00
$table = new stdClass();
2015-04-15 09:45:13 +02:00
$table->width = '100%';
$table->style[0] = 'font-weight: bolder; text-align: right;';
$table->data[0][0] = __('Name custom graph');
$table->data[0][1] = html_print_input_text(
'name_custom_graph',
'',
__('Name custom graph'),
30,
50,
true
);
html_print_table($table);
echo "<div style='width: ".$table->width."; text-align: right;'>";
html_print_image(
'images/spinner.gif',
false,
[
'style' => 'display: none',
'class' => 'loading_save',
]
);
html_print_image(
'images/ok.png',
false,
[
'style' => 'display: none',
'class' => 'ok_save',
]
);
html_print_image(
'images/error_red.png',
false,
[
'style' => 'display: none',
'class' => 'error_save',
]
);
html_print_button(
__('Save'),
'save_custom_graph',
false,
'save_custom_graph_second_step();',
'class="button_save sub save"'
);
echo '</div>';
echo '</div>';
?>
<script type="text/javascript">
$(document).ready(function() {
$("#dialog_save_custom_graph").dialog({
title: "<?php echo __('Save custom graph'); ?>",
height: 200,
width: 500,
modal: true,
autoOpen: false
});
});
$('#button-save_custom_graph').click(function (event) {
$("#dialog_save_custom_graph").dialog("open");
});
function save_custom_graph_second_step() {
$(".button_save").disable();
$(".ok_save").hide();
$(".error_save").hide();
$(".loading_save").show();
var params = {};
params["id_modules"] = <?php echo json_encode($modules); ?>;
params["name"] = $("input[name='name_custom_graph']").val();
params["description"] = "<?php echo __('Custom graph create from the tab graphs in the agent.'); ?>";
params["stacked"] = <?php echo CUSTOM_GRAPH_LINE; ?>;
params["width"] = <?php echo $width; ?>;
params["height"] = <?php echo $height; ?>;
params["events"] = <?php echo $draw_events; ?>;
params["period"] = <?php echo $period; ?>;
params["save_custom_graph"] = 1;
params["page"] = "include/ajax/graph.ajax";
jQuery.ajax ({
data: params,
dataType: "json",
type: "POST",
url: "ajax.php",
success: function (data) {
$(".loading_save").hide();
if (data.correct) {
$(".ok_save").show();
}
else {
$(".error_save").show();
$(".button_save").enable();
}
}
});
}
// Load graphs
$(document).ready(function() {
$('#combined').change(function () {
if ($('#combined').val() == 1) {
$('#option_type').empty();
$('#option_type').append($('<option>', {
value: 0,
text: "<?php echo __('Area'); ?>"
}));
$('#option_type').append($('<option>', {
value: 1,
text: "<?php echo __('Area stack'); ?>"
}));
$('#option_type').append($('<option>', {
value: 2,
text: "<?php echo __('Line'); ?>"
}));
$('#option_type').append($('<option>', {
value: 3,
text: "<?php echo __('Line stack'); ?>"
}));
}
else {
$('#option_type').empty();
$('#option_type').append($('<option>', {
value: 0,
text: "<?php echo __('Area'); ?>"
}));
$('#option_type').append($('<option>', {
value: 2,
text: "<?php echo __('Line'); ?>"
}));
}
});
var getModulesPHP = function () {
return <?php echo json_encode($modules); ?>;
}
var requestGraph = function (type, data) {
data = data || {};
type = type || 'custom';
data.page = 'include/ajax/graph.ajax';
data['print_' + type + '_graph'] = 1;
return $.ajax({
url: 'ajax.php',
type: 'POST',
dataType: 'html',
data: data
})
}
var requestCustomGraph = function (graphId, width, height, period, stacked, date, modules) {
return requestGraph('custom', {
page: 'include/ajax/graph.ajax',
print_custom_graph: 1,
id_graph: graphId,
height: height,
width: width,
period: period,
stacked: stacked,
date: date,
modules_param: modules
});
}
var requestSparseGraph = function (moduleId, period, showEvents, width, height, title, showAlerts, date, unit, type_g) {
return requestGraph('sparse', {
page: 'include/ajax/graph.ajax',
print_sparse_graph: 1,
agent_module_id: moduleId,
period: period,
show_events: showEvents,
width: width,
height: height,
title: title,
show_alerts: showAlerts,
date: date,
unit: unit,
type_g: type_g
});
}
var loadCustomGraphs = function () {
$('div.combined-graph-container').each(function (index, el) {
loadCustomGraph(el);
});
}
var loadCustomGraph = function (element) {
var $container = $(element);
var $errorMessage = $('div#graph-error-message');
var period = $container.data('period');
var conf_stacked = parseInt($("#option_type").val());
switch (conf_stacked) {
case 0:
var stacked = 0;
break;
case 1:
var stacked = 1;
break;
case 2:
var stacked = 2;
break;
case 3:
var stacked = 3;
break;
}
var date = $container.data('date');
var height = $container.data('height');
var modules = getModulesPHP();
var width = $container.width() - 20;
var handleSuccess = function (data) {
$container.html(data);
}
var handleError = function (xhr, textStatus, errorThrown) {
$container.html($errorMessage.html());
}
2021-03-08 17:48:59 +01:00
requestCustomGraph(0, -1, height, period, stacked, date, modules)
.done(handleSuccess)
.fail(handleError);
}
var loadSparseGraphs = function () {
$('div.sparse-graph-container').each(function (index, el) {
loadSparseGraph(el);
});
}
var loadSparseGraph = function (element) {
var $container = $(element);
var $errorMessage = $('div#graph-error-message');
var moduleId = $container.data('id_module');
var period = $container.data('period');
var showEvents = $container.data('draw_events');
var title = $container.data('title');
var showAlerts = $container.data('draw_alerts');
var date = $container.data('date');
var unit = $container.data('unit');
var date = $container.data('date');
var height = $container.data('height');
var conf_stacked = parseInt($("#option_type").val());
switch (conf_stacked) {
case 0:
var type_g = 'area';
break;
case 2:
var type_g = 'line';
break;
}
var width = $container.width() - 20;
var handleSuccess = function (data) {
$container.html(data);
}
var handleError = function (xhr, textStatus, errorThrown) {
$container.html($errorMessage.html());
}
requestSparseGraph(moduleId, period, showEvents, width, height, title, showAlerts, date, unit, type_g)
.done(handleSuccess)
.fail(handleError);
}
// Run
loadCustomGraphs();
loadSparseGraphs();
});
</script>