Merge branch 'develop' of https://github.com/pandorafms/pandorafms into develop

This commit is contained in:
Junichi Satoh 2014-09-16 19:30:53 +09:00
commit 0a78522d03
6 changed files with 403 additions and 59 deletions

View File

@ -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;
}
?>

View File

@ -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);
@ -1014,8 +1017,38 @@ function agents_get_modules ($id_agent = null, $details = false, $filter = false
if (! empty ($filter)) {
$where .= ' AND ';
if (is_array ($filter)) {
$fields = array ();
foreach ($filter as $field => $value) {
$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)) {

View File

@ -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 "<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;

View File

@ -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;

View File

@ -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 != '') {

View File

@ -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[$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>