Skip to content
Snippets Groups Projects
Commit add1c23c authored by Robert Latta's avatar Robert Latta
Browse files

added endpoint for SAP/Layer 2 trap classification. RE.DBOARD3-1104

parent c43dc66b
No related branches found
No related tags found
No related merge requests found
...@@ -295,6 +295,35 @@ def _link_interface_info(r, hostname, interface): ...@@ -295,6 +295,35 @@ def _link_interface_info(r, hostname, interface):
return ifc_info return ifc_info
def get_link_info_response_body(
source_equipment: str,
interface: str,
ims_source_equipment: str,
ims_interface: str,
r: Redis) -> dict:
result = {
'interface': _link_interface_info(r, source_equipment, interface)
}
bundle_members = r.get(
f'netconf-interface-bundles:{source_equipment}:{interface}')
if bundle_members:
result['interface']['bundle_members'] = \
json.loads(bundle_members.decode('utf-8'))
else:
result['interface']['bundle_members'] = []
result.update(
get_interface_services_and_loc(
ims_source_equipment,
ims_interface,
r
)
)
return result
@routes.route("/link-info/<source_equipment>/<path:interface>", @routes.route("/link-info/<source_equipment>/<path:interface>",
methods=['GET']) methods=['GET'])
@routes.route("/nokia-link-info/<source_equipment>/<path:interface>", @routes.route("/nokia-link-info/<source_equipment>/<path:interface>",
...@@ -302,7 +331,7 @@ def _link_interface_info(r, hostname, interface): ...@@ -302,7 +331,7 @@ def _link_interface_info(r, hostname, interface):
@routes.route("/juniper-link-info/<source_equipment>/<path:interface>", @routes.route("/juniper-link-info/<source_equipment>/<path:interface>",
methods=['GET']) methods=['GET'])
@common.require_accepts_json @common.require_accepts_json
def get_juniper_link_info(source_equipment: str, interface: str) -> Response: def handle_link_info_request(source_equipment: str, interface: str) -> Response:
""" """
Handler for /classifier/juniper-link-info that Handler for /classifier/juniper-link-info that
returns metadata about an IP interface. returns metadata about an IP interface.
...@@ -328,35 +357,50 @@ def get_juniper_link_info(source_equipment: str, interface: str) -> Response: ...@@ -328,35 +357,50 @@ def get_juniper_link_info(source_equipment: str, interface: str) -> Response:
result = _ignore_cache_or_retrieve(request, cache_key, r) result = _ignore_cache_or_retrieve(request, cache_key, r)
if not result: if not result:
result = { result = get_link_info_response_body(
'interface': _link_interface_info(r, source_equipment, interface) source_equipment,
} interface,
ims_source_equipment,
ims_interface, r)
bundle_members = r.get( result = json.dumps(result)
f'netconf-interface-bundles:{source_equipment}:{interface}') # cache this data for the next call
if bundle_members: r.set(cache_key, result.encode('utf-8'))
result['interface']['bundle_members'] = \
json.loads(bundle_members.decode('utf-8')) return Response(result, mimetype="application/json")
else:
result['interface']['bundle_members'] = []
result.update(
get_interface_services_and_loc(
ims_source_equipment,
ims_interface,
r
)
)
# don't want to report related services for bundle members, just the @routes.route("/epipe-sap-info/<source_equipment>/<service_id>/<vpn_id>", methods=['GET'])
# aggregate @common.require_accepts_json
# if result['interface']['bundle']: def handle_epipe_sap_info_request(source_equipment: str, service_id: str, vpn_id: str) -> Response:
# result['related-services'] = []
r = common.get_current_redis()
ims_source_equipment = get_ims_equipment_name(source_equipment, r)
cache_key = \
f'classifier-cache:epipe_sap:{source_equipment}:{service_id}:{vpn_id}'
print(f'cache_key: {cache_key}')
result = _ignore_cache_or_retrieve(request, cache_key, r)
if not result:
info_to_interface_key = f'ims:epipe-sapid_mappings:{source_equipment}:{service_id}:{vpn_id}'
raw_interface = r.get(info_to_interface_key)
if raw_interface:
raw_interface = raw_interface.decode('utf-8')
ims_interface = get_ims_interface(raw_interface)
result = get_link_info_response_body(
source_equipment,
raw_interface,
ims_source_equipment,
ims_interface, r)
result = json.dumps(result) result = json.dumps(result)
# cache this data for the next call # cache this data for the next call
r.set(cache_key, result.encode('utf-8')) r.set(cache_key, result.encode('utf-8'))
return Response(result, mimetype="application/json") return Response(result, mimetype="application/json")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment