2010-09-13 12:26:33 +02:00
< ? php
// Pandora FMS - http://pandorafms.com
// ==================================================
2020-11-27 13:52:35 +01:00
// Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
2010-09-13 12:26:33 +02:00
// 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 ;
2019-01-30 16:18:44 +01:00
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 ;
2010-09-13 12:26:33 +02:00
}
2019-01-30 16:18:44 +01:00
require_once $config [ 'homedir' ] . '/include/functions_graph.php' ;
2010-09-13 12:26:33 +02:00
2019-01-30 16:18:44 +01:00
$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' , []);
2010-09-13 12:26:33 +02:00
$filter = get_parameter ( 'filter' , 0 );
2017-10-05 10:48:14 +02:00
$combined = get_parameter ( 'combined' , 1 );
$option_type = get_parameter ( 'option_type' , 0 );
2011-05-25 11:57:05 +02:00
2019-01-30 16:18:44 +01:00
// ----------------------------------------------------------------------
2014-09-16 12:25:40 +02:00
// Get modules of agent sorted as:
2019-01-30 16:18:44 +01:00
// - modules network no proc
// - modules network proc
// - others
// ----------------------------------------------------------------------
$list_modules = [];
2014-09-16 12:25:40 +02:00
$modules_networkmap_no_proc = agents_get_modules (
2019-01-30 16:18:44 +01:00
$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 = [];
}
2014-09-16 12:25:40 +02:00
$modules_others = agents_get_modules (
2019-01-30 16:18:44 +01:00
$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 = [];
}
2017-05-10 13:29:03 +02:00
$modules_boolean = agents_get_modules (
2019-01-30 16:18:44 +01:00
$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
);
2014-09-16 12:25:40 +02:00
foreach ( $modules_others as $i => $m ) {
2019-01-30 16:18:44 +01:00
$modules_others [ $i ] = [
'optgroup' => __ ( 'Other modules' ),
'name' => $m ,
];
2010-09-13 12:26:33 +02:00
}
2019-01-30 16:18:44 +01:00
2014-09-16 12:25:40 +02:00
foreach ( $modules_networkmap_no_proc as $i => $m ) {
2019-01-30 16:18:44 +01:00
$modules_networkmap_no_proc [ $i ] = [
'optgroup' => __ ( 'Modules network no proc' ),
'name' => $m ,
];
2014-09-16 12:25:40 +02:00
}
2019-01-30 16:18:44 +01:00
2017-05-10 13:29:03 +02:00
foreach ( $modules_boolean as $i => $m ) {
2019-01-30 16:18:44 +01:00
$modules_boolean [ $i ] = [
'optgroup' => __ ( 'Modules boolean' ),
'name' => $m ,
];
2017-05-10 13:29:03 +02:00
}
2014-09-16 12:25:40 +02:00
2010-09-13 12:26:33 +02:00
2019-01-30 16:18:44 +01:00
$list_modules = ( $modules_networkmap_no_proc + $modules_others + $modules_boolean );
// ----------------------------------------------------------------------
2014-09-16 12:25:40 +02:00
if ( empty ( $modules )) {
2019-01-30 16:18:44 +01:00
// Selected the first 6 modules.
$module_ids = array_keys ( $list_modules );
$module_ids = array_slice ( $module_ids , 0 , 6 );
$modules = $module_ids ;
2014-09-16 12:25:40 +02:00
}
2010-09-13 12:26:33 +02:00
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' ;
2010-09-13 12:26:33 +02:00
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%' ;
2010-09-13 12:26:33 +02:00
2015-06-12 15:50:46 +02:00
$table -> rowspan [ 0 ][ 0 ] = 7 ;
$table -> rowspan [ 0 ][ 1 ] = 7 ;
2014-03-10 16:59:36 +01:00
2010-09-13 12:26:33 +02:00
$table -> data [ 0 ][ 0 ] = __ ( 'Modules' );
2019-01-30 16:18:44 +01:00
$table -> data [ 0 ][ 1 ] = html_print_select (
$list_modules ,
'modules[]' ,
$modules ,
'' ,
'' ,
0 ,
true ,
true ,
true ,
'' ,
false ,
'min-width:200px;max-width:460px;height: 200px;'
);
2010-09-13 12:26:33 +02:00
2015-06-12 15:50:46 +02:00
$table -> rowspan [ 2 ][ 0 ] = 7 ;
2019-01-30 16:18:44 +01:00
$table -> data [ 2 ][ 0 ] = '' ;
2010-09-13 12:26:33 +02:00
2015-06-12 15:50:46 +02:00
$table -> data [ 2 ][ 1 ] = __ ( 'Begin date' );
2019-01-30 16:18:44 +01:00
$table -> data [ 2 ][ 2 ] = html_print_input_text ( 'start_date' , substr ( $start_date , 0 , 10 ), '' , 10 , 40 , true );
2021-03-11 15:40:23 +01:00
$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
2016-06-07 11:39:47 +02:00
$table -> data [ 3 ][ 1 ] = __ ( 'Time range' );
2010-09-13 12:26:33 +02:00
2016-06-07 11:39:47 +02:00
$table -> data [ 3 ][ 2 ] = html_print_extended_select_for_time ( 'period' , $period , '' , '' , 0 , 7 , true );
2012-03-15 17:03:51 +01:00
2016-06-07 11:39:47 +02:00
$table -> data [ 4 ][ 2 ] = __ ( 'Show events' );
2019-01-30 16:18:44 +01:00
$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 );
2016-06-07 11:39:47 +02:00
$table -> data [ 6 ][ 2 ] = __ ( 'Show as one combined graph' );
2019-01-30 16:18:44 +01:00
$graph_option_one_or_several = [
0 => __ ( 'several graphs for each module' ),
1 => __ ( 'One combined graph' ),
];
2017-10-05 10:48:14 +02:00
$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 ) {
2019-01-30 16:18:44 +01:00
$graph_option_type = [
0 => __ ( 'Area' ),
1 => __ ( 'Area stack' ),
2 => __ ( 'Line' ),
3 => __ ( 'Line stack' ),
];
} else {
$graph_option_type = [
0 => __ ( 'Area' ),
2 => __ ( 'Line' ),
];
2017-10-05 10:48:14 +02:00
}
2019-01-30 16:18:44 +01:00
2017-10-05 10:48:14 +02:00
$table -> data [ 7 ][ 3 ] = html_print_select ( $graph_option_type , 'option_type' , $option_type , '' , '' , 1 , true );
2010-09-13 12:26:33 +02:00
2019-01-30 16:18:44 +01:00
$htmlForm = '<form method="post" action="index.php?sec=estado&sec2=operation/agentes/ver_agente&tab=graphs&id_agente=' . $id_agente . '" >' ;
2011-04-27 15:43:31 +02:00
$htmlForm .= html_print_table ( $table , true );
$htmlForm .= html_print_input_hidden ( 'filter' , 1 , true );
2010-09-13 12:26:33 +02:00
$htmlForm .= '<div class="action-buttons" style="width: ' . $table -> width . '">' ;
2019-08-29 11:27:40 +02:00
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 ,
'' ,
2021-03-11 15:40:23 +01:00
'class="sub add" ' ,
2019-08-29 11:27:40 +02:00
true
);
}
2021-03-11 15:40:23 +01:00
$htmlForm .= ' ' . html_print_submit_button ( __ ( 'Filter' ), 'filter_button' , false , 'class="sub upd" ' , true );
2010-09-13 12:26:33 +02:00
$htmlForm .= '</div>' ;
$htmlForm .= '</form>' ;
2019-06-04 13:57:55 +02:00
ui_toggle ( $htmlForm , __ ( 'Filter graphs' ), __ ( 'Toggle filter(s)' ), '' , false );
2010-09-13 12:26:33 +02:00
2019-01-30 16:18:44 +01:00
$utime = get_system_time ();
$current = date ( 'Y-m-d' , $utime );
2010-09-13 12:26:33 +02:00
2019-01-30 16:18:44 +01:00
if ( $start_date != $current ) {
$date = strtotime ( $start_date );
} else {
$date = $utime ;
}
2010-09-13 12:26:33 +02:00
2014-09-16 12:25:40 +02:00
if ( $combined ) {
2019-01-30 16:18:44 +01:00
// Pass the $modules before the ajax call
2021-03-11 15:40:23 +01:00
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>' ;
2019-01-30 16:18:44 +01:00
} else {
foreach ( $modules as $id_module ) {
$title = modules_get_agentmodule_name ( $id_module );
$unit = modules_get_unit ( $id_module );
echo '<h4>' . $title . '</h4>' ;
2021-03-11 15:40:23 +01:00
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>' ;
2019-01-30 16:18:44 +01:00
}
2010-09-13 12:26:33 +02:00
}
2021-03-11 15:40:23 +01:00
echo " <div class='both'></div> " ;
2014-09-16 12:25:40 +02:00
2021-03-11 15:40:23 +01:00
echo '<div id="graph-error-message" class="invisible">' ;
2016-06-07 11:39:47 +02:00
ui_print_error_message ( __ ( 'There was an error loading the graph' ));
echo '</div>' ;
2019-01-30 16:18:44 +01:00
// Dialog to save the custom graph
2021-03-11 15:40:23 +01:00
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%' ;
2014-09-16 12:25:40 +02:00
$table -> style [ 0 ] = 'font-weight: bolder; text-align: right;' ;
$table -> data [ 0 ][ 0 ] = __ ( 'Name custom graph' );
2019-01-30 16:18:44 +01:00
$table -> data [ 0 ][ 1 ] = html_print_input_text (
'name_custom_graph' ,
'' ,
__ ( 'Name custom graph' ),
30 ,
50 ,
true
);
2014-09-16 12:25:40 +02:00
html_print_table ( $table );
2019-01-30 16:18:44 +01:00
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>' ;
?>
2014-09-16 12:25:40 +02:00
< script type = " text/javascript " >
2019-01-30 16:18:44 +01:00
$ ( 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 )
2019-01-30 16:18:44 +01:00
. 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 ();
});
2016-06-07 11:39:47 +02:00
</ script >