#8889 Fixed refresh and duplicate relations

This commit is contained in:
Daniel Maya 2022-08-31 10:08:20 +02:00
parent d3612439fb
commit bb691c2e16
3 changed files with 390 additions and 320 deletions

View File

@ -2131,6 +2131,62 @@ class NetworkMap
}
if (is_array($edges)) {
$array_aux = $edges;
$target_aux = $edges;
foreach ($edges as $key => $rel) {
foreach ($array_aux as $key2 => $rel2) {
if ($key2 <= $key) {
continue;
}
if ($rel['child_type'] == 1 && $rel['parent_type'] == 1
&& $rel2['child_type'] == 1 && $rel2['parent_type'] == 1
) {
if ($rel['id_parent'] == $rel2['id_parent'] && $rel['id_child'] == $rel2['id_child']) {
if ($rel['id_parent_source_data'] == $rel2['id_parent_source_data']) {
if (modules_get_agentmodule_type($rel['id_child_source_data']) === 6) {
unset($target_aux[$key]);
} else if (modules_get_agentmodule_type($rel2['id_child_source_data']) === 6) {
unset($target_aux[$key2]);
}
} else if ($rel['id_child_source_data'] == $rel2['id_child_source_data']) {
if (modules_get_agentmodule_type($rel['id_parent_source_data']) === 6) {
unset($target_aux[$key]);
} else if (modules_get_agentmodule_type($rel2['id_parent_source_data']) === 6) {
unset($target_aux[$key2]);
}
}
} else if ($rel['id_parent'] == $rel2['id_child'] && $rel['id_child'] == $rel2['id_parent']) {
if ($rel['id_parent_source_data'] == $rel2['id_child_source_data']
&& $rel['id_child_source_data'] == $rel2['id_parent_source_data']
) {
unset($target_aux[$key2]);
continue;
}
if ($rel['id_parent_source_data'] == $rel2['id_child_source_data']) {
if (modules_get_agentmodule_type($rel['id_child_source_data']) === 6) {
unset($target_aux[$key]);
} else if (modules_get_agentmodule_type($rel2['id_parent_source_data']) === 6) {
unset($target_aux[$key2]);
}
} else if ($rel['id_child_source_data'] == $rel2['id_parent_source_data']) {
if (modules_get_agentmodule_type($rel['id_parent_source_data']) === 6) {
unset($target_aux[$key]);
} else if (modules_get_agentmodule_type($rel2['id_child_source_data']) === 6) {
unset($target_aux[$key2]);
}
}
}
}
}
}
$edges = [];
foreach ($target_aux as $key => $value) {
$edges[] = $value;
}
foreach ($edges as $rel) {
$graph .= $this->createDotEdge(
[
@ -3431,6 +3487,7 @@ class NetworkMap
node_radius: node_radius,
holding_area_dimensions: networkmap_holding_area_dimensions,
url_background_grid: url_background_grid,
refresh_time: '.$this->mapOptions['refresh_time'].',
font_size: '.$this->mapOptions['font_size'].',
base_url_homedir: "'.ui_get_full_url(false).'"
});

View File

@ -4372,290 +4372,291 @@ function networkmap_get_new_nodes_and_links($networkmap, $x, $y)
}
}
// Get L2 interface relations.
$interfaces = modules_get_interfaces(
$node['source_data'],
// foreach ($interfaces as $interface) {
// $relations = modules_get_relations(
// ['id_module' => $interface['id_agente_modulo']]
// );
// if (empty($relations) === true) {
// $relations = [];
// }
// foreach ($relations as $relation) {
// Get the links althought they are deleted (for to
// avoid to add)
// Check if the module is ping.
// if (modules_get_agentmodule_type($relation['module_a']) === '6') {
// The pings modules are not exist as interface
// the link is with the agent.
// $node_a = db_get_value_filter(
// 'id',
// 'titem',
// [
// 'source_data' => modules_get_agentmodule_agent(
// $relation['module_a']
// ),
// 'id_map' => $id_networkmap,
// ]
// );
// } else {
// $node_a = db_get_value_filter(
// 'id',
// 'titem',
// [
// 'source_data' => $relation['module_a'],
// 'type' => 1,
// 'id_map' => $id_networkmap,
// ]
// );
// }
// Check if the module is ping.
// if (modules_get_agentmodule_type($relation['module_b']) == 6) {
// The pings modules are not exist as interface
// the link is with the agent.
// $node_b = db_get_value_filter(
// 'id',
// 'titem',
// [
// 'source_data' => modules_get_agentmodule_agent(
// $relation['module_b']
// ),
// 'id_map' => $id_networkmap,
// ]
// );
// } else {
// $node_b = db_get_value_filter(
// 'id',
// 'titem',
// [
// 'source_data' => $relation['module_b'],
// 'type' => 1,
// 'id_map' => $id_networkmap,
// ]
// );
// }
// $exist = db_get_row_filter(
// 'trel_item',
// [
// 'id_map' => $id_networkmap,
// 'id_parent_source_data' => $relation['module_a'],
// 'id_child_source_data' => $relation['module_b'],
// 'deleted' => 0,
// ]
// );
// $exist_reverse = db_get_row_filter(
// 'trel_item',
// [
// 'id_map' => $id_networkmap,
// 'id_parent_source_data' => $relation['module_b'],
// 'id_child_source_data' => $relation['module_a'],
// 'deleted' => 0,
// ]
// );
// if (empty($exist) && empty($exist_reverse)) {
// Create the nodes for interfaces
// Ag1 ----- I1 ------ I2 ----- Ag2
// * 2 interfaces nodes
// * 3 relations
// * I1 between I2
// * Ag1 between I1
// * Ag2 between I2
//
// But check if it exists the relations
// agent between interface.
// if ($interface['id_agente_modulo'] == $relation['module_a']) {
// $agent_a = $interface['id_agente'];
// $agent_b = modules_get_agentmodule_agent(
// $relation['module_b']
// );
// } else {
// $agent_a = modules_get_agentmodule_agent(
// $relation['module_a']
// );
// $agent_b = $interface['id_agente'];
// }
// $item_a = db_get_value(
// 'id',
// 'titem',
// 'source_data',
// $agent_a
// );
// $item_b = db_get_value(
// 'id',
// 'titem',
// 'source_data',
// $agent_b
// );
// hd('----------------------', true);
// hd($agent_a, true);
// hd($agent_b, true);
// foreach ($interfaces as $interface) {
// $relations = modules_get_relations(
// ['id_module' => $interface['id_agente_modulo']]
// );
// if (empty($relations) === true) {
// $relations = [];
// }
// foreach ($relations as $relation) {hd($item_a. '<->'. $item_b, true);
// hd('----------------------', true);
// continue;
// $exist_node_interface1 = db_get_row_filter(
// 'titem',
// [
// 'id_map' => $id_networkmap,
// 'type' => 0,
// 'source_data' => $relation['module_a'],
// ]
// );
// if (empty($exist_node_interface1) === true) {
// Crete the interface node
// and create the relation between agent and
// interface.
// $style = [];
// $style['id_agent'] = $agent_a;
// $style['shape'] = 'circle';
// $style['image'] = 'images/mod_snmp_proc.png';
// $style['width'] = 50;
// $style['height'] = 16;
// $style['label'] = modules_get_agentmodule_name($relation['module_a']);
// $id_int1 = db_process_sql_insert(
// 'titem',
// [
// 'id_map' => $id_networkmap,
// 'x' => 666,
// 'y' => 666,
// 'z' => 0,
// 'deleted' => 0,
// 'type' => 1,
// 'refresh' => 0,
// 'source' => 0,
// 'source_data' => $relation['module_a'],
// 'style' => json_encode($style),
// ]
// );
// $node_interface1 = db_get_row_filter(
// 'titem',
// [
// 'id_map' => $id_networkmap,
// 'type' => 1,
// 'id' => $id_int1,
// ]
// );
// $node_agent1 = db_get_value(
// 'id',
// 'titem',
// 'source_data',
// $agent_a
// );
// db_process_sql_insert(
// 'trel_item',
// [
// 'id_map' => $id_networkmap,
// 'id_parent' => $node_agent1,
// 'id_child' => $node_interface1,
// 'id_parent-source_data' => $agent_a,
// 'id_child-source_data' => $relation['module_a'],
// 'parent_type' => 0,
// 'child_type' => 1,
// ]
// );
// } else {
// $node_interface1 = $exist_node_interface1;
// }
// $exist_node_interface2 = db_get_row_filter(
// 'titem',
// [
// 'id_map' => $id_networkmap,
// 'type' => 1,
// 'source_data' => $relation['module_b'],
// ]
// );
// if (empty($exist_node_interface2) === true) {
// Crete the interface node
// and create the relation between agent and
// interface.
// $style = [];
// $style['id_agent'] = $agent_a;
// $style['shape'] = 'circle';
// $style['image'] = 'images/mod_snmp_proc.png';
// $style['width'] = 50;
// $style['height'] = 16;
// $style['label'] = modules_get_agentmodule_name($relation['module_b']);
// $id_int2 = db_process_sql_insert(
// 'titem',
// [
// 'id_map' => $id_networkmap,
// 'x' => 666,
// 'y' => 666,
// 'z' => 0,
// 'deleted' => 0,
// 'type' => 1,
// 'refresh' => 0,
// 'source' => 0,
// 'source_data' => $relation['module_b'],
// 'style' => json_encode($style),
// ]
// );
// $node_interface2 = db_get_row_filter(
// 'titem',
// [
// 'id_map' => $id_networkmap,
// 'type' => 1,
// 'id' => $id_int1,
// ]
// );
// $node_agent1 = db_get_value(
// 'id',
// 'titem',
// 'source_data',
// $agent_a
// );
// db_process_sql_insert(
// 'trel_item',
// [
// 'id_map' => $id_networkmap,
// 'id_parent' => $node_agent1,
// 'id_child' => $node_interface1,
// 'id_parent-source_data' => $agent_a,
// 'id_child-source_data' => $relation['module_b'],
// 'parent_type' => 0,
// 'child_type' => 1,
// ]
// );
// } else {
// $node_interface2 = $exist_node_interface2;
// }
// if (empty($node_interface1) === false && empty($node_interface2) === false) {
// if (is_array($node_interface1) === true) {
// $node_interface1 = $node_interface1['id'];
// }
// if (is_array($node_interface2) === true) {
// $node_interface2 = $node_interface2['id'];
// }
// db_process_sql_insert(
// 'trel_item',
// [
// 'id_map' => $id_networkmap,
// 'id_parent' => $node_interface2,
// 'id_child' => $node_interface1,
// 'id_parent_source_data' => $relation['module_b'],
// 'id_child_source_data' => $relation['module_a'],
// 'parent_type' => 1,
// 'child_type' => 1,
// ]
// );
// }
// }
// }
// }
$relations = modules_get_relations(
[
'id_agente',
'id_agente_modulo',
'id_agent' => $node['source_data'],
'networkmap' => true,
]
);
if (empty($interfaces) === true) {
$interfaces = [];
}
foreach ($interfaces as $interface) {
$relations = modules_get_relations(
['id_module' => $interface['id_agente_modulo']]
);
if (empty($relations) === true) {
$relations = [];
}
foreach ($relations as $relation) {
// Get the links althought they are deleted (for to
// avoid to add)
// Check if the module is ping.
if (modules_get_agentmodule_type($relation['module_a']) === '6') {
// The pings modules are not exist as interface
// the link is with the agent.
$node_a = db_get_value_filter(
'id',
'titem',
[
'source_data' => modules_get_agentmodule_agent(
$relation['module_a']
),
'id_map' => $id_networkmap,
]
);
} else {
$node_a = db_get_value_filter(
'id',
'titem',
[
'source_data' => $relation['module_a'],
'type' => 1,
'id_map' => $id_networkmap,
]
);
}
// Check if the module is ping.
if (modules_get_agentmodule_type($relation['module_b']) == 6) {
// The pings modules are not exist as interface
// the link is with the agent.
$node_b = db_get_value_filter(
'id',
'titem',
[
'source_data' => modules_get_agentmodule_agent(
$relation['module_b']
),
'id_map' => $id_networkmap,
]
);
} else {
$node_b = db_get_value_filter(
'id',
'titem',
[
'source_data' => $relation['module_b'],
'type' => 1,
'id_map' => $id_networkmap,
]
);
}
$exist = db_get_row_filter(
'trel_item',
[
'id_map' => $id_networkmap,
'id_parent_source_data' => $relation['module_a'],
'id_child_source_data' => $relation['module_b'],
'deleted' => 0,
]
);
$exist_reverse = db_get_row_filter(
'trel_item',
[
'id_map' => $id_networkmap,
'id_parent_source_data' => $relation['module_b'],
'id_child_source_data' => $relation['module_a'],
'deleted' => 0,
]
);
if (empty($exist) && empty($exist_reverse)) {
// Create the nodes for interfaces
// Ag1 ----- I1 ------ I2 ----- Ag2
// * 2 interfaces nodes
// * 3 relations
// * I1 between I2
// * Ag1 between I1
// * Ag2 between I2
//
// But check if it exists the relations
// agent between interface.
if ($interface['id_agente_modulo'] == $relation['module_a']) {
$agent_a = $interface['id_agente'];
$agent_b = modules_get_agentmodule_agent(
$relation['module_b']
);
} else {
$agent_a = modules_get_agentmodule_agent(
$relation['module_a']
);
$agent_b = $interface['id_agente'];
}
$exist_node_interface1 = db_get_row_filter(
'titem',
[
'id_map' => $id_networkmap,
'type' => 1,
'source_data' => $relation['module_a'],
]
);
if (empty($exist_node_interface1) === true) {
// Crete the interface node
// and create the relation between agent and
// interface.
$style = [];
$style['id_agent'] = $agent_a;
$style['shape'] = 'circle';
$style['image'] = 'images/mod_snmp_proc.png';
$style['width'] = 50;
$style['height'] = 16;
$style['label'] = modules_get_agentmodule_name($relation['module_a']);
$id_int1 = db_process_sql_insert(
'titem',
[
'id_map' => $id_networkmap,
'x' => 666,
'y' => 666,
'z' => 0,
'deleted' => 0,
'type' => 1,
'refresh' => 0,
'source' => 0,
'source_data' => $relation['module_a'],
'style' => json_encode($style),
]
);
$node_interface1 = db_get_row_filter(
'titem',
[
'id_map' => $id_networkmap,
'type' => 1,
'id' => $id_int1,
]
);
$node_agent1 = db_get_value(
'id',
'titem',
'source_data',
$agent_a
);
db_process_sql_insert(
'trel_item',
[
'id_map' => $id_networkmap,
'id_parent' => $node_agent1,
'id_child' => $node_interface1,
'id_parent-source_data' => $agent_a,
'id_child-source_data' => $relation['module_a'],
'parent_type' => 0,
'child_type' => 1,
]
);
} else {
$node_interface1 = $exist_node_interface1;
}
$exist_node_interface2 = db_get_row_filter(
'titem',
[
'id_map' => $id_networkmap,
'type' => 1,
'source_data' => $relation['module_b'],
]
);
if (empty($exist_node_interface2) === true) {
// Crete the interface node
// and create the relation between agent and
// interface.
$style = [];
$style['id_agent'] = $agent_a;
$style['shape'] = 'circle';
$style['image'] = 'images/mod_snmp_proc.png';
$style['width'] = 50;
$style['height'] = 16;
$style['label'] = modules_get_agentmodule_name($relation['module_b']);
$id_int2 = db_process_sql_insert(
'titem',
[
'id_map' => $id_networkmap,
'x' => 666,
'y' => 666,
'z' => 0,
'deleted' => 0,
'type' => 1,
'refresh' => 0,
'source' => 0,
'source_data' => $relation['module_b'],
'style' => json_encode($style),
]
);
$node_interface2 = db_get_row_filter(
'titem',
[
'id_map' => $id_networkmap,
'type' => 1,
'id' => $id_int1,
]
);
$node_agent1 = db_get_value(
'id',
'titem',
'source_data',
$agent_a
);
db_process_sql_insert(
'trel_item',
[
'id_map' => $id_networkmap,
'id_parent' => $node_agent1,
'id_child' => $node_interface1,
'id_parent-source_data' => $agent_a,
'id_child-source_data' => $relation['module_b'],
'parent_type' => 0,
'child_type' => 1,
]
);
} else {
$node_interface2 = $exist_node_interface2;
}
if (empty($node_interface1) === false && empty($node_interface2) === false) {
if (is_array($node_interface1) === true) {
$node_interface1 = $node_interface1['id'];
}
if (is_array($node_interface2) === true) {
$node_interface2 = $node_interface2['id'];
}
db_process_sql_insert(
'trel_item',
[
'id_map' => $id_networkmap,
'id_parent' => $node_interface2,
'id_child' => $node_interface1,
'id_parent_source_data' => $relation['module_b'],
'id_child_source_data' => $relation['module_a'],
'parent_type' => 1,
'child_type' => 1,
]
);
}
}
}
}
$relations = modules_get_relations(['id_agent' => $node['source_data']]);
if ($relations === false) {
$relations = [];
}
// Relations Module <-> Module.
foreach ($relations as $key => $relation) {
$module_a = $relation['module_a'];
$agent_a = modules_get_agentmodule_agent($module_a);
@ -4682,58 +4683,26 @@ function networkmap_get_new_nodes_and_links($networkmap, $x, $y)
);
if (empty($exist) === true && empty($exist_reverse) === true) {
$style = [];
$style['id_agent'] = $agent_a;
$style['shape'] = 'circle';
$style['image'] = 'images/mod_snmp_proc.png';
$style['width'] = 50;
$style['height'] = 16;
$style['label'] = modules_get_agentmodule_name($module_a);
$id_int1 = db_process_sql_insert(
$item_a = db_get_value(
'id',
'titem',
[
'id_map' => $id_networkmap,
'x' => 666,
'y' => 666,
'z' => 0,
'deleted' => 0,
'type' => 1,
'refresh' => 0,
'source' => 0,
'source_data' => $module_a,
'style' => json_encode($style),
]
'source_data',
$agent_a
);
$style = [];
$style['id_agent'] = $agent_b;
$style['shape'] = 'circle';
$style['image'] = 'images/mod_snmp_proc.png';
$style['width'] = 50;
$style['height'] = 16;
$style['label'] = modules_get_agentmodule_name($module_b);
$id_int2 = db_process_sql_insert(
$item_b = db_get_value(
'id',
'titem',
[
'id_map' => $id_networkmap,
'x' => 666,
'y' => 666,
'z' => 0,
'deleted' => 0,
'type' => 1,
'refresh' => 0,
'source' => 0,
'source_data' => $module_b,
'style' => json_encode($style),
]
'source_data',
$agent_b
);
db_process_sql_insert(
'trel_item',
[
'id_map' => $id_networkmap,
'id_parent' => $id_int1,
'id_child' => $id_int2,
'id_parent' => $item_a,
'id_child' => $item_b,
'id_parent_source_data' => $module_a,
'id_child_source_data' => $module_b,
'parent_type' => 1,
@ -4742,6 +4711,30 @@ function networkmap_get_new_nodes_and_links($networkmap, $x, $y)
);
}
}
// Get L2 interface relations.
$interfaces = modules_get_interfaces(
$node['source_data'],
[
'id_agente',
'id_agente_modulo',
]
);
if (empty($interfaces) === true) {
$interfaces = [];
}
// hd('interfaces', true);
// foreach ($interfaces as $interface) {
// $relations = modules_get_relations(
// ['id_module' => $interface['id_agente_modulo']]
// );
// if (empty($relations) === true) {
// $relations = [];
// }
// foreach ($relations as $relation) {
// }
// }
}
}

View File

@ -2505,7 +2505,7 @@ function refresh() {
if (array_nodes.length === 0 && array_links.length === 0) {
update_networkmap();
$("#spinner_networkmap").css("display", "none");
window.location = location;
startCountDown(refresh_time);
} else {
if (array_nodes.length > 0) {
$.ajax({
@ -2535,6 +2535,22 @@ function refresh() {
});
}
function startCountDown(duration) {
$("div.vc-countdown").countdown("destroy");
if (!duration) return;
var t = new Date();
t.setTime(t.getTime() + duration * 1000);
$("div.vc-countdown").countdown({
until: t,
format: "MS",
layout: "(%M%nn%M:%S%nn%S Until refreshed) ",
alwaysExpire: true,
onExpiry: function() {
refresh();
}
});
}
function restart_map() {
$(
"<div id='restart_map_confirm' class='dialog ui-dialog-content' title='" +
@ -3072,6 +3088,10 @@ function init_graph(parameter_object) {
window.url_background_grid = "";
}
if (typeof parameter_object.refresh_time != "undefined") {
window.refresh_time = parameter_object.refresh_time;
}
var rect_center_x = graph.nodes[0].x;
var rect_center_y = graph.nodes[0].y;