diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py index 67addb8a1ec4f5746158a9591d0a55565db0d592..544f34b050b9481273b0e3192f81d637e37332e8 100644 --- a/inventory_provider/tasks/worker.py +++ b/inventory_provider/tasks/worker.py @@ -1692,6 +1692,8 @@ def transform_ims_data(data): services_by_type = {} interface_services = defaultdict(list) + # using a dict to ensure no duplicates + node_pair_services = defaultdict(dict) for key, value in port_id_details.items(): for details in value: @@ -1723,13 +1725,18 @@ def transform_ims_data(data): type_services = services_by_type.setdefault( ims_sorted_service_type_key(circ['service_type']), dict()) type_services[circ['id']] = circ + if circ['other_end_equipment']: + node_pair_services[ + f"{circ['equipment']}/{circ['other_end_equipment']}" + ][circ['id']] = circ - interface_services[k].extend(circuits) + interface_services[k].extend(circuits) return { 'hierarchy': hierarchy, 'interface_services': interface_services, - 'services_by_type': services_by_type + 'services_by_type': services_by_type, + 'node_pair_services': node_pair_services } @@ -1740,6 +1747,7 @@ def persist_ims_data(data, use_current=False): lg_routers = data['lg_routers'] interface_services = data['interface_services'] services_by_type = data['services_by_type'] + node_pair_services = data['node_pair_services'] if use_current: r = get_current_redis(InventoryTask.config) @@ -1752,7 +1760,8 @@ def persist_ims_data(data, use_current=False): 'ims:circuit_hierarchy:*', 'ims:interface_services:*', 'ims:access_services:*', - 'ims:gws_indirect:*' + 'ims:gws_indirect:*', + 'ims:node_pair_services:*' ]: rp = r.pipeline() for k in r.scan_iter(key_pattern, count=1000): @@ -1778,6 +1787,13 @@ def persist_ims_data(data, use_current=False): f'ims:interface_services:{k}', json.dumps(v)) rp.execute() + rp = r.pipeline() + for k, v in node_pair_services.items(): + rp.set( + f'ims:node_pair_services:{k}', + json.dumps(list(v.values()))) + rp.execute() + rp = r.pipeline() populate_poller_cache(interface_services, r)