networkmaps in dashboards MC

This commit is contained in:
fbsanchez 2021-04-06 16:47:32 +02:00
parent 1c94f619ef
commit 5143bbdfdb
7 changed files with 159 additions and 21 deletions

View File

@ -1727,7 +1727,10 @@ class NetworkMap
$item['image_height'] = 0;
if (empty($node['style']['image']) === false) {
$item['image_url'] = ui_get_full_url(
$node['style']['image']
$node['style']['image'],
false,
false,
false
);
$image_size = getimagesize(
$config['homedir'].'/'.$node['style']['image']
@ -3391,7 +3394,7 @@ class NetworkMap
&& isset($this->useTooltipster)
&& $this->useTooltipster == true
) {
$output .= '<script type="text/javascript" src="'.ui_get_full_url(
$output = '<script type="text/javascript" src="'.ui_get_full_url(
'include/javascript/d3.3.5.14.js'
).'" charset="utf-8"></script>';
$output .= '<script type="text/javascript" src="'.ui_get_full_url(
@ -3443,13 +3446,35 @@ class NetworkMap
$networkmap['filter']['l2_network_interfaces'] = 1;
$output .= '<script type="text/javascript" src="'.$config['homeurl'].'include/javascript/d3.3.5.14.js" charset="utf-8"></script>';
$output .= '<script type="text/javascript" src="';
$output .= ui_get_full_url(
'include/javascript/d3.3.5.14.js',
false,
false,
false
);
$output .= '" charset="utf-8"></script>';
if (isset($this->map['__simulated']) === false) {
// Load context menu if manageable networkmap.
$output .= '<script type="text/javascript" src="'.$config['homeurl'].'include/javascript/jquery.contextMenu.js"></script>';
$output .= '<script type="text/javascript" src="';
$output .= ui_get_full_url(
'include/javascript/jquery.contextMenu.js',
false,
false,
false
);
$output .= '" charset="utf-8"></script>';
}
$output .= '<script type="text/javascript" src="'.$config['homeurl'].'include/javascript/functions_pandora_networkmap.js"></script>';
$output .= '<script type="text/javascript" src="';
$output .= ui_get_full_url(
'include/javascript/functions_pandora_networkmap.js',
false,
false,
false
);
$output .= '" charset="utf-8"></script>';
// Open networkconsole_id div.
$output .= '<div id="networkconsole_'.$networkmap['id'].'"';

View File

@ -31,6 +31,7 @@ require_once 'functions_agents.php';
require_once $config['homedir'].'/include/functions_modules.php';
require_once $config['homedir'].'/include/functions_groups.php';
enterprise_include_once('include/functions_networkmap.php');
enterprise_include_once('include/functions_metaconsole.php');
// Check if a node descends from a given node
function networkmap_is_descendant($node, $ascendant, $parents)
@ -1228,7 +1229,7 @@ function networkmap_get_networkmap($id_networkmap, $filter=false, $fields=false,
* @param array Extra filter.
* @param array Fields to get.
*
* @return Networkmap with the given id. False if not available or readable.
* @return array Networkmap with the given id. False if not available or readable.
*/
function networkmap_get_networkmaps(
$id_user=null,
@ -1243,10 +1244,16 @@ function networkmap_get_networkmaps(
$id_user = $config['id_user'];
}
// Configure filters
// Configure filters.
$where = [];
$where['type'] = MAP_TYPE_NETWORKMAP;
$where['id_group'] = array_keys(users_get_groups($id_user, 'AR', $return_all_group));
$where['id_group'] = array_keys(
users_get_groups(
$id_user,
'AR',
$return_all_group
)
);
if (!empty($type)) {
$where['subtype'] = $type;
}
@ -1256,7 +1263,30 @@ function networkmap_get_networkmaps(
$where['order'][1]['field'] = 'name';
$where['order'][1]['order'] = 'ASC';
$networkmaps_raw = db_get_all_rows_filter('tmap', $where);
if ((bool) is_metaconsole() === true) {
$servers = metaconsole_get_connection_names();
foreach ($servers as $key => $server) {
$connection = metaconsole_get_connection($server);
if (metaconsole_connect($connection) != NOERR) {
continue;
}
$tmp_maps = db_get_all_rows_filter('tmap', $where);
if ($tmp_maps !== false) {
foreach ($tmp_maps as $g) {
$g['id_t'] = $g['id'];
$g['id'] = $connection['id'].'_'.$g['id'];
$g['name'] = $g['name'].' ('.$connection['server_name'].')';
$networkmaps_raw[] = $g;
}
}
metaconsole_restore_db();
}
} else {
$networkmaps_raw = db_get_all_rows_filter('tmap', $where);
}
if (empty($networkmaps_raw)) {
return [];
}

View File

@ -22,15 +22,30 @@ function include_javascript_d3($return=false)
$is_include_javascript = true;
$output .= '<script type="text/javascript" src="';
$output .= ui_get_full_url('/include/javascript/d3.3.5.14.js');
$output .= ui_get_full_url(
'include/javascript/d3.3.5.14.js',
false,
false,
false
);
$output .= '" charset="utf-8"></script>';
$output .= '<script type="text/javascript" src="';
$output .= ui_get_full_url('/include/graphs/bullet.js');
$output .= ui_get_full_url(
'include/graphs/bullet.js',
false,
false,
false
);
$output .= '" charset="utf-8"></script>';
$output .= '<script type="text/javascript" src="';
$output .= ui_get_full_url('/include/graphs/pandora.d3.js');
$output .= ui_get_full_url(
'include/graphs/pandora.d3.js',
false,
false,
false
);
$output .= '" charset="utf-8"></script>';
}

View File

@ -782,7 +782,8 @@ function dashboardLoadNetworkMap(settings) {
auth_class: settings.auth_class,
auth_hash: settings.auth_hash,
id_user: settings.id_user,
ignore_acl: 1
ignore_acl: 1,
node: settings.node
},
dataType: "html",
success: function(data) {

View File

@ -203,6 +203,10 @@ class NetworkMapWidget extends Widget
$values['networkmapId'] = $decoder['networkmaps'];
}
if (isset($decoder['node']) === true) {
$values['node'] = $decoder['node'];
}
if (isset($decoder['networkmapId']) === true) {
$values['networkmapId'] = $decoder['networkmapId'];
}
@ -268,14 +272,44 @@ class NetworkMapWidget extends Widget
$return_all_group = true;
}
// Selected.
$selected = $values['networkmapId'];
if ((bool) is_metaconsole() === true) {
$selected = $values['node'].'_'.$values['networkmapId'];
} else {
$selected = $values['networkmapId'];
}
// Map.
$fields = \networkmap_get_networkmaps(null, null, true, false, $return_all_group);
$fields = \networkmap_get_networkmaps(
null,
null,
true,
false,
$return_all_group
);
// If currently selected networkmap is not included in fields array (it belongs to a group over which user has no permissions), then add it to fields array.
if ($values['networkmapId'] !== null && !array_key_exists($values['networkmapId'], $fields)) {
$selected_networkmap = db_get_row('tmap', 'id', $values['networkmapId']);
// If currently selected networkmap is not included in fields array
// (it belongs to a group over which user has no permissions), then add
// it to fields array.
if ($values['networkmapId'] !== null
&& array_key_exists($selected, $fields) === false
) {
if ((bool) is_metaconsole() === true) {
metaconsole_connect(null, $values['nodeId']);
}
$fields[$values['networkmapId']] = $selected_networkmap;
$selected_networkmap = db_get_value(
'id',
'tmap',
$values['networkmapId']
);
$fields[$selected] = $selected_networkmap;
if ((bool) is_metaconsole() === true) {
metaconsole_restore_db();
}
}
$inputs[] = [
@ -358,7 +392,18 @@ class NetworkMapWidget extends Widget
// Retrieve global - common inputs.
$values = parent::getPost();
$values['networkmapId'] = \get_parameter('networkmapId', 0);
$nmId = \get_parameter('networkmapId', null);
if ($nmId !== null) {
if ((bool) is_metaconsole() === true) {
$mc_stuff = explode('_', $nmId);
$values['node'] = $mc_stuff[0];
$values['networkmapId'] = $mc_stuff[1];
} else {
$values['networkmapId'] = $nmId;
}
}
$values['xOffset'] = \get_parameter('xOffset', 0);
$values['yOffset'] = \get_parameter('yOffset', 0);
$values['zoomLevel'] = (float) \get_parameter('zoomLevel', 0.5);
@ -382,8 +427,9 @@ class NetworkMapWidget extends Widget
$x_offset = $this->values['xOffset'];
$y_offset = $this->values['yOffset'];
$zoom_dash = $this->values['zoomLevel'];
$node = ($this->values['node'] ?? '');
$hash = md5($config['dbpass'].$id_networkmap.$config['id_user']);
$hash = md5($config['dbpass'].$id_networkmap.$config['id_user'].$node);
$style = 'width:'.$size['width'].'px; height:'.$size['height'].'px;';
$id = 'body_cell-'.$this->cellId;
@ -401,6 +447,7 @@ class NetworkMapWidget extends Widget
'id_user' => $config['id_user'],
'auth_class' => 'PandoraFMS\Dashboard\Manager',
'auth_hash' => Manager::generatePublicHash(),
'node' => $node,
]
);

View File

@ -2,3 +2,23 @@ div#page {
width: 90% !important;
margin: 0 auto;
}
.networkconsole {
height: 100%;
}
.networkconsole svg {
height: 100%;
}
.minimap {
position: absolute;
left: 0px;
top: 0px;
border: 1px solid #bbbbbb;
}
.holding_networkmap {
display: none;
position: absolute;
right: 50px;
top: 20px;
}

View File

@ -34,7 +34,7 @@ require $config['homedir'].'/vendor/autoload.php';
use PandoraFMS\Dashboard\Manager;
if ((bool) is_metaconsole() === true) {
ui_require_css_file('meta_dashboards.css');
ui_require_css_file('meta_dashboards');
}
$ajaxPage = 'operation/dashboard/dashboard';