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:
parent
a3ac3bb0d8
commit
b2a71b9f02
|
@ -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
|
||||
|
|
|
@ -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')),
|
||||
|
|
|
@ -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>";
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -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').' '.html_print_radio_button_extended ('activate_netflow', 1, '', $config["activate_netflow"], $rbt_disabled, '', '', true).' ';
|
||||
$table->data[19][1] .= __('No').' '.html_print_radio_button_extended ('activate_netflow', 0, '', $config["activate_netflow"], $rbt_disabled, '', '', true);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
@ -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); };
|
||||
};
|
||||
}
|
||||
}
|
|
@ -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')),
|
||||
|
|
Loading…
Reference in New Issue