From ddc01f9a4e40c75ac9a42688e9e5d3141bacb224 Mon Sep 17 00:00:00 2001 From: fermin831 Date: Mon, 25 Mar 2019 12:30:51 +0100 Subject: [PATCH] Added data from NTA to networl_usage_map Former-commit-id: 9f6192faa1698959ce1ba44e13b974b8470a6a3c --- pandora_console/include/functions_network.php | 81 ++++++++++++++++++- .../operation/network/network_usage_map.php | 8 +- 2 files changed, 86 insertions(+), 3 deletions(-) diff --git a/pandora_console/include/functions_network.php b/pandora_console/include/functions_network.php index 802fc4bb5c..a9f7c4d3a5 100644 --- a/pandora_console/include/functions_network.php +++ b/pandora_console/include/functions_network.php @@ -39,7 +39,8 @@ function network_matrix_get_top( $start, $end, $ip_filter='', - $order_by_bytes=true + $order_by_bytes=true, + $host_filter=[] ) { $field_to_group = ($talker === true) ? 'source' : 'destination'; $field_to_order = ($order_by_bytes === true) ? 'sum_bytes' : 'sum_pkts'; @@ -49,11 +50,21 @@ function network_matrix_get_top( $filter_sql = sprintf('AND %s="%s"', $filter_field, $ip_filter); } + $host_filter_sql = ''; + if (!empty($host_filter)) { + $host_filter_sql = sprintf( + ' AND %s IN ("%s")', + $field_to_group, + implode('","', $host_filter) + ); + } + $sql = sprintf( 'SELECT SUM(bytes) sum_bytes, SUM(pkts) sum_pkts, %s host FROM tnetwork_matrix WHERE utimestamp > %d AND utimestamp < %d %s + %s GROUP BY %s ORDER BY %s DESC LIMIT %d', @@ -61,6 +72,7 @@ function network_matrix_get_top( $start, $end, $filter_sql, + $host_filter_sql, $field_to_group, $field_to_order, $top @@ -154,3 +166,70 @@ function network_format_bytes($value) 'B' ); } + + +function network_build_map_data($start, $end, $top) +{ + $data = network_matrix_get_top($top, true, $start, $end); + + $hosts = array_map( + function ($elem) { + return $elem['host']; + }, + $data + ); + $inverse_hosts = array_flip($hosts); + + $nodes = array_map( + function ($elem) { + return [ + 'name' => $elem, + 'type' => NODE_GENERIC, + 'width' => 20, + 'height' => 20, + 'status' => '#82B92E', + ]; + }, + $hosts + ); + + $relations = []; + foreach ($hosts as $host) { + $host_top = network_matrix_get_top( + $top, + false, + $start, + $end, + $host, + true, + $hosts + ); + foreach ($host_top as $sd) { + $src_index = $inverse_hosts[$host]; + $dst_index = $inverse_hosts[$sd['host']]; + if (isset($src_index) === false || isset($dst_index) === false) { + continue; + } + + $relations[$host.'-'.$sd['host']] = [ + 'id_parent' => $inverse_hosts[$sd['host']], + 'parent_type' => NODE_GENERIC, + 'child_type' => NODE_GENERIC, + 'id_child' => $inverse_hosts[$host], + 'link_color' => '#82B92E', + 'text_start' => $sd['sum_bytes'], + ]; + } + } + + return [ + 'nodes' => $nodes, + 'relations' => $relations, + 'pure' => 1, + 'no_pandora_node' => 1, + 'map_options' => [ + 'generation_method' => LAYOUT_SPRING1, + 'map_filter' => ['node_radius' => 40], + ], + ]; +} diff --git a/pandora_console/operation/network/network_usage_map.php b/pandora_console/operation/network/network_usage_map.php index e3cc5f7fca..cd094237c3 100644 --- a/pandora_console/operation/network/network_usage_map.php +++ b/pandora_console/operation/network/network_usage_map.php @@ -193,8 +193,12 @@ if ((bool) get_parameter('update_netflow') === true) { ); $has_data = !empty($map_data['nodes']); } else if ((bool) get_parameter('update_nta') === true) { - // TODOS. - $has_data = false; + $map_data = network_build_map_data( + $utimestamp_lower, + $utimestamp_greater, + $top + ); + $has_data = !empty($map_data['nodes']); } else { return; }