diff --git a/inventory_provider/db/ims_data.py b/inventory_provider/db/ims_data.py index bdc59359251676c4b0dcd6bb4ae8fb9fd45fcec0..36167cb3292b14606b63ac03ac9fc6e62512cca8 100644 --- a/inventory_provider/db/ims_data.py +++ b/inventory_provider/db/ims_data.py @@ -106,7 +106,7 @@ def get_service_types(ds: IMS): yield d['selection'] -def get_customer_service_emails(ds: IMS): +def get_customer_tts_contacts(ds: IMS): customer_contacts = defaultdict(set) @@ -121,6 +121,21 @@ def get_customer_service_emails(ds: IMS): yield k, sorted(list(v)) +def get_customer_planned_work_contacts(ds: IMS): + + customer_contacts = defaultdict(set) + + for x in ds.get_filtered_entities( + 'customerrelatedcontact', + "contact.PlannedworkMail != ''", + CUSTOMER_RELATED_CONTACT_PROPERTIES['Contact'] + ): + customer_contacts[x['customerid']].add( + x['contact']['plannedworkmail']) + for k, v in customer_contacts.items(): + yield k, sorted(list(v)) + + def get_circuit_related_customers(ds: IMS): return_value = defaultdict(list) diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py index eeffb33ae076c204d7a277a4512fc2120f7660b9..fe8088f403e3005ad70a07dfaaa85d738c4004b8 100644 --- a/inventory_provider/tasks/worker.py +++ b/inventory_provider/tasks/worker.py @@ -745,6 +745,7 @@ def _extract_ims_data(ims_api_url, ims_username, ims_password): lg_routers = [] geant_nodes = [] customer_contacts = {} + planned_work_contacts = {} circuit_ids_to_monitor = [] circuit_ids_and_sids = {} additional_circuit_customers = {} @@ -772,7 +773,14 @@ def _extract_ims_data(ims_api_url, ims_username, ims_password): def _populate_customer_contacts(): nonlocal customer_contacts customer_contacts = \ - {k: v for k, v in ims_data.get_customer_service_emails(ds=_ds())} + {k: v for k, v in ims_data.get_customer_tts_contacts(ds=_ds())} + + @log_task_entry_and_exit + def _populate_customer_planned_work_contacts(): + nonlocal planned_work_contacts + planned_work_contacts = \ + {k: v for k, v in + ims_data.get_customer_planned_work_contacts(ds=_ds())} @log_task_entry_and_exit def _populate_circuit_ids_to_monitor(): @@ -799,6 +807,8 @@ def _extract_ims_data(ims_api_url, ims_username, ims_password): executor.submit(_populate_geant_nodes): 'geant_nodes', executor.submit(_populate_lg_routers): 'lg_routers', executor.submit(_populate_customer_contacts): 'customer_contacts', + executor.submit(_populate_customer_planned_work_contacts): + 'planned_work_contacts', executor.submit(_populate_circuit_ids_to_monitor): 'circuit_ids_to_monitor', executor.submit(_populate_sids): 'sids', @@ -852,6 +862,7 @@ def _extract_ims_data(ims_api_url, ims_username, ims_password): 'locations': locations, 'lg_routers': lg_routers, 'customer_contacts': customer_contacts, + 'planned_work_contacts': planned_work_contacts, 'circuit_ids_to_monitor': circuit_ids_to_monitor, 'circuit_ids_sids': circuit_ids_and_sids, 'additional_circuit_customers': additional_circuit_customers, @@ -865,6 +876,7 @@ def _extract_ims_data(ims_api_url, ims_username, ims_password): def transform_ims_data(data): locations = data['locations'] customer_contacts = data['customer_contacts'] + planned_work_contacts = data['planned_work_contacts'] circuit_ids_to_monitor = data['circuit_ids_to_monitor'] additional_circuit_customers = data['additional_circuit_customers'] hierarchy = data['hierarchy'] @@ -880,11 +892,16 @@ def transform_ims_data(data): customer_ids.update( [ac['id'] for ac in additional_circuit_customers.get(c['id'], [])] ) - return set().union( + tts_contacts = set().union( *[customer_contacts.get(cid, []) for cid in customer_ids]) + pw_contacts = set().union( + *[planned_work_contacts.get(cid, []) for cid in customer_ids]) + return tts_contacts, pw_contacts for d in hierarchy.values(): - d['contacts'] = sorted(list(_get_circuit_contacts(d))) + c, ttc = _get_circuit_contacts(d) + d['contacts'] = sorted(list(c)) + d['planned_work_contacts'] = sorted(list(ttc)) def _convert_to_bits(value, unit): unit = unit.lower() @@ -940,7 +957,8 @@ def transform_ims_data(data): 'circuit_type': c['circuit-type'], 'service_type': c['product'], 'project': c['project'], - 'contacts': c['contacts'] + 'contacts': c['contacts'], + 'planned_work_contacts': c['planned_work_contacts'] } if c['id'] in circuit_ids_to_monitor: rs[c['id']]['status'] = c['status'] @@ -1021,7 +1039,7 @@ def transform_ims_data(data): circuits = port_id_services.get(details['port_id'], []) for circ in circuits: - contacts = _get_circuit_contacts(circ) + contacts, pw_contacts = _get_circuit_contacts(circ) circ['fibre-routes'] = [] for x in set(_get_fibre_routes(circ['id'])): c = { @@ -1038,7 +1056,9 @@ def transform_ims_data(data): # why were these removed? # contacts.update(tlc.pop('contacts')) contacts.update(tlc.get('contacts')) + pw_contacts.update(tlc.get('planned_work_contacts', [])) circ['contacts'] = sorted(list(contacts)) + circ['planned_work_contacts'] = sorted(list(pw_contacts)) circ['calculated-speed'] = _get_speed(circ['id']) _format_service(circ)