Skip to content
Snippets Groups Projects
Commit 88ba6fbe authored by Sam Roberts's avatar Sam Roberts
Browse files

endpoint complete, needs schema, tests & docs

parent f5d0f732
No related branches found
No related tags found
1 merge request!3Feature/reporting 311 add msr asn peers
......@@ -97,7 +97,7 @@ import threading
from collections import defaultdict
from typing import Dict
from flask import Blueprint, Response, request, current_app
from flask import Blueprint, Response, request, current_app, jsonify
import jsonschema
from inventory_provider.routes import common
......@@ -1180,16 +1180,42 @@ def vpn_proxy():
@common.require_accepts_json
def asn_peers(asn):
r = common.get_current_redis()
def _get_filtered_peers_for_asn(asn, group, instance):
peers = json.loads(r.get(f'juniper-peerings:peer-asn:{asn}'))
def _attribute_filter(peer, name, value):
if value is None:
return True # no filter parameter given in request
if name not in peer:
return False # no value exists, cannot meet condition
return peer[name] == value
for peer in peers:
if _attribute_filter(peer, "group", group) and \
_attribute_filter(peer, "instance", instance):
yield peer
def _get_filtered_peers(nren_asn_map, group, instance):
for pair in nren_asn_map:
asn = pair['asn']
asn_peers = _get_filtered_peers_for_asn(asn, group, instance)
for peer in asn_peers:
yield peer
# handle getting parameters regardless of method of input
if request.method == 'GET':
group = request.args.get('group')
instance = request.args.get('instance')
else:
params = json.loads(request.json)
group = params.get('group', None)
instance = params.get('instance', None)
if asn is not None:
cache_key = f'classifier-cache:msr:asn-peers:{asn}'
response = _ignore_cache_or_retrieve(request, cache_key, r)
if not response:
peers = json.loads(r.get(f'juniper-peerings:peer-asn:{asn}'))
response = json.dumps(peers)
peers = list(_get_filtered_peers_for_asn(asn, group, instance))
else:
cache_key = f'classifier-cache:msr:asn-peers'
response = _ignore_cache_or_retrieve(request, cache_key, r)
if not response:
peers = json.loads(r.get(f'juniper-peerings:peer-asn'))
response = json.dumps(peers)
return Response(response, mimetype='application/json')
config = current_app.config['INVENTORY_PROVIDER_CONFIG']
nren_asn_map = config['nren-asn-map']
peers = list(_get_filtered_peers(nren_asn_map, group, instance))
return jsonify(peers)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment