Merge branch 'develop' of https://github.com/pandorafms/pandorafms into develop
This commit is contained in:
commit
0a78522d03
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
// Pandora FMS - http://pandorafms.com
|
||||
// ==================================================
|
||||
// Copyright (c) 2005-2012 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.
|
||||
|
||||
require_once ("include/functions_custom_graphs.php");
|
||||
|
||||
$save_custom_graph = (bool)get_parameter('save_custom_graph', 0);
|
||||
|
||||
if ($save_custom_graph) {
|
||||
$return = array();
|
||||
|
||||
$id_modules = (array)get_parameter('id_modules', array());
|
||||
$name = get_parameter('name', '');
|
||||
$description = get_parameter('description', '');
|
||||
$stacked = get_parameter('stacked', CUSTOM_GRAPH_LINE);
|
||||
$width = get_parameter('width', 0);
|
||||
$height = get_parameter('height', 0);
|
||||
$events = get_parameter('events', 0);
|
||||
$period = get_parameter('period', 0);
|
||||
|
||||
$result = (bool)custom_graphs_create($id_modules, $name,
|
||||
$description, $stacked, $width, $height, $events, $period);
|
||||
|
||||
|
||||
$return['correct'] = $result;
|
||||
|
||||
echo json_encode($return);
|
||||
return;
|
||||
}
|
||||
|
||||
?>
|
|
@ -941,7 +941,10 @@ function agents_get_group_agents ($id_group = 0, $search = false, $case = "lower
|
|||
* @return array An array with all modules in the agent.
|
||||
* If multiple rows are selected, they will be in an array
|
||||
*/
|
||||
function agents_get_modules ($id_agent = null, $details = false, $filter = false, $indexed = true, $get_not_init_modules = true, $noACLs = false) {
|
||||
function agents_get_modules ($id_agent = null, $details = false,
|
||||
$filter = false, $indexed = true, $get_not_init_modules = true,
|
||||
$noACLs = false) {
|
||||
|
||||
global $config;
|
||||
|
||||
$userGroups = users_get_groups($config['id_user'], 'AR', false);
|
||||
|
@ -1015,7 +1018,37 @@ function agents_get_modules ($id_agent = null, $details = false, $filter = false
|
|||
$where .= ' AND ';
|
||||
if (is_array ($filter)) {
|
||||
$fields = array ();
|
||||
|
||||
|
||||
//----------------------------------------------------------
|
||||
// Code for filters as array of arrays
|
||||
// for example:
|
||||
// $filter = array(
|
||||
// 'id_modulo' => 2, // networkmap type
|
||||
// 'id_tipo_modulo' => array(
|
||||
// '<>2', // != generic_proc
|
||||
// '<>6', // != remote_icmp_proc
|
||||
// '<>9'));
|
||||
//----------------------------------------------------------
|
||||
$list_filter = array();
|
||||
foreach ($filter as $field => $value) {
|
||||
if (is_array($value)) {
|
||||
foreach ($value as $v) {
|
||||
$list_filter[] = array('field' => $field,
|
||||
'value' => $v);
|
||||
}
|
||||
}
|
||||
else {
|
||||
$list_filter[] = array('field' => $field,
|
||||
'value' => $value);
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------
|
||||
|
||||
foreach ($list_filter as $item) {
|
||||
$field = $item['field'];
|
||||
$value = $item['value'];
|
||||
|
||||
//Check <> operator
|
||||
$operatorDistin = false;
|
||||
if (strlen($value) > 2) {
|
||||
|
@ -1028,10 +1061,12 @@ function agents_get_modules ($id_agent = null, $details = false, $filter = false
|
|||
switch ($config['dbtype']) {
|
||||
case "mysql":
|
||||
case "postgresql":
|
||||
array_push ($fields, $field.' LIKE "'.$value.'"');
|
||||
array_push ($fields,
|
||||
$field . ' LIKE "' . $value . '"');
|
||||
break;
|
||||
case "oracle":
|
||||
array_push ($fields, $field.' LIKE \''.$value.'\'');
|
||||
array_push ($fields,
|
||||
$field . ' LIKE \'' . $value . '\'');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1142,6 +1177,8 @@ function agents_get_modules ($id_agent = null, $details = false, $filter = false
|
|||
break;
|
||||
}
|
||||
|
||||
//html_debug_print($sql);
|
||||
|
||||
$result = db_get_all_rows_sql ($sql);
|
||||
|
||||
if (empty ($result)) {
|
||||
|
|
|
@ -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;
|
||||
|
||||
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 = 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 "<div class='nf'>" . __('Empty graph') . "</div>";
|
||||
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;
|
||||
|
|
|
@ -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[] = '<span style="white-space: nowrap;">' .
|
||||
html_print_checkbox('modules[' . $id . ']', 1, $checked, true, false, '', true) .
|
||||
' ' . $module . '</span>';
|
||||
}
|
||||
$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[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 = '<form method="post" action="index.php?sec=estado&sec2=operation/agentes/ver_agente&tab=graphs&id_agente=' . $id_agente . '" >';
|
||||
$htmlForm .= html_print_table($table, true);
|
||||
|
@ -104,7 +163,7 @@ $htmlForm .= html_print_submit_button (__('Filter'), 'filter_button', false, 'cl
|
|||
$htmlForm .= '</div>';
|
||||
$htmlForm .= '</form>';
|
||||
|
||||
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 "<h4>" . $modules[$idModuleShowGraph] . '</h4>';
|
||||
if ($combined) {
|
||||
echo "<h4>" . __('Combined graph') . '</h4>';
|
||||
|
||||
$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 "<div style='width: 555px; text-align: right;'>";
|
||||
html_print_button(__('Save as custom graph'), 'save_custom_graph',
|
||||
false, 'save_custom_graph();', 'class="sub save"');
|
||||
echo "</div>";
|
||||
}
|
||||
else {
|
||||
foreach ($modules as $id_module) {
|
||||
$title = modules_get_agentmodule_name($id_module);
|
||||
|
||||
echo "<h4>" . $title . '</h4>';
|
||||
|
||||
$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 "<div style='clear: both;'></div>";
|
||||
|
||||
//Dialog to save the custom graph
|
||||
echo "<div id='dialog_save_custom_graph' style='display: none;'>";
|
||||
$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 "<div style='width: " . $table->width . "; text-align: right;'>";
|
||||
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 "</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
|
||||
});
|
||||
});
|
||||
|
||||
function save_custom_graph() {
|
||||
$("#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",
|
||||
async: false,
|
||||
timeout: 10000,
|
||||
success: function (data) {
|
||||
$(".loading_save").hide();
|
||||
if (data.correct) {
|
||||
$(".ok_save").show();
|
||||
}
|
||||
else {
|
||||
$(".error_save").show();
|
||||
$(".button_save").enable();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
Loading…
Reference in New Issue