2014-06-26 Alejandro Gallardo <alejandro.gallardo@artica.es>

* operation/netflow/nf_live_view.php,
	  godmode/netflow/nf_edit.php,
	  godmode/servers/manage_recontask_form.php,
	  godmode/servers/plugin.php,
	  godmode/setup/setup_general.php: Added messages to
	warn about incompatibilities for Windows users.

	* include/functions_graph.php: Added the function
	"graph_monitor_wheel".

	* include/graphs/functions_d3.php: Added the function
	"d3_sunburst_graph".

	* include/graphs/pandora.d3.js: Added the function "sunburst".


git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@10291 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
alexhigh 2014-06-26 11:32:14 +00:00
parent a3ac3bb0d8
commit b2a71b9f02
9 changed files with 230 additions and 48 deletions

View File

@ -1,3 +1,20 @@
2014-06-26 Alejandro Gallardo <alejandro.gallardo@artica.es>
* operation/netflow/nf_live_view.php,
godmode/netflow/nf_edit.php,
godmode/servers/manage_recontask_form.php,
godmode/servers/plugin.php,
godmode/setup/setup_general.php: Added messages to
warn about incompatibilities for Windows users.
* include/functions_graph.php: Added the function
"graph_monitor_wheel".
* include/graphs/functions_d3.php: Added the function
"d3_sunburst_graph".
* include/graphs/pandora.d3.js: Added the function "sunburst".
2014-06-25 Miguel de Dios <miguel.dedios@artica.es>
* include/functions_config.php: set the default size of networkmap

View File

@ -35,6 +35,11 @@ $pure = get_parameter('pure', 0);
//Header
if (! defined ('METACONSOLE')) {
ui_print_page_header (__('Manage Netflow Filter'), "images/gm_netflow.png", false, "", true);
$is_windows = strtoupper(substr(PHP_OS, 0, 3)) == 'WIN';
if ($is_windows) {
ui_print_error_message(__('Not supported in Windows systems'));
}
}
else {
$nav_bar = array(array('link' => 'index.php?sec=main', 'text' => __('Main')),

View File

@ -143,6 +143,12 @@ elseif (isset ($_GET["create"]) or isset($_GET["crt"])) {
// Headers
ui_print_page_header (__('Manage recontask'), "", false, "recontask", true);
$is_windows = strtoupper(substr(PHP_OS, 0, 3)) == 'WIN';
if ($is_windows) {
echo '<div class="notify">';
echo __('Warning') . ": " . __("By default, in Windows, Pandora FMS only support Standard network sweep, not custom scripts");
echo '</div>';
}
$table->id='table_recon';
$table->width='98%';
@ -182,7 +188,8 @@ $table->data[1][1] = html_print_select_from_sql ('SELECT id_server, name
$fields['network_sweep'] = __("Network sweep");
$fields['recon_script'] = __("Custom script");
if (!$is_windows)
$fields['recon_script'] = __("Custom script");
$table->data[2][0] = "<b>".__('Mode')."</b>";

View File

@ -390,6 +390,13 @@ else {
}
else {
ui_print_page_header (__('Plugins registered in Pandora FMS'), "images/gm_servers.png", false, "", true);
$is_windows = strtoupper(substr(PHP_OS, 0, 3)) == 'WIN';
if ($is_windows) {
echo '<div class="notify">';
echo __("You need to create your own plugins with Windows compatibility");
echo '</div>';
}
}
enterprise_hook('open_meta_frame');

View File

@ -164,7 +164,7 @@ $table->data[19][0] = __('Enable Netflow');
$rbt_disabled = false;
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
$rbt_disabled = true;
$table->data[19][0] .= ui_print_help_tip (__('Not supported in Windows systems.'), true);
$table->data[19][0] .= ui_print_help_tip (__('Not supported in Windows systems'), true);
}
$table->data[19][1] = __('Yes').'&nbsp;&nbsp;&nbsp;'.html_print_radio_button_extended ('activate_netflow', 1, '', $config["activate_netflow"], $rbt_disabled, '', '', true).'&nbsp;&nbsp;';
$table->data[19][1] .= __('No').'&nbsp;&nbsp;&nbsp;'.html_print_radio_button_extended ('activate_netflow', 0, '', $config["activate_netflow"], $rbt_disabled, '', '', true);

View File

@ -4103,4 +4103,50 @@ function graph_snmp_traps_treemap ($data, $width = 700, $height = 700) {
return d3_tree_map_graph ($data, $width, $height, true);
}
/**
* Print a solarburst graph with a representation of all the groups, agents, module groups and modules grouped
*/
function graph_monitor_wheel ($data, $unit, $width = 700, $height = 700) {
global $config;
$data = array();
include_once ($config['homedir'] . "/include/functions_users.php");
//include_once ($config['homedir'] . "/include/functions_groups.php");
include_once ($config['homedir'] . "/include/functions_agents.php");
//include_once ($config['homedir'] . "/include/functions_modules.php");
$groups = users_get_groups(false, "AR", false, true);
if (!empty($groups)) {
$filter = array('id_grupo' => array_keys($groups));
$fields = array('id_agente', 'id_parent', 'id_grupo', 'nombre');
$agents = agents_get_agents($filter, $fields);
if (!empty($agents)) {
$agents_id = array();
foreach ($agents as $key => $agent) {
$agents_id[] = $agent['id_agente'];
}
$fields = array('id_agente_modulo', 'id_agente', 'id_module_group', 'nombre');
$module_groups = modules_get_modulegroups();
$modules = agents_get_modules($agents_id, $fields);
if (!empty($modules)) {
}
}
}
if (empty ($data)) {
return fs_error_image ();
}
include_once($config['homedir'] . "/include/graphs/functions_d3.php");
return d3_tree_map_graph ($data, $width, $height, true);
}
?>

View File

@ -117,4 +117,28 @@ function d3_tree_map_graph ($data, $width = 700, $height = 700, $return = false)
return $output;
}
function d3_sunburst_graph ($data, $width = 700, $height = 700, $return = false) {
global $config;
if (is_array($data))
$data = json_encode($data);
$output = "<div id=\"sunburst\" style='overflow: hidden;'></div>";
$output .= include_javascript_d3(true);
$output .= "<style type=\"text/css\">
path {
stroke: #fff;
fill-rule: evenodd;
}
</style>";
$output .= "<script language=\"javascript\" type=\"text/javascript\">
sunburst('#sunburst', $data, '$width', '$height');
</script>";
if (!$return)
echo $output;
return $output;
}
?>

View File

@ -18,9 +18,9 @@
// The matrix must be a 2 dimensional array with a row and a column for each element
// Ex:
// elements = ["a", "b", "c"];
// matrix = [[0, 0, 2], // a[a => a, a => b, a => c]
// [5, 0, 1], // b[b => a, b => b, b => c]
// [2, 3, 0]]; // c[c => a, c => b, c => c]
// matrix = [[0, 0, 2], // a[a => a, a => b, a => c]
// [5, 0, 1], // b[b => a, b => b, b => c]
// [2, 3, 0]]; // c[c => a, c => b, c => c]
function chordDiagram (recipient, elements, matrix, unit, width) {
d3.chart = d3.chart || {};
@ -266,37 +266,37 @@ function chordDiagram (recipient, elements, matrix, unit, width) {
// The recipient is the selector of the html element
// The data must be a bunch of associative arrays like this
// data = {
// "name": "IP Traffic",
// "id": 0,
// "children": [
// {
// "name": "192.168.1.1",
// "id": 1,
// "children": [
// {
// "name": "HTTP",
// "id": 2,
// "value": 33938
// }
// ]
// },
// {
// "name": "192.168.1.2",
// "id": 3,
// "children": [
// {
// "name": "HTTP",
// "id": 4,
// "value": 3938
// },
// {
// "name": "FTP",
// "id": 5,
// "value": 1312
// }
// ]
// }
// ]
// "name": "IP Traffic",
// "id": 0,
// "children": [
// {
// "name": "192.168.1.1",
// "id": 1,
// "children": [
// {
// "name": "HTTP",
// "id": 2,
// "value": 33938
// }
// ]
// },
// {
// "name": "192.168.1.2",
// "id": 3,
// "children": [
// {
// "name": "HTTP",
// "id": 4,
// "value": 3938
// },
// {
// "name": "FTP",
// "id": 5,
// "value": 1312
// }
// ]
// }
// ]
// };
function treeMap(recipient, data, width, height) {
@ -668,4 +668,73 @@ function treeMap(recipient, data, width, height) {
function hide_tooltip() {
$("#tooltip").hide();
}
}
// A sunburst is similar to a treemap, except it uses a radial layout.
// The root node of the tree is at the center, with leaves on the circumference.
// The area (or angle, depending on implementation) of each arc corresponds to its value.
// Sunburst design by John Stasko. Data courtesy Jeff Heer.
// http://bl.ocks.org/mbostock/4348373
function sunburst (recipient, data, width, height) {
if (width === 'auto') {
width = $(recipient).innerWidth();
}
if (height === 'auto') {
height = width;
}
// var width = 960,
// height = 700;
var radius = Math.min(width, height) / 2;
var x = d3.scale.linear()
.range([0, 2 * Math.PI]);
var y = d3.scale.sqrt()
.range([0, radius]);
var color = d3.scale.category20c();
var svg = d3.select(recipient).append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + (height / 2 + 10) + ")");
var partition = d3.layout.partition()
.value(function(d) { return d.size; });
var arc = d3.svg.arc()
.startAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x))); })
.endAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x + d.dx))); })
.innerRadius(function(d) { return Math.max(0, y(d.y)); })
.outerRadius(function(d) { return Math.max(0, y(d.y + d.dy)); });
var path = svg.selectAll("path")
.data(partition.nodes(data))
.enter().append("path")
.attr("d", arc)
.style("fill", function(d) { return color((d.children ? d : d.parent).name); })
.on("click", click);
function click(d) {
path.transition()
.duration(750)
.attrTween("d", arcTween(d));
}
d3.select(self.frameElement).style("height", height + "px");
// Interpolate the scales!
function arcTween(d) {
var xd = d3.interpolate(x.domain(), [d.x, d.x + d.dx]),
yd = d3.interpolate(y.domain(), [d.y, 1]),
yr = d3.interpolate(y.range(), [d.y ? 20 : 0, radius]);
return function(d, i) {
return i
? function(t) { return arc(d); }
: function(t) { x.domain(xd(t)); y.domain(yd(t)).range(yr(t)); return arc(d); };
};
}
}

View File

@ -104,20 +104,27 @@ $start_date = $end_date - $period;
if (! defined ('METACONSOLE')) {
//Header
ui_print_page_header (__('Netflow live view'), "images/op_netflow.png", false, "", false, array ());
// Check the nfdump binary
$check_result = netflow_check_nfdump_binary ($config['netflow_nfdump']);
// Not found or not executable
if ($check_result == 1) {
ui_print_error_message(
sprintf(__('nfdump binary (%s) not found!'),
$config['netflow_nfdump']));
$is_windows = strtoupper(substr(PHP_OS, 0, 3)) == 'WIN';
if ($is_windows) {
ui_print_error_message(__('Not supported in Windows systems'));
}
// Wrong version
else if ($check_result == 2) {
ui_print_error_message(sprintf(__('Make sure nfdump version 1.6.8 or newer is installed!')));
else {
// Check the nfdump binary
$check_result = netflow_check_nfdump_binary ($config['netflow_nfdump']);
// Not found or not executable
if ($check_result == 1) {
ui_print_error_message(
sprintf(__('nfdump binary (%s) not found!'),
$config['netflow_nfdump']));
}
// Wrong version
else if ($check_result == 2) {
ui_print_error_message(sprintf(__('Make sure nfdump version 1.6.8 or newer is installed!')));
}
}
}
else {
$nav_bar = array(array('link' => 'index.php?sec=main', 'text' => __('Main')),