diff --git a/inventory_provider/routes/classifier.py b/inventory_provider/routes/classifier.py index fb09dad075829aba6c53f2c7ce0aca50ce4038d4..afc9bcdb2161f956f6cea65044b7ef8dcf04a5bb 100644 --- a/inventory_provider/routes/classifier.py +++ b/inventory_provider/routes/classifier.py @@ -73,11 +73,35 @@ def get_juniper_link_info(source_equipment, interface): result = result.decode('utf-8') else: result = {} + top_level_services = [] + + def _get_top_level_services(circuit_id): + tls = [] + results = r.get("opsdb:services:children:{}".format(circuit_id)) + if results: + results = json.loads(results.decode('utf-8')) + + for c in results: + if circuit_id == c['child_circuit_id']: + tls.append( + {'name': c['parent_circuit'], + 'status': c['parent_circuit_status']}) + else: + temp_parents = \ + _get_top_level_services(c['child_circuit_id']) + if not temp_parents: + tls.append( + {'name': c['parent_circuit'], + 'status': c['parent_circuit_status']}) + tls.extend(temp_parents) + return tls services = r.get( 'opsdb:interface_services:%s:%s' % (source_equipment, interface)) if services: result['services'] = json.loads(services.decode('utf=8')) + for s in result['services']: + top_level_services.extend(_get_top_level_services(s['id'])) ifc_info = r.get( 'netconf-interfaces:%s:%s' % (source_equipment, interface)) @@ -90,10 +114,13 @@ def get_juniper_link_info(source_equipment, interface): % (source_equipment, related)) if rs: for s in json.loads(rs.decode('utf-8')): - yield s + top_level_services.extend( + _get_top_level_services(s['id'])) + yield {'name': s['name'], 'status': s['status']} related_services = list(_related_services()) if related_services: + related_services.extend(top_level_services) result['related-services'] = related_services if not result: