Merge branch 'ent-3595-discovery-fase-2' into wip/3595

Former-commit-id: df24037730e212308a8e8805e0440e73e1ec0f16
This commit is contained in:
fbsanchez 2019-03-20 17:28:35 +01:00
commit ad432ffc12
2 changed files with 217 additions and 1 deletions

View File

@ -221,3 +221,219 @@ function run_graphviz($filename_map, $filename_dot, $layout, $graph)
return $filename_plain;
}
function open_graph($size_x=50, $size_y=25)
{
$size = '';
$size = $size_x.','.$size_y;
// BEWARE: graphwiz DONT use single ('), you need double (").
$head = 'graph vmwaremap { labeljust=l; margin=0; ';
$head .= 'ratio=fill;';
$head .= 'root=0;';
$head .= 'rankdir=LR;';
$head .= 'size="'.$size.'";';
return $head;
}
function create_node($node, $font_size=10)
{
// Set node status.
if (isset($node['status'])) {
switch ($node['status']) {
case AGENT_MODULE_STATUS_NORMAL:
$status_color = COL_NORMAL;
// Normal monitor.
break;
case AGENT_MODULE_STATUS_CRITICAL_BAD:
$status_color = COL_CRITICAL;
// Critical monitor.
break;
case AGENT_MODULE_STATUS_WARNING:
$status_color = COL_WARNING;
// Warning monitor.
break;
case AGENT_STATUS_ALERT_FIRED:
case AGENT_MODULE_STATUS_CRITICAL_ALERT:
case AGENT_MODULE_STATUS_WARNING_ALERT:
$status_color = COL_ALERTFIRED;
// Alert fired.
break;
case AGENT_MODULE_STATUS_NOT_INIT:
$status_color = COL_NOTINIT;
// Not init.
break;
default:
$status_color = COL_UNKNOWN;
// Unknown monitor.
break;
}
$status_color = 'color="'.$status_color.'",';
} else {
$status_color = '';
}
// Short name.
if (isset($node['nombre'])) {
$name = io_safe_output(strtolower($node['nombre']));
if (strlen($name) > 16) {
$name = substr($name, 0, 16).'...';
}
}
// Set node icon.
if (isset($node['image'])) {
if (file_exists($node['image'])) {
$img_node = $node['image'];
} else {
$img_node = null;
}
} else {
$img_node = null;
}
$result = $node['id_node'].' [ '.$status_color.' fontsize='.$font_size.', style="filled", fixedsize=true, width=0.40, height=0.40, label=<<TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0"><TR><TD>'.html_print_image($img_node, true, false, false, true).'</TD></TR>
<TR><TD>'.$name.'</TD></TR></TABLE>>,
shape="doublecircle",
tooltip="ajax.php?page=operation/agentes/ver_agente&get_agent_status_tooltip=1&id_agent='.$node['id'].'"];';
return $result;
}
/**
* Returns an edge definition.
*
* @param string $head Origin.
* @param string $tail Target.
*
* @return string Edge str.
*/
function create_edge($head, $tail)
{
// Token edgeURL allows node navigation.
$edge = $head.' -- '.$tail.'[color="#BDBDBD", headclip=false, tailclip=false];'."\n";
return $edge;
}
// Closes a graph definition
function close_graph()
{
return '}';
}
function loadfile_map($file='', $graph)
{
global $config;
$networkmap_nodes = [];
$relations = [];
$other_file = file($file);
$graph = explode(']', $graph);
$ids = [];
foreach ($graph as $node) {
$line = str_replace("\n", ' ', $node);
if (preg_match('/([0-9]+) \[.*tooltip.*id_agent=([0-9]+)/', $line, $match) != 0) {
$ids[$match[1]] = ['id_agent' => $match[2]];
}
}
foreach ($other_file as $key => $line) {
$line = preg_replace('/[ ]+/', ' ', $line);
$data = [];
if (preg_match('/^node.*$/', $line) != 0) {
$items = explode(' ', $line);
$node_id = $items[1];
$node_x = ($items[2] * 100);
// 200 is for show more big
$node_y = ($height_map - $items[3] * 100);
// 200 is for show more big
$data['id'] = $node_id;
$data['image'] = '';
$data['width'] = 10;
$data['height'] = 10;
$data['id_agent'] = 0;
if (preg_match('/<img src=\"([^\"]*)\"/', $line, $match) == 1) {
$image = $match[1];
$data['image'] = $config['homeurl'].'/'.$image;
$size = getimagesize($config['homeurl'].'/'.$image);
$data['image_width'] = $size[0];
$data['image_height'] = $size[1];
if ($ids[$node_id]['id_agent'] == '') {
$data['id_agent'] = 0;
$data['label'] = get_product_name();
$data['color'] = COL_UNKNOWN;
} else {
$data['id_agent'] = $ids[$node_id]['id_agent'];
$data['label'] = io_safe_output(agents_get_alias($data['id_agent']));
$status = agents_get_status($data['id_agent']);
switch ($status) {
case 0:
$status_color = COL_NORMAL;
// Normal monitor
break;
case 1:
$status_color = COL_CRITICAL;
// Critical monitor
break;
case 2:
$status_color = COL_WARNING;
// Warning monitor
break;
case 4:
$status_color = COL_ALERTFIRED;
// Alert fired
break;
default:
$status_color = COL_UNKNOWN;
// Unknown monitor
break;
}
$data['color'] = $status_color;
}
}
$data['x'] = $node_x;
$data['y'] = $node_y;
$networkmap_nodes['nodes'][] = $data;
} else if (preg_match('/^edge.*$/', $line) != 0) {
$items = explode(' ', $line);
$line_orig = $items[2];
$line_dest = $items[1];
$networkmap_nodes['arrows'][] = [
'orig' => $line_orig,
'dest' => $line_dest,
];
}
}
return $networkmap_nodes;
}

View File

@ -58,7 +58,7 @@
overflow-y: scroll;
}
#cluster_map {
#simple_map {
border: 1px solid lightgray;
width: 900px;
height: 500px;