diff --git a/inventory_provider/routes/classifier.py b/inventory_provider/routes/classifier.py index 91fb1df5d7e36ac60b4575c2bb1d91e3fd6a1ea4..6c3d438628199b5eab81f646405d3d5f01b85fd8 100644 --- a/inventory_provider/routes/classifier.py +++ b/inventory_provider/routes/classifier.py @@ -102,10 +102,15 @@ def after_request(resp): return common.after_request(resp) -def get_ims_equipment_name(equipment_name: str) -> str: +def get_ims_equipment_name(equipment_name: str, r: Redis=None) -> str: + if not r: + r = common.get_current_redis() ims_equipment_name = equipment_name.upper() - if ims_equipment_name.startswith('MX'): - ims_equipment_name = ims_equipment_name.split('.GEANT.NET')[0] + most_likely = ims_equipment_name.split('.GEANT.')[0] + loc_key = 'ims:location:{}' + if r.exists(loc_key.format(most_likely)) \ + or not r.exists(loc_key.format(ims_equipment_name)): + ims_equipment_name = most_likely return ims_equipment_name @@ -133,7 +138,7 @@ def get_related_services(source_equipment: str, interface: str, r) -> dict: :param r: redis connection :return: Dict """ - ims_source_equipment = get_ims_equipment_name(source_equipment) + ims_source_equipment = get_ims_equipment_name(source_equipment, r) ims_interface = get_ims_interface(interface) if_services = r.get(f'ims:interface_services:{ims_source_equipment}:' f'{ims_interface}') @@ -256,11 +261,11 @@ def get_juniper_link_info(source_equipment: str, interface: str) -> Response: :return: """ - ims_source_equipment = get_ims_equipment_name(source_equipment) - ims_interface = get_ims_interface(interface) - r = common.get_current_redis() + ims_source_equipment = get_ims_equipment_name(source_equipment, r) + ims_interface = get_ims_interface(interface) + cache_key = \ f'classifier-cache:juniper:{ims_source_equipment}:{ims_interface}' @@ -534,14 +539,15 @@ def peer_info(address_str: str) -> Response: result['locations'].append(build_locations( _location_from_equipment( get_ims_equipment_name( - ix_peering_info['peer']['router']), r))) + ix_peering_info['peer']['router'], r), r))) vpn_rr_peering_info = _vpn_rr_peering_info(r, address_str) if vpn_rr_peering_info: result['vpn-rr-peer-info'] = vpn_rr_peering_info result['locations'].append(build_locations( _location_from_equipment( - get_ims_equipment_name(vpn_rr_peering_info['router']), r))) + get_ims_equipment_name(vpn_rr_peering_info['router'], r) + , r))) asn_group_info = _asn_group_info(r, address_str) if asn_group_info: @@ -549,7 +555,7 @@ def peer_info(address_str: str) -> Response: contacts = set() for interface in find_interfaces(address): - ims_equipment = get_ims_equipment_name(interface["router"]) + ims_equipment = get_ims_equipment_name(interface["router"], r) ims_interface = get_ims_interface(interface["interface name"]) services_and_locs = get_interface_services_and_loc( @@ -608,12 +614,12 @@ def get_trap_metadata(source_equipment: str, interface: str, circuit_id: str) \ :return: """ - ims_source_equipment = get_ims_equipment_name(source_equipment) + r = common.get_current_redis() + ims_source_equipment = get_ims_equipment_name(source_equipment, r) ims_interface = get_ims_interface(interface) cache_key = f'classifier-cache:infinera:{source_equipment}:{interface}' - r = common.get_current_redis() result = _ignore_cache_or_retrieve(request, cache_key, r) @@ -822,7 +828,7 @@ def get_coriant_info(equipment_name: str, entity_string: str) -> Response: r = common.get_current_redis() - ims_source_equipment = get_ims_equipment_name(equipment_name) + ims_source_equipment = get_ims_equipment_name(equipment_name, r) ims_interface = get_ims_interface(entity_string) cache_key = 'classifier-cache:coriant:' \