diff --git a/pandora_console/include/ajax/graph.ajax.php b/pandora_console/include/ajax/graph.ajax.php
new file mode 100644
index 0000000000..60ed82cc5c
--- /dev/null
+++ b/pandora_console/include/ajax/graph.ajax.php
@@ -0,0 +1,41 @@
+
diff --git a/pandora_console/include/functions_custom_graphs.php b/pandora_console/include/functions_custom_graphs.php
index 3d1994f1c1..41b28bb872 100644
--- a/pandora_console/include/functions_custom_graphs.php
+++ b/pandora_console/include/functions_custom_graphs.php
@@ -28,6 +28,64 @@ global $config;
require_once ($config['homedir'] . '/include/functions_graph.php');
require_once ($config['homedir'] . '/include/functions_users.php');
+function custom_graphs_create($id_modules = array(), $name = "",
+ $description = "", $stacked = CUSTOM_GRAPH_AREA, $width = 0,
+ $height = 0, $events = 0 , $period = 0, $private = 0, $id_group = 0,
+ $user = false) {
+
+ global $config;
+
+ if ($user === false) {
+ $user = $config['id_user'];
+ }
+
+ $id_graph = db_process_sql_insert('tgraph',
+ array(
+ 'id_user' => $user,
+ 'name' => $name,
+ 'description' => $description,
+ 'period' => $period,
+ 'width' => $width,
+ 'height' => $height,
+ 'private' => $private,
+ 'events' => $events,
+ 'stacked' => $stacked,
+ 'id_group' => $id_group,
+ 'id_graph_template' => 0
+ ));
+
+ if (empty($id_graph)) {
+ return false;
+ }
+ else {
+ $result = true;
+ foreach ($id_modules as $id_module) {
+ $result = db_process_sql_insert('tgraph_source',
+ array(
+ 'id_graph' => $id_graph,
+ 'id_agent_module' => $id_module,
+ 'weight' => 1
+ ));
+
+ if (empty($result))
+ break;
+ }
+
+ if (empty($result)) {
+ //Not it is a complete insert the modules. Delete all
+ db_process_sql_delete('tgraph_source',
+ array('id_graph' => $id_graph));
+
+ db_process_sql_delete('tgraph',
+ array('id_graph' => $id_graph));
+
+ return false;
+ }
+
+ return $id_graph;
+ }
+}
+
/**
* Get all the custom graphs a user can see.
*
@@ -94,33 +152,69 @@ function custom_graphs_get_user ($id_user = 0, $only_names = false, $returnAllGr
function custom_graphs_print($id_graph, $height, $width, $period,
$stacked = null, $return = false, $date = 0, $only_image = false,
- $background_color = 'white') {
+ $background_color = 'white', $modules_param = array()) {
+
global $config;
- $graph_conf = db_get_row('tgraph', 'id_graph', $id_graph);
+ if ($id_graph == 0) {
+ $graph_conf['stacked'] = CUSTOM_GRAPH_LINE;
+ }
+ else {
+ $graph_conf = db_get_row('tgraph', 'id_graph', $id_graph);
+ }
if ($stacked === null) {
$stacked = $graph_conf['stacked'];
}
- $sources = db_get_all_rows_field_filter('tgraph_source', 'id_graph',
- $id_graph);
- $modules = array ();
- $weights = array ();
+ $sources = false;
+ if ($id_graph == 0) {
+ $modules = $modules_param;
+ $count_modules = count($modules);
+ $weights = array_fill(0, $count_modules, 1);
+
+ if ($count_modules > 0)
+ $sources = true;
+ }
+ else {
+ $sources = db_get_all_rows_field_filter('tgraph_source', 'id_graph',
+ $id_graph);
+
+ $modules = array ();
+ $weights = array ();
+ foreach ($sources as $source) {
+ array_push ($modules, $source['id_agent_module']);
+ array_push ($weights, $source['weight']);
+ }
+ }
+
+
if ($sources === false) {
echo "
" . __('Empty graph') . "
";
return;
}
- foreach ($sources as $source) {
- array_push ($modules, $source['id_agent_module']);
- array_push ($weights, $source['weight']);
- }
- $output = graphic_combined_module($modules, $weights, $period,
- $width, $height, '', '', 0, 0, 0, $stacked, $date, $only_image,
- '', 1, false, false, $background_color);
+
+ $output = graphic_combined_module($modules,
+ $weights,
+ $period,
+ $width,
+ $height,
+ '',
+ '',
+ 0,
+ 0,
+ 0,
+ $stacked,
+ $date,
+ $only_image,
+ '',
+ 1,
+ false,
+ false,
+ $background_color);
if ($return)
return $output;
diff --git a/pandora_console/include/functions_graph.php b/pandora_console/include/functions_graph.php
index 9b9b1c6478..3813ae71f5 100755
--- a/pandora_console/include/functions_graph.php
+++ b/pandora_console/include/functions_graph.php
@@ -745,7 +745,7 @@ function grafico_modulo_sparse ($agent_module_id, $period, $show_events,
$projection, $adapt_key, $compare,
$series_suffix, $series_suffix_str, $show_unknown);
- switch($compare) {
+ switch ($compare) {
case 'separated':
// Store the chart calculated
$chart_prev = $chart;
diff --git a/pandora_console/include/functions_html.php b/pandora_console/include/functions_html.php
index bedbdefdca..d6237837df 100644
--- a/pandora_console/include/functions_html.php
+++ b/pandora_console/include/functions_html.php
@@ -481,7 +481,7 @@ function html_print_select ($fields, $name, $selected = '', $script = '',
$lastopttype = '';
foreach ($fields as $value => $label) {
$optlabel = $label;
- if(is_array($label)) {
+ if (is_array($label)) {
if (isset($label['optgroup'])) {
if ($label['optgroup'] != $lastopttype) {
if ($lastopttype != '') {
diff --git a/pandora_console/operation/agentes/graphs.php b/pandora_console/operation/agentes/graphs.php
index 478581c650..35e94c148b 100644
--- a/pandora_console/operation/agentes/graphs.php
+++ b/pandora_console/operation/agentes/graphs.php
@@ -17,6 +17,7 @@
global $config;
require_once ("include/functions_agents.php");
+require_once ("include/functions_custom_graphs.php");
if (! check_acl ($config['id_user'], $id_grupo, "AR")) {
db_pandora_audit("ACL Violation",
@@ -36,65 +37,123 @@ $label = get_parameter ("label", "");
$start_date = get_parameter ("start_date", date("Y-m-d"));
$draw_events = get_parameter ("draw_events", 0);
$zoom = get_parameter ("zoom", 1);
-$modulesChecked = get_parameter('modules', array());
+$modules = get_parameter('modules', array());
$filter = get_parameter('filter', 0);
+$combined = (bool)get_parameter('combined', 1);
-$unit = "";
-$modules = agents_get_modules($id_agente);
+//----------------------------------------------------------------------
+// Get modules of agent sorted as:
+// - modules network no proc
+// - modules network proc
+// - others
+//----------------------------------------------------------------------
+$list_modules = array();
-if (!$filter) {
- foreach ($modules as $id => $module) {
- $modulesChecked[$id] = 1;
- }
+$modules_networkmap_no_proc = agents_get_modules(
+ $id_agente, false, array(
+ 'id_modulo' => 2, // networkmap type
+ 'id_tipo_modulo' => array(
+ '<>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 = array();
+
+$modules_others = agents_get_modules(
+ $id_agente, false, array(
+ 'id_tipo_modulo' => array(
+ '<>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 = array();
+
+//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] = array(
+ 'optgroup' => __('Other modules'),
+ 'name' => $m);
+}
+foreach ($modules_networkmap_no_proc as $i => $m) {
+ $modules_networkmap_no_proc[$i] = array(
+ 'optgroup' => __('Modules network no proc'),
+ 'name' => $m);
}
+$list_modules = $modules_networkmap_no_proc +
+ $modules_others;
+//----------------------------------------------------------------------
+
+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;
+}
+
$table = null;
$table->width = '98%';
-$table->size = array();
-$table->size[0] = '20%';
-$table->size[1] = '80%';
-
$table->style[0] = 'font-weight: bolder; text-align: right;';
$table->style[1] = '';
+$table->style[2] = 'font-weight: bolder; text-align: right;';
$table->valign[0] = 'top';
+$table->valign[1] = 'top';
+$table->valign[2] = 'top';
+$table->valign[3] = 'top';
+
+$table->rowspan[0][0] = 6;
+$table->rowspan[0][1] = 6;
$table->data[0][0] = __('Modules');
-$listModules = array();
-foreach ($modules as $id => $module) {
- $checked = false;
- if (isset($modulesChecked[$id]))
- $checked = (bool) $modulesChecked[$id];
- $listModules[] = '' .
- html_print_checkbox('modules[' . $id . ']', 1, $checked, true, false, '', true) .
- ' ' . $module . '';
-}
-$table->data[0][1] = implode(' ', $listModules);
+$table->data[0][1] = html_print_select($list_modules, 'modules[]',
+ $modules, '', '', 0, true, true,
+ true, '', false, "width: 100%; height: 200px;");
-$table->data[1][0] = __('Begin date');
-$table->data[1][1] = html_print_input_text ("start_date", substr ($start_date, 0, 10),'', 10, 40, true);
-$table->data[1][1] .= html_print_image ("images/calendar_view_day.png", true, array ("onclick" => "scwShow(scwID('text-start_date'),this);"));
+$table->data[0][2] = __('Begin date');
+$table->data[0][3] = html_print_input_text ("start_date", substr ($start_date, 0, 10),'', 10, 40, true);
+$table->data[0][3] .= html_print_image ("images/calendar_view_day.png", true, array ("onclick" => "scwShow(scwID('text-start_date'),this);"));
-$table->data[2][0] = __('Zoom factor');
+$table->data[1][2] = __('Zoom factor');
$options = array ();
-$options[$zoom] = 'x'.$zoom;
+$options[$zoom] = 'x' . $zoom;
$options[1] = 'x1';
$options[2] = 'x2';
$options[3] = 'x3';
$options[4] = 'x4';
-$table->data[2][1] = html_print_select ($options, "zoom", $zoom, '', '', 0, true);
+$table->data[1][3] = html_print_select ($options, "zoom", $zoom, '', '', 0, true);
-$table->data[3][0] = __('Time range');
+$table->data[2][2] = __('Time range');
-$table->data[3][1] = html_print_extended_select_for_time('period', $period, '', '', 0, 7, true);
+$table->data[2][3] = html_print_extended_select_for_time('period', $period, '', '', 0, 7, true);
-$table->data[4][0] = __('Show events');
-$table->data[4][1] = html_print_checkbox ("draw_events", 1, (bool) $draw_events, true);
-$table->data[5][0] = __('Show alerts');
-$table->data[5][1] = html_print_checkbox ("draw_alerts", 1, (bool) $draw_alerts, true);
+$table->data[3][2] = __('Show events');
+$table->data[3][3] = html_print_checkbox ("draw_events", 1, (bool) $draw_events, true);
+$table->data[4][2] = __('Show alerts') .
+ ui_print_help_tip(__('the combined graph does not show the alerts into this graph'), true);
+$table->data[4][3] = html_print_checkbox ("draw_alerts", 1, (bool) $draw_alerts, true);
+$table->data[5][2] = __('Show as one combined graph');
+$table->data[5][3] =
+ html_print_radio_button('combined', 1, __('one combined graph'),
+ $combined, true);
+$table->data[5][3] .=
+ html_print_radio_button('combined', 0, __('several graphs for each module'),
+ $combined, true);
$htmlForm = '';
-ui_toggle($htmlForm,__('Filter graphs'), __('Toggle filter(s)'));
+ui_toggle($htmlForm,__('Filter graphs'), __('Toggle filter(s)'), false);
$utime = get_system_time ();
$current = date("Y-m-d", $utime);
@@ -114,14 +173,127 @@ if ($start_date != $current)
else
$date = $utime;
-foreach ($modulesChecked as $idModuleShowGraph => $value) {
- echo "" . $modules[$idModuleShowGraph] . '
';
+if ($combined) {
+ echo "" . __('Combined graph') . '
';
- $unit = modules_get_unit ($idModuleShowGraph);
+ custom_graphs_print(0,
+ $height,
+ $width,
+ $period,
+ CUSTOM_GRAPH_LINE,
+ false,
+ $date,
+ false,
+ 'white',
+ $modules);
- echo grafico_modulo_sparse($idModuleShowGraph, $period, $draw_events, $width, $height,
- $modules[$idModuleShowGraph], null, $draw_alerts, $avg_only, false, $date, $unit);
+ echo "";
+ html_print_button(__('Save as custom graph'), 'save_custom_graph',
+ false, 'save_custom_graph();', 'class="sub save"');
+ echo "
";
+}
+else {
+ foreach ($modules as $id_module) {
+ $title = modules_get_agentmodule_name($id_module);
+
+ echo "" . $title . '
';
+
+ $unit = modules_get_unit ($id_module);
+
+ echo grafico_modulo_sparse($id_module,
+ $period,
+ $draw_events,
+ $width,
+ $height,
+ $title,
+ null,
+ $draw_alerts,
+ $avg_only,
+ false,
+ $date,
+ $unit);
+ }
}
echo "";
+
+//Dialog to save the custom graph
+echo "";
+$table = null;
+$table->width = '98%';
+$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 "
";
+ html_print_image('images/spinner.gif', false,
+ array('style' => 'display: none',
+ 'class' => 'loading_save'));
+ html_print_image('images/ok.png', false,
+ array('style' => 'display: none',
+ 'class' => 'ok_save'));
+ html_print_image('images/error_red.png', false,
+ array('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 "
";
+echo "
";
?>
+
\ No newline at end of file