diff --git a/inventory_provider/db/ims_data.py b/inventory_provider/db/ims_data.py index e3a59750d9cb1b30336eb95494ebc8b14f3b4b51..271faaf0b290bfd75da3006e5be321c3f9c1a547 100644 --- a/inventory_provider/db/ims_data.py +++ b/inventory_provider/db/ims_data.py @@ -84,6 +84,15 @@ def get_monitored_circuit_ids(ds: IMS): yield d['extrafieldvalueobjectinfo']['objectid'] +def get_ids_and_sids(ds: IMS): + for sid_circuit in ds.get_filtered_entities( + 'ExtraFieldValue', + 'extrafieldid == 3209 | value <> ""', + step_count=10000 + ): + yield sid_circuit['objectid'], sid_circuit['value'] + + def get_service_types(ds: IMS): for d in ds.get_filtered_entities( 'ComboBoxData', diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py index b866a70ac73002e39e35bd1aedce91c704d008ef..f841b942c1c5ddceeae2a49ccb87b203687a005d 100644 --- a/inventory_provider/tasks/worker.py +++ b/inventory_provider/tasks/worker.py @@ -719,6 +719,7 @@ def extract_ims_data(): lg_routers = [] customer_contacts = {} circuit_ids_to_monitor = [] + circuit_ids_and_sids = {} additional_circuit_customer_ids = {} hierarchy = {} @@ -743,6 +744,11 @@ def extract_ims_data(): circuit_ids_to_monitor = \ list(ims_data.get_monitored_circuit_ids(ds=_ds())) + def _populate_sids(): + nonlocal circuit_ids_and_sids + circuit_ids_and_sids = \ + {cid: sid for cid, sid in ims_data.get_ids_and_sids(ds=_ds())} + def _populate_additional_circuit_customer_ids(): nonlocal additional_circuit_customer_ids additional_circuit_customer_ids = \ @@ -756,6 +762,7 @@ def extract_ims_data(): executor.submit(_populate_customer_contacts): 'customer_contacts', executor.submit(_populate_circuit_ids_to_monitor): 'circuit_ids_to_monitor', + executor.submit(_populate_sids): 'sids', executor.submit(_populate_additional_circuit_customer_ids): 'additional_circuit_customer_ids' } @@ -804,6 +811,7 @@ def extract_ims_data(): 'lg_routers': lg_routers, 'customer_contacts': customer_contacts, 'circuit_ids_to_monitor': circuit_ids_to_monitor, + 'circuit_ids_sids': circuit_ids_and_sids, 'additional_circuit_customer_ids': additional_circuit_customer_ids, 'hierarchy': hierarchy, 'port_id_details': port_id_details, diff --git a/test/test_ims_data.py b/test/test_ims_data.py index 7d07aff8e7b0ee6ef3a13801beae0a4cd3cd71a2..80abcc9de53ae7759734070aa40026715f136dae 100644 --- a/test/test_ims_data.py +++ b/test/test_ims_data.py @@ -8,7 +8,7 @@ from inventory_provider.db.ims import InventoryStatus from inventory_provider.db.ims_data import lookup_lg_routers, \ get_node_locations, IMS_OPSDB_STATUS_MAP, \ get_port_id_services, get_port_details, \ - get_circuit_hierarchy, NODE_LOCATION_SCHEMA + get_circuit_hierarchy, get_ids_and_sids, NODE_LOCATION_SCHEMA def _json_test_data(filename): @@ -298,3 +298,54 @@ def test_get_node_location(mocker): 'latitude': 51.5308142, } }) + + +def test_get_circuit_ids_and_sids(mocker): + ims = mocker.patch('inventory_provider.db.ims.IMS') + ims.return_value.get_filtered_entities.return_value = \ + [ + { + 'id': 999999, + 'extrafieldid': 3209, + 'objectid': 111111, + 'value': 'SID-01', + 'extrafield': None, + 'links': None, + 'extrafieldvalueobjectinfo': None, + 'rowversion': '2021-12-10T19:40:51', + 'errors': None, + 'haserrors': False + },{ + 'id': 999998, + 'extrafieldid': 3209, + 'objectid': 111112, + 'value': 'SID-02', + 'extrafield': None, + 'links': None, + 'extrafieldvalueobjectinfo': None, + 'rowversion': '2021-12-10T19:40:51', + 'errors': None, + 'haserrors': False + },{ + 'id': 999997, + 'extrafieldid': 3209, + 'objectid': 111113, + 'value': 'SID-03', + 'extrafield': None, + 'links': None, + 'extrafieldvalueobjectinfo': None, + 'rowversion': '2021-12-10T19:40:51', + 'errors': None, + 'haserrors': False + }, + ] + expected_response = [ + (111111, 'SID-01'), + (111112, 'SID-02'), + (111113, 'SID-03') + ] + + ds = inventory_provider.db.ims.IMS( + 'dummy_base', 'dummy_username', 'dummy_password') + res = list(get_ids_and_sids(ds)) + assert res == expected_response