diff --git a/pandora_console/include/functions_networkmap.php b/pandora_console/include/functions_networkmap.php index 6265200eb1..3aaf1ba25f 100644 --- a/pandora_console/include/functions_networkmap.php +++ b/pandora_console/include/functions_networkmap.php @@ -223,827 +223,6 @@ function networkmap_generate_hash($pandora_name, $group = 0, return $return; } -function networkmap_get_nodes_and_links($pandora_name, $group = 0, - $simple = 0, $font_size = 12, $layout = 'radial', $nooverlap = 0, - $zoom = 1, $ranksep = 2.5, $center = 0, $regen = 1, $pure = 0, - $id_networkmap = 0, $show_snmp_modules = 0, $cut_names = true, - $relative = false, $text_filter = '', $l2_network_or_mixed = false, - $ip_mask = null, $dont_show_subgroups = false, $strict_user = false, - $size_canvas = null, $old_mode = false, $id_tag = 0, - $show_all_modules = false, $only_modules_alerts = false, - $filter_module_group = 0, $show_modulegroup = false, - $show_groups = false, $show_agents = true, $show_policies = false) { - - global $config; - - $l2_network = true; - $l2_network_or_mixed == "mix_l2_l3"; - /* - if ($l2_network_or_mixed === 'mix_l2_l3') { - $l2_network = true; - } - else { - $l2_network = $l2_network_or_mixed; - } - */ - - if ($l2_network) { - $nooverlap = 1; - } - - $parents = array(); - $orphans = array(); - - $filter = array (); - $filter['disabled'] = 0; - - if (!empty($text_filter)) { - switch ($config['dbtype']) { - case "mysql": - case "postgresql": - $filter[] = - '(nombre COLLATE utf8_general_ci LIKE "%' . $text_filter . '%")'; - break; - case "oracle": - $filter[] = - '(upper(nombre) LIKE upper(\'%' . $text_filter . '%\'))'; - break; - } - } - - if ($group >= 1) { - if ($dont_show_subgroups) - $filter['id_grupo'] = $group; - else { - $childrens = groups_get_childrens($group, null, true); - if (!empty($childrens)) { - $childrens = array_keys($childrens); - - $filter['id_grupo'] = $childrens; - $filter['id_grupo'][] = $group; - } - else { - $filter['id_grupo'] = $group; - } - } - - //Order by id_parent ascendant for to avoid the bugs - //because the first agents to process in the next - //foreach loop are without parent (id_parent = 0) - - // Get agents data - if ($strict_user) { - if ($dont_show_subgroups) - $filter['id_group'] = $group; - else { - if (!empty($childrens)) { - foreach ($childrens as $children) { - $filter_id_groups[$children] = $children; - } - } - $filter_id_groups[$group] = $group; - $filter['id_group'] = implode(',', $filter_id_groups); - } - - $filter['group_by'] = 'tagente.id_agente'; - $fields = array ('tagente.id_grupo, tagente.nombre, tagente.id_os, tagente.id_parent, tagente.id_agente, - tagente.normal_count, tagente.warning_count, tagente.critical_count, - tagente.unknown_count, tagente.total_count, tagente.notinit_count'); - $acltags = tags_get_user_module_and_tags ($config['id_user'],'AR', $strict_user); - $agents = tags_get_all_user_agents (false, $config['id_user'], $acltags, $filter, $fields, false, $strict_user, true); - } - else { - $agents = agents_get_agents ($filter, - array ('id_grupo, nombre, id_os, id_parent, id_agente, - normal_count, warning_count, critical_count, - unknown_count, total_count, notinit_count'), 'AR', - array('field' => 'id_parent', 'order' => 'ASC')); - } - - } - else if ($group == -666) { - $agents = false; - } - else if (!empty($ip_mask)) { - $agents = networkmap_get_new_nodes_from_ip_mask($ip_mask, - array ('id_grupo, nombre, id_os, id_parent, id_agente, - normal_count, warning_count, critical_count, - unknown_count, total_count, notinit_count'), $strict_user); - - if (!empty($text_filter)) { - foreach ($agents as $index => $agent) { - if (strstr($agent['nombre'], $text_filter) === false) { - unset($agents[$index]); - } - } - } - } - else { - //Order by id_parent ascendant for to avoid the bugs - //because the first agents to process in the next - //foreach loop are without parent (id_parent = 0) - - if ($strict_user) { - $filter['group_by'] = 'tagente.id_agente'; - $fields = array ('tagente.id_grupo, tagente.nombre, tagente.id_os, tagente.id_parent, tagente.id_agente, - tagente.normal_count, tagente.warning_count, tagente.critical_count, - tagente.unknown_count, tagente.total_count, tagente.notinit_count'); - $acltags = tags_get_user_module_and_tags ($config['id_user'],'AR', $strict_user); - $agents = tags_get_all_user_agents (false, $config['id_user'], $acltags, $filter, $fields, false, $strict_user, true); - } - else { - $agents = agents_get_agents ($filter, - array ('id_grupo, nombre, id_os, id_parent, id_agente, - normal_count, warning_count, critical_count, - unknown_count, total_count, notinit_count'), 'AR', - array('field' => 'id_parent', 'order' => 'ASC')); - } - } - - if ($agents === false) - //return false; - $agents = array(); - - // Filter by tags - if (!empty($id_tag)) { - foreach ($agents as $index => $agent) { - if (!tags_agent_has_tag($agent['id_agente'], $id_tag)) { - unset($agents[$index]); - } - } - } - - // Get policy data - if ($show_policies) { - if (enterprise_installed()) { - enterprise_include_once("include/functions_pandora_networkmap.php"); - - $policies = networkmap_get_policies(array($group)); - - $agents = networkmap_filter_agents_policies(array($policies, $agents)); - } - } - - // Get groups data - if ($show_groups) { - if ($group > 0) { - $groups = array(); - $id_groups = groups_get_id_recursive($group, true); - - foreach($id_groups as $id_group) { - $add = false; - if (check_acl($config["id_user"], $id_group, 'AR')) { - $add = true; - } - - if ($add) { - $groups[] = db_get_row ('tgrupo', 'id_grupo', $id_group); - } - } - - $filter['id_grupo'] = $id_groups; - } - else { - if ($strict_user) { - $groups = users_get_groups ($config['id_user'],"AR", false, true); - } - else { - $groups = db_get_all_rows_in_table ('tgrupo'); - } - if ($groups === false) { - $groups = array(); - } - } - } - - $nodes = array (); - $node_count = 0; - - // Parse policies - if ($show_policies) { - $nodes_policies = array(); - foreach ($policies as $policy) { - $node_count ++; - $policy['type'] = 'policy'; - $policy['id_node'] = $node_count; - - $orphans[$node_count] = 1; - - $nodes[$node_count] = $policy; - - // Add node - $nodes_policies[$policy['id']] = $policy; - } - } - - // Parse groups - if ($show_groups) { - $nodes_groups = array(); - foreach ($groups as $group2) { - $node_count ++; - $group2['type'] = 'group'; - $group2['id_node'] = $node_count; - - // Add node - $nodes_groups[$group2['id_grupo']] = $group2; - } - - - - $groups_hiden = array(); - foreach ($nodes_groups as $node_group) { - - //~ $node_count++; - - // Save node parent information to define edges later - if ($node_group['parent'] != "0" && $node_group['id_grupo'] != $group) { - if ((!$dont_show_subgroups) || ($group == 0)) { - $parents[$node_count] = - $nodes_groups[$node_group['parent']]['id_node']; - } - else { - $groups_hiden[$node_group['id_grupo']] = 1; - continue; - } - } - else { - $orphans[$node_group['id_node']] = 1; - } - - $nodes[$node_group['id_node']] = $node_group; - } - - } - - if ($show_agents) { - // Parse agents - - // Add node refs - $node_ref = array(); - $modules_node_ref = array(); - - $module_groups = array(); - - foreach ($agents as $agent) { - $node_count++; - - if ($show_groups) { - $parents[$node_count] = $agent['parent'] = $nodes_groups[$agent['id_grupo']]['id_node']; - } - - if ($show_policies) { - $id_policy = db_get_value( - 'id_policy', - 'tpolicy_agents', 'id_agent', $agent['id_agente']); - if (!empty($id_policy)) - $parents[$node_count] = $agent['parent'] = $nodes_policies[$id_policy]['id_node']; - } - - $node_ref[$agent['id_agente']] = $node_count; - - $agent['id_node'] = $node_count; - $agent['type'] = 0; - - // Add node - $nodes[$node_count] = $agent; - - if ($l2_network || $show_snmp_modules) { - $filter = array(); - $filter['disabled'] = 0; - - // Get agent modules data - if ($strict_user) { - $modules = tags_get_agent_modules ($agent['id_agente'], false, $acltags, false, $filter, false); - } - else { - $filter_get_modules = $filter; - if ($filter_module_group > 0) { - $filter_get_modules['id_module_group'] = $filter_module_group; - } - - $modules = agents_get_modules( - $agent['id_agente'], '*', $filter_get_modules, true, true); - } - - if ($modules === false) { - $modules = array(); - } - - $module_groups[$agent['id_node']] = array(); - - // Parse modules - foreach ($modules as $key => $module) { - - if (!$show_all_modules || $show_snmp_modules) { - if ($module['id_tipo_modulo'] != 18 && - (!$l2_network || $module['id_tipo_modulo'] != 6)) { - continue; - } - } - - $status_module = modules_get_agentmodule_status( - $module['id_agente_modulo']); - - if ($only_modules_alerts) { - if (($status_module != AGENT_MODULE_STATUS_NORMAL_ALERT) || - ($status_module != AGENT_MODULE_STATUS_WARNING_ALERT) || - ($status_module != AGENT_MODULE_STATUS_CRITICAL_ALERT)) { - - continue; - } - } - - $node_count ++; - $modules_node_ref[$module['id_agente_modulo']] = $node_count; - $module['id_node'] = $node_count; - $module['type'] = 1; - $module['status'] = $status_module; - - // Try to get the interface name - if (preg_match ("/_(.+)$/" , (string)$module['nombre'], $matches)) { - if ($matches[1]) { - $module['nombre'] = $matches[1]; - } - } - - //// Show module groups - if ($show_modulegroup) { - - $id_node_module_group = array_search( - $module['id_module_group'], - $module_groups[$agent['id_node']]); - - if ($id_node_module_group === false) { - $name = db_get_value('name', 'tmodule_group', - 'id_mg', $module['id_module_group']); - - if (empty($name)) - $name = _('N/A'); - - $node_count ++; - - $module_group = array(); - $module_group['name'] = $name; - $module_group['type'] = "module_group"; - $module_group['id_server'] = $agent['id_server']; - $module_group['id_node'] = $node_count; - $module_group['parent'] = $agent['id_node']; - $module_group['id_module_group'] = $module['id_module_group']; - $module_group['id_agent'] = $agent['id_agente']; - $nodes[$node_count] = $module_group; - - $id_node_module_group = $node_count; - - $module_groups[$agent['id_node']][$node_count] - = $module['id_module_group']; - - $parents[$id_node_module_group] = - $module_group['parent']; - } - - //Change the status to module group to worst - //~ $status = modules_get_agentmodule_status( - //~ $module['id_agente_modulo'], - //~ false, true, $agent['id_server']); - - switch ($module['status']) { - case 0: // Normal monitor - if (empty( - $nodes[$id_node_module_group]['status'])) - { - $nodes[$id_node_module_group]['status'] = 0; - } - elseif ($nodes[$id_node_module_group]['status'] - == -1) { - $nodes[$id_node_module_group]['status'] = 0; - } - break; - case 1: //Critical monitor - $nodes[$id_node_module_group]['status'] = 1; - break; - case 2: // Warning monitor - if (empty( - $nodes[$id_node_module_group]['status'])) - { - $nodes[$id_node_module_group]['status'] = 0; - } - elseif ($nodes[$id_node_module_group]['status'] - != 1) { - $nodes[$id_node_module_group]['status'] = 2; - } - break; - case 4: // Alert fired - if (empty( - $nodes[$id_node_module_group]['status'])) - { - $nodes[$id_node_module_group]['status'] = 4; - } - elseif (($nodes[$id_node_module_group]['status'] - == 0) || - ($nodes[$id_node_module_group]['status'] - == -1)) { - $nodes[$id_node_module_group]['status'] = 4; - } - break; - default: // Unknown monitor - $nodes[$id_node_module_group]['status'] = -1; - break; - } - - $module['parent'] = $id_node_module_group; - - $parents[$module['id_node']] = - $id_node_module_group; - - } - else { - $parents[$module['id_node']] = - $module['parent'] = - $agent['id_node']; - } - //////////////////////////////////////////////////////// - - // Add node - $nodes[$module['id_node']] = $module; - } - } - - - - } - } // End if ($show_agents) - - $l2_network_or_mixed = 'mix_l2_l3'; - // Drop the modules without a partner if l2_network is true - // and the snmp interfaces token is false - if ($l2_network_or_mixed === 'mix_l2_l3') { - - if (!$show_all_modules || $show_snmp_modules) { - - foreach ($modules_node_ref as $id_module => $node_count) { - - if (! modules_relation_exists($id_module, array_keys($modules_node_ref))) { - if ($show_snmp_modules) { - $module_type = modules_get_agentmodule_type($id_module); - if ($module_type != 18) { - unset($nodes[$node_count]); - unset($parents[$node_count]); - } - } - else { - - - unset($nodes[$node_count]); - unset($orphans[$node_count]); - unset($parents[$node_count]); - } - } - else { - $module_type = modules_get_agentmodule_type($id_module); - if ($module_type != 18) { - - - unset($nodes[$node_count]); - unset($orphans[$node_count]); - unset($parents[$node_count]); - } - } - } - - } - - // Addded the relationship of parents of agents - foreach ($agents as $agent) { - if ($agent['id_parent'] != "0" && - array_key_exists($agent['id_parent'], $node_ref)) { - - $parents[$node_ref[$agent['id_agente']]] = $node_ref[$agent['id_parent']]; - } - else { - $orphans[$node_ref[$agent['id_agente']]] = 1; - } - } - - - - } - else if ($l2_network) { - foreach ($modules_node_ref as $id_module => $node_count) { - if (! modules_relation_exists($id_module, array_keys($modules_node_ref))) { - if ($show_snmp_modules) { - $module_type = modules_get_agentmodule_type($id_module); - if ($module_type != 18) { - unset($nodes[$node_count]); - unset($orphans[$node_count]); - unset($parents[$node_count]); - } - } - else { - unset($nodes[$node_count]); - unset($orphans[$node_count]); - unset($parents[$node_count]); - } - } - else { - $module_type = modules_get_agentmodule_type($id_module); - if ($module_type != 18) { - unset($nodes[$node_count]); - unset($orphans[$node_count]); - unset($parents[$node_count]); - } - } - } - } - else { - // Addded the relationship of parents of agents - foreach ($agents as $agent) { - if ($agent['id_parent'] != "0" && - array_key_exists($agent['id_parent'], $node_ref)) { - - $parents[$node_ref[$agent['id_agente']]] = $node_ref[$agent['id_parent']]; - } - else { - $orphans[$node_ref[$agent['id_agente']]] = 1; - } - } - } - - $stats = array(); - $edges = array(); - - // Create nodes - foreach ($nodes as $node_id => $node) { - if ($center > 0 && ! networkmap_is_descendant ($node_id, $center, $parents)) { - unset ($parents[$node_id]); - unset ($orphans[$node_id]); - unset ($nodes[$node_id]); - continue; - } - - switch ($node['type']) { - case 'policy': - break; - case 'group': - $stats['groups'][] = $node['id_grupo']; - break; - case 'agent': - $stats['agents'][] = $node['id_agente']; - break; - case 'module': - $stats['modules'][] = $node['id_agente_modulo']; - break; - case 'module_group': - $stats['module_group'][] = null; - break; - } - } - - // Define edges - foreach ($parents as $node => $parent_id) { - // Verify that the parent is in the graph - if (isset ($nodes[$parent_id])) { - $edges[$node] = $parent_id; - } - else { - $orphans[$node] = 1; - } - } - - //------------------------------------------------------------------ - // INIT Relations between the nodes - //------------------------------------------------------------------ - foreach ($modules_node_ref as $id_module => $id_node) { - $relations = db_get_all_rows_sql( - "SELECT module_b AS id_module - FROM tmodule_relationship - WHERE module_a = " . $id_module . " - UNION - SELECT module_a AS id_module - FROM tmodule_relationship - WHERE module_b = " . $id_module); - if (empty($relations)) - $relations = array(); - - $id_module_type = modules_get_agentmodule_type($id_module); - $agent_id = modules_get_agentmodule_agent($id_module); - - - - foreach ($relations as $relation) { - $id_module_relation = $relation['id_module']; - - $id_module_type_relation = - modules_get_agentmodule_type($id_module_relation); - $agent_id_relation = modules_get_agentmodule_agent($id_module_relation); - - - - if ($id_module_type == 18 && $id_module_type_relation == 18) { - - if (isset($modules_node_ref[$id_module]) && - isset($modules_node_ref[$id_module_relation])) { - - - $exists = - networkmap_check_exists_edge_between_nodes( - $edges, - $modules_node_ref[$id_module], - $modules_node_ref[$id_module_relation] - ); - - if (!$exists) { - if (empty($edges[$modules_node_ref[$id_module]])) { - - $edges[$modules_node_ref[$id_module]] = - $modules_node_ref[$id_module_relation]; - } - else { - - - - - - $edges[$modules_node_ref[$id_module]] = - (array)$edges[$modules_node_ref[$id_module]]; - $edges[$modules_node_ref[$id_module]][] = - $modules_node_ref[$id_module_relation]; - } - } - } - } - // Relation into agents - elseif ($id_module_type == 6 && $id_module_type_relation == 6) { - if ($l2_network_or_mixed !== 'mix_l2_l3') { - if (isset($node_ref[$agent_id]) && - isset($node_ref[$agent_id_relation])) { - - - $exists = - networkmap_check_exists_edge_between_nodes( - $edges, - $node_ref[$agent_id], - $node_ref[$agent_id_relation] - ); - - if (!$exists) { - if (empty($edges[$node_ref[$agent_id]])) { - - - $edges[$node_ref[$agent_id]] = - $node_ref[$agent_id_relation]; - } - else { - - - - - if (!$exists) { - $edges[$node_ref[$agent_id]] = - (array)$edges[$node_ref[$agent_id]]; - $edges[$node_ref[$agent_id]][] = - $node_ref[$agent_id_relation]; - } - } - } - - - } - } - } - elseif ($id_module_type == 6 && $id_module_type_relation == 18) { - if (isset($node_ref[$agent_id]) && - isset($modules_node_ref[$id_module_relation])) { - - - $exists = - networkmap_check_exists_edge_between_nodes( - $edges, - $node_ref[$agent_id], - $modules_node_ref[$id_module_relation] - ); - - if (!$exists) { - if (empty($edges[$node_ref[$agent_id]])) { - $edges[$node_ref[$agent_id]] = - $modules_node_ref[$id_module_relation]; - } - else { - - - - - if (!$exists) { - $edges[$node_ref[$agent_id]] = - (array)$edges[$node_ref[$agent_id]]; - $edges[$node_ref[$agent_id]][] = - $modules_node_ref[$id_module_relation]; - } - } - } - - } - } - elseif ($id_module_type_relation == 6 && $id_module_type == 18) { - if (isset($node_ref[$agent_id_relation]) && - isset($modules_node_ref[$id_module])) { - - - - $exists = - networkmap_check_exists_edge_between_nodes( - $edges, - $node_ref[$agent_id_relation], - $modules_node_ref[$id_module] - ); - - - if (!$exists) { - if (empty($edges[$node_ref[$agent_id_relation]])) { - - - $edges[$node_ref[$agent_id_relation]] = - $modules_node_ref[$id_module]; - } - else { - - - - - if (!$exists) { - $edges[$node_ref[$agent_id_relation]] = - (array)$edges[$node_ref[$agent_id_relation]]; - $edges[$node_ref[$agent_id_relation]][] = - $modules_node_ref[$id_module]; - } - } - } - - - - } - } - - - - } - } - - //------------------------------------------------------------------ - // END Relations between the nodes - //------------------------------------------------------------------ - - - // Define edges for the module interfaces relations - // Get the remote_snmp_proc relations - //~ $relations = modules_get_relations(); - //~ if ($relations === false) - //~ $relations = array(); - //~ foreach ($relations as $key => $relation) { - //~ $module_a = $relation['module_a']; - //~ $module_a_type = modules_get_agentmodule_type($module_a); - //~ $agent_a = modules_get_agentmodule_agent($module_a); - //~ $module_b = $relation['module_b']; - //~ $module_b_type = modules_get_agentmodule_type($module_b); - //~ $agent_b = modules_get_agentmodule_agent($module_b); - //~ - //~ if ($module_a_type == 18 && $module_b_type == 18) { - //~ if (isset($modules_node_ref[$module_a]) && - //~ isset($modules_node_ref[$module_b])) { - //~ - //~ $edges[$modules_node_ref[$module_a]] = - //~ $modules_node_ref[$module_b]; - //~ } - //~ } - //~ // Relation into agents - //~ elseif ($module_a_type == 6 && $module_b_type == 6) { - //~ if ($l2_network_or_mixed !== 'mix_l2_l3') { - //~ if (isset($node_ref[$agent_a]) && - //~ isset($node_ref[$agent_b])) { - //~ - //~ $edges[$node_ref[$agent_a]] = $node_ref[$agent_b]; - //~ } - //~ } - //~ - //~ } - //~ elseif ($module_a_type == 6 && $module_b_type == 18) { - //~ if (isset($node_ref[$agent_a]) && - //~ isset($modules_node_ref[$module_b])) { - //~ - //~ $edges[$node_ref[$agent_a]] = $modules_node_ref[$module_b]; - //~ } - //~ } - //~ elseif ($module_b_type == 6 && $module_a_type == 18) { - //~ if (isset($node_ref[$agent_b]) && - //~ isset($modules_node_ref[$module_a])) { - //~ - //~ $edges[$node_ref[$agent_b]] = $modules_node_ref[$module_a]; - //~ } - //~ } - //~ } - - return array("nodes" => $nodes, "edges" => $edges, "orphans" => $orphans); -} - function networkmap_check_exists_edge_between_nodes($edges, $node_a, $node_b) { $relation = false; @@ -1073,15 +252,14 @@ function networkmap_generate_dot ($pandora_name, $group = 0, $simple = 0, $font_size = 12, $layout = 'radial', $nooverlap = 0, $zoom = 1, $ranksep = 2.5, $center = 0, $regen = 1, $pure = 0, $id_networkmap = 0, $show_snmp_modules = 0, $cut_names = true, - $relative = false, $text_filter = '', $l2_network = false, $ip_mask = null, + $relative = false, $text_filter = '', $ip_mask = null, $dont_show_subgroups = false, $strict_user = false, $size_canvas = null, $old_mode = false) { global $config; - if ($l2_network) { - $nooverlap = 1; - } + $nooverlap = 1; + $parents = array(); $orphans = array(); @@ -1155,17 +333,7 @@ function networkmap_generate_dot ($pandora_name, $group = 0, else if ($group == -666) { $agents = false; } - else if (!empty($ip_mask)) { - $agents = networkmap_get_new_nodes_from_ip_mask($ip_mask, - array ('id_grupo, nombre, id_os, id_parent, id_agente, - normal_count, warning_count, critical_count, - unknown_count, total_count, notinit_count'), $strict_user); - } else { - //Order by id_parent ascendant for to avoid the bugs - //because the first agents to process in the next - //foreach loop are without parent (id_parent = 0) - if ($strict_user) { $filter['group_by'] = 'tagente.id_agente'; $fields = array ('tagente.id_grupo, tagente.nombre, tagente.id_os, tagente.id_parent, tagente.id_agente, @@ -1210,72 +378,51 @@ function networkmap_generate_dot ($pandora_name, $group = 0, // Add node $nodes[$node_count] = $agent; + + $filter = array(); + $filter['disabled'] = 0; - if ($l2_network || $show_snmp_modules) { + // Get agent modules data + if ($strict_user) { + $modules = tags_get_agent_modules ($agent['id_agente'], false, $acltags, false, $filter, false); + } + else { + $modules = agents_get_modules($agent['id_agente'], '*', $filter, true, true); + } + + if ($modules === false) + $modules = array(); + + // Parse modules + foreach ($modules as $key => $module) { - $filter = array(); - $filter['disabled'] = 0; - - // Get agent modules data - if ($strict_user) { - $modules = tags_get_agent_modules ($agent['id_agente'], false, $acltags, false, $filter, false); - } - else { - $modules = agents_get_modules($agent['id_agente'], '*', $filter, true, true); + if ($module['id_tipo_modulo'] != 18 && $module['id_tipo_modulo'] != 6) { + continue; } - if ($modules === false) - $modules = array(); + $node_count ++; + $modules_node_ref[$module['id_agente_modulo']] = $node_count; + $module['id_node'] = $node_count; + $module['type'] = 'module'; - // Parse modules - foreach ($modules as $key => $module) { - - if ($module['id_tipo_modulo'] != 18 && - (!$l2_network || $module['id_tipo_modulo'] != 6)) { - continue; + // Try to get the interface name + if (preg_match ("/_(.+)$/" , (string)$module['nombre'], $matches)) { + if ($matches[1]) { + $module['nombre'] = $matches[1]; } - - $node_count ++; - $modules_node_ref[$module['id_agente_modulo']] = $node_count; - $module['id_node'] = $node_count; - $module['type'] = 'module'; - - // Try to get the interface name - if (preg_match ("/_(.+)$/" , (string)$module['nombre'], $matches)) { - if ($matches[1]) { - $module['nombre'] = $matches[1]; - } - } - - // Save node parent information to define edges later - $parents[$node_count] = $module['parent'] = $agent['id_node']; - - // Add node - $nodes[$node_count] = $module; } + + // Save node parent information to define edges later + $parents[$node_count] = $module['parent'] = $agent['id_node']; + + // Add node + $nodes[$node_count] = $module; } } - // Drop the modules without a partner if l2_network is true - // and the snmp interfaces token is false - if ($l2_network) { - foreach ($modules_node_ref as $id_module => $node_count) { - if (! modules_relation_exists($id_module, array_keys($modules_node_ref))) { - if ($show_snmp_modules) { - $module_type = modules_get_agentmodule_type($id_module); - if ($module_type != 18) { - unset($nodes[$node_count]); - unset($orphans[$node_count]); - unset($parents[$node_count]); - } - } - else { - unset($nodes[$node_count]); - unset($orphans[$node_count]); - unset($parents[$node_count]); - } - } - else { + foreach ($modules_node_ref as $id_module => $node_count) { + if (! modules_relation_exists($id_module, array_keys($modules_node_ref))) { + if ($show_snmp_modules) { $module_type = modules_get_agentmodule_type($id_module); if ($module_type != 18) { unset($nodes[$node_count]); @@ -1283,53 +430,61 @@ function networkmap_generate_dot ($pandora_name, $group = 0, unset($parents[$node_count]); } } + else { + unset($nodes[$node_count]); + unset($orphans[$node_count]); + unset($parents[$node_count]); + } + } + else { + $module_type = modules_get_agentmodule_type($id_module); + if ($module_type != 18) { + unset($nodes[$node_count]); + unset($orphans[$node_count]); + unset($parents[$node_count]); + } } } - else { - // Addded the relationship of parents of agents - foreach ($agents as $agent) { - if ($agent['id_parent'] != "0" && - array_key_exists($agent['id_parent'], $node_ref)) { - - $parents[$node_ref[$agent['id_agente']]] = $node_ref[$agent['id_parent']]; - } - else { - $orphans[$node_ref[$agent['id_agente']]] = 1; - } + + // Addded the relationship of parents of agents + foreach ($agents as $agent) { + if ($agent['id_parent'] != "0" && array_key_exists($agent['id_parent'], $node_ref)) { + + $parents[$node_ref[$agent['id_agente']]] = $node_ref[$agent['id_parent']]; + } + else { + $orphans[$node_ref[$agent['id_agente']]] = 1; } } // Create void statistics array $stats = array(); - if ($l2_network || $old_mode) { - $count = 0; - $group_nodes = 10; - $graph .= networkmap_create_transparent_node($count); - foreach (array_keys($orphans) as $node) { - if ($group_nodes == 0) { - $count++; - $graph .= networkmap_create_transparent_node($count); - - $group_nodes = 10; - } + $count = 0; + $group_nodes = 10; + $graph .= networkmap_create_transparent_node($count); + foreach (array_keys($orphans) as $node) { + if ($group_nodes == 0) { + $count++; + $graph .= networkmap_create_transparent_node($count); - $graph .= networkmap_create_transparent_edge('transp_' . $count, - $node); - - $group_nodes--; - } - } - else { - // Create a central node if orphan nodes exist - if (count ($orphans) || empty ($nodes)) { - $graph .= networkmap_create_pandora_node ($pandora_name, $font_size, $simple, $stats); + $group_nodes = 10; } - // Define edges for orphan nodes - foreach (array_keys($orphans) as $node) { - $graph .= networkmap_create_edge ('0', $node, $layout, $nooverlap, $pure, $zoom, $ranksep, $simple, $regen, $font_size, $group, 'operation/agentes/networkmap', 'topology', $id_networkmap); - } + $graph .= networkmap_create_transparent_edge('transp_' . $count, + $node); + + $group_nodes--; + } + + // Create a central node if orphan nodes exist + if (count ($orphans) || empty ($nodes)) { + $graph .= networkmap_create_pandora_node ($pandora_name, $font_size, $simple, $stats); + } + + // Define edges for orphan nodes + foreach (array_keys($orphans) as $node) { + $graph .= networkmap_create_edge ('0', $node, $layout, $nooverlap, $pure, $zoom, $ranksep, $simple, $regen, $font_size, $group, 'operation/agentes/networkmap', 'topology', $id_networkmap); } // Create nodes @@ -1381,105 +536,102 @@ function networkmap_generate_dot ($pandora_name, $group = 0, // Define edges for the module interfaces relations // Get the remote_snmp_proc relations - if ($l2_network) { - $relations = modules_get_relations(); - if ($relations === false) - $relations = array(); - foreach ($relations as $key => $relation) { - $module_a = $relation['module_a']; - $module_a_type = modules_get_agentmodule_type($module_a); - $agent_a = modules_get_agentmodule_agent($module_a); - $module_b = $relation['module_b']; - $module_b_type = modules_get_agentmodule_type($module_b); - $agent_b = modules_get_agentmodule_agent($module_b); - - if ($module_a_type == 18 && $module_b_type == 18) { - if (isset($modules_node_ref[$module_a]) && - isset($modules_node_ref[$module_b])) { - $graph .= networkmap_create_edge( - $modules_node_ref[$module_a], - $modules_node_ref[$module_b], - $layout, - $nooverlap, - $pure, - $zoom, - $ranksep, - $simple, - $regen, - $font_size, - $group, - 'operation/agentes/networkmap', - 'topology', - $id_networkmap); - } + $relations = modules_get_relations(); + if ($relations === false) + $relations = array(); + foreach ($relations as $key => $relation) { + $module_a = $relation['module_a']; + $module_a_type = modules_get_agentmodule_type($module_a); + $agent_a = modules_get_agentmodule_agent($module_a); + $module_b = $relation['module_b']; + $module_b_type = modules_get_agentmodule_type($module_b); + $agent_b = modules_get_agentmodule_agent($module_b); + + if ($module_a_type == 18 && $module_b_type == 18) { + if (isset($modules_node_ref[$module_a]) && + isset($modules_node_ref[$module_b])) { + $graph .= networkmap_create_edge( + $modules_node_ref[$module_a], + $modules_node_ref[$module_b], + $layout, + $nooverlap, + $pure, + $zoom, + $ranksep, + $simple, + $regen, + $font_size, + $group, + 'operation/agentes/networkmap', + 'topology', + $id_networkmap); } - elseif ($module_a_type == 6 && $module_b_type == 6) { - if (isset($node_ref[$agent_a]) && - isset($node_ref[$agent_b])) { - $graph .= networkmap_create_edge( - $node_ref[$agent_a], - $node_ref[$agent_b], - $layout, - $nooverlap, - $pure, - $zoom, - $ranksep, - $simple, - $regen, - $font_size, - $group, - 'operation/agentes/networkmap', - 'topology', - $id_networkmap); - } - + } + elseif ($module_a_type == 6 && $module_b_type == 6) { + if (isset($node_ref[$agent_a]) && + isset($node_ref[$agent_b])) { + $graph .= networkmap_create_edge( + $node_ref[$agent_a], + $node_ref[$agent_b], + $layout, + $nooverlap, + $pure, + $zoom, + $ranksep, + $simple, + $regen, + $font_size, + $group, + 'operation/agentes/networkmap', + 'topology', + $id_networkmap); } - elseif ($module_a_type == 6 && $module_b_type == 18) { - if (isset($node_ref[$agent_a]) && - isset($modules_node_ref[$module_b])) { - $graph .= networkmap_create_edge( - $node_ref[$agent_a], - $modules_node_ref[$module_b], - $layout, - $nooverlap, - $pure, - $zoom, - $ranksep, - $simple, - $regen, - $font_size, - $group, - 'operation/agentes/networkmap', - 'topology', - $id_networkmap); - } + + } + elseif ($module_a_type == 6 && $module_b_type == 18) { + if (isset($node_ref[$agent_a]) && + isset($modules_node_ref[$module_b])) { + $graph .= networkmap_create_edge( + $node_ref[$agent_a], + $modules_node_ref[$module_b], + $layout, + $nooverlap, + $pure, + $zoom, + $ranksep, + $simple, + $regen, + $font_size, + $group, + 'operation/agentes/networkmap', + 'topology', + $id_networkmap); } - elseif ($module_b_type == 6 && $module_a_type == 18) { - if (isset($node_ref[$agent_b]) && - isset($modules_node_ref[$module_a])) { - $graph .= networkmap_create_edge( - $node_ref[$agent_b], - $modules_node_ref[$module_a], - $layout, - $nooverlap, - $pure, - $zoom, - $ranksep, - $simple, - $regen, - $font_size, - $group, - 'operation/agentes/networkmap', - 'topology', - $id_networkmap); - } + } + elseif ($module_b_type == 6 && $module_a_type == 18) { + if (isset($node_ref[$agent_b]) && + isset($modules_node_ref[$module_a])) { + $graph .= networkmap_create_edge( + $node_ref[$agent_b], + $modules_node_ref[$module_a], + $layout, + $nooverlap, + $pure, + $zoom, + $ranksep, + $simple, + $regen, + $font_size, + $group, + 'operation/agentes/networkmap', + 'topology', + $id_networkmap); } } } - + // Close graph $graph .= networkmap_close_graph (); - return $graph; } @@ -1979,7 +1131,7 @@ function networkmap_create_agent_node ($agent, $simple = 0, $font_size = 10, $cu $url_tooltip = 'ajax.php?page=operation/agentes/ver_agente&get_agent_status_tooltip=1&id_agent='.$agent['id_agente']; } - $node = "\n" . $agent['id_node'].' [ color="'.$status_color.'", fontsize='.$font_size.', style="filled", fixedsize=true, width=0.40, height=0.40, label=< + $node = "\n" . $agent['id_node'].' [ parent="' . $agent['id_parent'] . '", color="'.$status_color.'", fontsize='.$font_size.', style="filled", fixedsize=true, width=0.40, height=0.40, label=<
' . $img_node . '
' . $img_node . '
'.io_safe_output($name).'
>, shape="doublecircle", URL="'.$url.'", tooltip="' . $url_tooltip . '"];' . "\n"; @@ -1999,7 +1151,7 @@ function networkmap_create_agent_node ($agent, $simple = 0, $font_size = 10, $cu else { $url_node_link = ''; } - $node = $agent['id_node'] . ' [ color="' . $status_color . '", fontsize=' . $font_size . ', shape="doublecircle"' . $url_node_link . ', style="filled", fixedsize=true, width=0.20, height=0.20, label="", tooltip="' . $ajax_prefix . 'ajax.php?page=operation/agentes/ver_agente&get_agent_status_tooltip=1&id_agent=' . $agent['id_agente'] . $meta_params . '"];' . "\n"; + $node = $agent['id_node'] . ' [ parent="' . $agent['id_parent'] . '", color="' . $status_color . '", fontsize=' . $font_size . ', shape="doublecircle"' . $url_node_link . ', style="filled", fixedsize=true, width=0.20, height=0.20, label="", tooltip="' . $ajax_prefix . 'ajax.php?page=operation/agentes/ver_agente&get_agent_status_tooltip=1&id_agent=' . $agent['id_agente'] . $meta_params . '"];' . "\n"; } return $node; @@ -2132,7 +1284,7 @@ function networkmap_create_module_node ($module, $simple = 0, $font_size = 10, $ $url_tooltip = 'ajax.php?page=operation/agentes/ver_agente&get_agentmodule_status_tooltip=1&id_module='.$module['id_agente_modulo']; } - $node = $module['id_node'].' [ color="' . $status_color . + $node = $module['id_node'].' [ id_agent="' . $module['id_agente'] . '", color="' . $status_color . '", fontsize='.$font_size.', style="filled", ' . 'fixedsize=true, width=0.30, height=0.30, ' . 'label=<
' . @@ -2156,6 +1308,7 @@ function networkmap_create_module_node ($module, $simple = 0, $font_size = 10, $ } $node = $module['id_node'] . ' [ ' . + 'id_agent="' . $module['id_agente'] . '", ' . 'color="' . $status_color .'", ' . 'fontsize='.$font_size.', ' . 'shape="circle", ' . diff --git a/pandora_console/include/functions_pandora_networkmap.php b/pandora_console/include/functions_pandora_networkmap.php index 1f7efff0f8..30401f9e75 100644 --- a/pandora_console/include/functions_pandora_networkmap.php +++ b/pandora_console/include/functions_pandora_networkmap.php @@ -72,20 +72,7 @@ function networkmap_process_networkmap($id = 0) { $center = 0; $regen = 1; $show_snmp_modules = false; - - // NO CONTEMPLADO - $l2_network_interfaces = true; - /* - if (isset($options['l2_network_interfaces'])) - $l2_network_interfaces = (bool)$options['l2_network_interfaces']; - */ - - // NO CONTEMPLADO $dont_show_subgroups = false; - /* - if (isset($options['dont_show_subgroups'])) - $dont_show_subgroups = (bool)$options['dont_show_subgroups']; - */ $id_group = -666; $ip_mask = ""; @@ -118,7 +105,6 @@ function networkmap_process_networkmap($id = 0) { false, //cut_names true, // relative '', - $l2_network_interfaces, $ip_mask, $dont_show_subgroups, false, @@ -146,22 +132,20 @@ function networkmap_process_networkmap($id = 0) { unlink($filename_dot); $nodes = networkmap_loadfile($id, $filename_plain, - $relation_nodes, $graph, $l2_network_interfaces); - - if ($l2_network_interfaces) { - //Set the position of modules - foreach ($nodes as $key => $node) { - if ($node['type'] == 'module') { - //Search the agent of this module for to get the - //position - foreach ($nodes as $key2 => $node2) { - if ($node2['id_agent'] != 0 && $node2['type'] == 'agent') { - if ($node2['id_agent'] == $node['id_agent']) { - $nodes[$key]['coords'][0] = - $nodes[$key2]['coords'][0] + $node['height'] / 2; - $nodes[$key]['coords'][1] = - $nodes[$key2]['coords'][1] + $node['width'] / 2; - } + $relation_nodes, $graph); + + //Set the position of modules + foreach ($nodes as $key => $node) { + if ($node['type'] == 'module') { + //Search the agent of this module for to get the + //position + foreach ($nodes as $key2 => $node2) { + if ($node2['id_agent'] != 0 && $node2['type'] == 'agent') { + if ($node2['id_agent'] == $node['id_agent']) { + $nodes[$key]['coords'][0] = + $nodes[$key2]['coords'][0] + $node['height'] / 2; + $nodes[$key]['coords'][1] = + $nodes[$key2]['coords'][1] + $node['width'] / 2; } } } @@ -171,10 +155,8 @@ function networkmap_process_networkmap($id = 0) { unlink($filename_plain); $nodes_and_relations = array(); - $nodes_and_relations['l2_network'] = $l2_network_interfaces; if (enterprise_installed()) { enterprise_include_once("include/functions_pandora_networkmap.php"); - $center = save_generate_nodes($id, $nodes, $relation_nodes); } else { @@ -184,12 +166,6 @@ function networkmap_process_networkmap($id = 0) { $nodes_and_relations['nodes'][$index]['id_map'] = $id; $nodes_and_relations['nodes'][$index]['x'] = (int)$node['coords'][0]; $nodes_and_relations['nodes'][$index]['y'] = (int)$node['coords'][1]; - $style['shape'] = 'circle'; - $style['image'] = $node['image']; - $style['width'] = $node['width']; - $style['height'] = $node['height']; - $style['label'] = $node['text']; - $nodes_and_relations['nodes'][$index]['style'] = json_encode($style); if (($node['type'] == 'agent') || ($node['type'] == '')) { $nodes_and_relations['nodes'][$index]['source_data'] = $node['id_agent']; $nodes_and_relations['nodes'][$index]['type'] = 0; @@ -199,6 +175,14 @@ function networkmap_process_networkmap($id = 0) { $nodes_and_relations['nodes'][$index]['id_agent'] = $node['id_agent']; $nodes_and_relations['nodes'][$index]['type'] = 1; } + + $style['shape'] = 'circle'; + $style['image'] = $node['image']; + $style['width'] = $node['width']; + $style['height'] = $node['height']; + $style['label'] = $node['text']; + $nodes_and_relations['nodes'][$index]['style'] = json_encode($style); + $index++; } @@ -206,43 +190,23 @@ function networkmap_process_networkmap($id = 0) { $nodes_and_relations['relations'] = array(); foreach ($relation_nodes as $relation) { $nodes_and_relations['relations'][$index]['id_map'] = $id; + $nodes_and_relations['relations'][$index]['id_parent'] = $relation['id_parent']; + $nodes_and_relations['relations'][$index]['id_child'] = $relation['id_child']; - if ($l2_network_interfaces) { - if (($relation['parent_type'] == 'agent') || ($relation['parent_type'] == '')) { - $nodes_and_relations['relations'][$index]['id_parent'] = $relation['id_parent']; - $nodes_and_relations['relations'][$index]['parent_type'] = 0; - } - else if ($relation['parent_type'] == 'module') { - $nodes_and_relations['relations'][$index]['id_parent'] = $nodes[$relation['id_parent']]['id_module']; - $nodes_and_relations['relations'][$index]['parent_type'] = 1; - } - - if (($relation['child_type'] == 'agent') || ($relation['child_type'] == '')) { - $nodes_and_relations['relations'][$index]['id_child'] = $relation['id_child']; - $nodes_and_relations['relations'][$index]['child_type'] = 0; - } - else if ($relation['child_type'] == 'module') { - $nodes_and_relations['relations'][$index]['id_child'] = $nodes[$relation['id_child']]['id_module']; - $nodes_and_relations['relations'][$index]['child_type'] = 1; - } + if (($relation['parent_type'] == 'agent') || ($relation['parent_type'] == '')) { + $nodes_and_relations['relations'][$index]['parent_type'] = 0; } - else { - $nodes_and_relations['relations'][$index]['id_parent'] = $nodes[$relation['id_parent']]['id_agent']; - $nodes_and_relations['relations'][$index]['id_child'] = $nodes[$relation['id_child']]['id_agent']; - if (($relation['parent_type'] == 'agent') || ($relation['parent_type'] == '')) { - $nodes_and_relations['relations'][$index]['parent_type'] = 0; - } - else if ($relation['parent_type'] == 'module') { - $nodes_and_relations['relations'][$index]['parent_type'] = 1; - } - - if (($relation['child_type'] == 'agent') || ($relation['child_type'] == '')) { - $nodes_and_relations['relations'][$index]['child_type'] = 0; - } - else if ($relation['child_type'] == 'module') { - $nodes_and_relations['relations'][$index]['child_type'] = 1; - } + else if ($relation['parent_type'] == 'module') { + $nodes_and_relations['relations'][$index]['parent_type'] = 1; } + + if (($relation['child_type'] == 'agent') || ($relation['child_type'] == '')) { + $nodes_and_relations['relations'][$index]['child_type'] = 0; + } + else if ($relation['child_type'] == 'module') { + $nodes_and_relations['relations'][$index]['child_type'] = 1; + } + $index++; } @@ -449,7 +413,7 @@ function networkmap_clean_relations_for_js(&$relations) { while (!$cleaned); } -function networkmap_links_to_js_links($relations, $nodes_graph, $l2_network = false) { +function networkmap_links_to_js_links($relations, $nodes_graph) { $return = array(); foreach ($relations as $relation) { @@ -568,29 +532,13 @@ function networkmap_links_to_js_links($relations, $nodes_graph, $l2_network = fa } } else { - if ($l2_network) { - $agent1 = agents_get_agent_id_by_module_id($relation['id_parent']); - $agent2 = agents_get_agent_id_by_module_id($relation['id_child']); - if (($node['id_agent'] == $agent1) && ($node['id_module'] == "")) { - $item['target'] = $node['id']; - } - else if (($node['id_agent'] == $agent2) && ($node['id_module'] == "")) { - $item['source'] = $node['id']; - } + $agent1 = agents_get_agent_id_by_module_id($relation['id_parent']); + $agent2 = agents_get_agent_id_by_module_id($relation['id_child']); + if (($node['id_agent'] == $agent1) && ($node['id_module'] == "")) { + $item['target'] = $node['id']; } - else { - $agent1 = $relation['id_parent']; - $agent2 = $relation['id_child']; - if ($agent1 == 0) { - $item['target'] = 0; - } - else if (($node['id_agent'] == $agent1) && ($node['id_module'] == "")) { - $item['target'] = $node['id']; - } - - if (($node['id_agent'] == $agent2) && ($node['id_module'] == "")) { - $item['source'] = $node['id']; - } + else if (($node['id_agent'] == $agent2) && ($node['id_module'] == "")) { + $item['source'] = $node['id']; } } } @@ -690,7 +638,7 @@ function networkmap_write_js_array($id, $nodes_and_relations = array()) { //interfaces networkmap_clean_relations_for_js($relations); - $links_js = networkmap_links_to_js_links($relations, $nodes_graph, $nodes_and_relations['l2_network']); + $links_js = networkmap_links_to_js_links($relations, $nodes_graph); foreach ($links_js as $link_js) { if ($link_js['target'] == -1) @@ -755,7 +703,7 @@ function networkmap_write_js_array($id, $nodes_and_relations = array()) { } function networkmap_loadfile($id = 0, $file = '', - &$relations_param, $graph, $l2_network_interfaces) { + &$relations_param, $graph) { global $config; $height_map = db_get_value('height', 'tmap', 'id', $id); @@ -800,7 +748,6 @@ function networkmap_loadfile($id = 0, $file = '', $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['text'] = ''; $data['image'] = ''; $data['width'] = 10; @@ -838,6 +785,7 @@ function networkmap_loadfile($id = 0, $file = '', 'agent_medium', false, true, false, '...', false); $data['text'] = $text; + $data['id_agent'] = db_get_value("id_agente", "tagente_modulo", "id_agente_modulo", $data['id_module']); break; case 'agent': $data['id_agent'] = $ids[$node_id]['id_agent']; @@ -848,6 +796,7 @@ function networkmap_loadfile($id = 0, $file = '', 'agent_medium', false, true, false, '...', false); $data['text'] = $text; + $data['parent'] = db_get_value("id_parent", "tagente", "id_agente", $data['id_agent']); break; } } @@ -857,7 +806,6 @@ function networkmap_loadfile($id = 0, $file = '', } $data['coords'] = array($node_x, $node_y); - $data['parent'] = -1; if (strpos($node_id, "transp_") !== false) { //removed the transparent nodes @@ -1136,6 +1084,8 @@ function show_networkmap($id = 0, $user_readonly = false, $nodes_and_relations = // // and erase the last, only the first row alive networkmap_clean_duplicate_links($id); + + networkmap_clean_useless_l3_links($id); } $networkmap = db_get_row('tmap', 'id', $id);