From 39f3bb6e8e728df23a7ea52fd2cdae63bee92c1d Mon Sep 17 00:00:00 2001
From: Robert Latta <robert.latta@geant.org>
Date: Fri, 30 Apr 2021 15:24:09 +0000
Subject: [PATCH] removed redundant code

---
 inventory_provider/routes/classifier.py | 53 +++++--------------------
 1 file changed, 9 insertions(+), 44 deletions(-)

diff --git a/inventory_provider/routes/classifier.py b/inventory_provider/routes/classifier.py
index 5d476109..1aaf7d15 100644
--- a/inventory_provider/routes/classifier.py
+++ b/inventory_provider/routes/classifier.py
@@ -104,7 +104,7 @@ def after_request(resp):
 
 
 @lru_cache(256)
-def get_ims_equipment_name(equipment_name: str, r: Redis=None) -> 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()
@@ -120,42 +120,6 @@ def get_ims_interface(interface: str) -> str:
     return interface.upper()
 
 
-def related_interfaces(hostname, interface):
-    r = common.get_current_redis()
-    prefix = f'netconf-interfaces:{hostname}:'
-    for k in r.keys(f'{prefix}{interface}.*'):
-        k = k.decode('utf-8')
-        assert k.startswith(prefix)  # sanity
-        assert len(k) > len(prefix)  # sanity (contains at least an interface)
-        yield k[len(prefix):]
-
-
-def get_related_services(source_equipment: str, interface: str, r) -> dict:
-    """
-    Finds the related-services for the given interface
-    and also gets the related-services for the related interfaces
-    e.g. ae20 will also find services on all logical units of ae20 (ae20.1 ...)
-    :param source_equipment: equipment name
-    :param interface: interface name
-    :param r: redis connection
-    :return: Dict
-    """
-    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}')
-    if if_services:
-        for s in json.loads(if_services.decode('utf-8')):
-            yield from s['related-services']
-    for related in related_interfaces(source_equipment, interface):
-        ims_interface = get_ims_interface(related)
-        rif_services = r.get(
-            f'ims:interface_services:{ims_source_equipment}:{ims_interface}')
-        if rif_services:
-            for s in json.loads(rif_services.decode('utf-8')):
-                yield from s['related-services']
-
-
 def get_interface_services_and_loc(ims_source_equipment, ims_interface, redis):
 
     def _format_service(_s):
@@ -174,18 +138,20 @@ def get_interface_services_and_loc(ims_source_equipment, ims_interface, redis):
     result = {}
     if raw_services:
         result['services'] = []
+        related_services = {}
         contacts = set()
         for s in json.loads(raw_services.decode('utf-8')):
+            related_services.update(
+                {r['id']: r for r in s['related-services']})
             if s['monitored']:
                 contacts.update(set(s.pop('contacts', set())))
                 _format_service(s)
                 result['services'].append(s)
+        result['related-services'] = list(related_services.values())
         result['contacts'] = sorted(list(contacts))
 
         # non-monitored related services are not added by the worker so don't
         # need filtering out here
-        result['related-services'] = list(
-            get_related_services(ims_source_equipment, ims_interface, redis))
         if not result['services']:
             result.pop('services', None)
         if result['related-services']:
@@ -548,8 +514,8 @@ def peer_info(address_str: str) -> Response:
             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)
-                    , 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:
@@ -622,7 +588,6 @@ def get_trap_metadata(source_equipment: str, interface: str, circuit_id: str) \
 
     cache_key = f'classifier-cache:infinera:{source_equipment}:{interface}'
 
-
     result = _ignore_cache_or_retrieve(request, cache_key, r)
 
     if not result:
@@ -918,8 +883,8 @@ def get_coriant_info(equipment_name: str, entity_string: str) -> Response:
             p['a']['pop']['name'] = s.get('pop_name', '')
             p['a']['pop']['city'] = s.get('pop_name', '')
             p['a']['pop']['abbreviation'] = s.get('pop_abbreviation', '')
-        p['b'] = p['a']
-        result['path'] = p
+            p['b'] = p['a']
+            result['path'] = p
 
         result['locations'] = _remove_duplicates_from_list(result['locations'])
         result = json.dumps(result)
-- 
GitLab