data.py 1.71 KiB
import json
import re
from flask import Blueprint, jsonify, Response, current_app
from inventory_provider.routes import common
from inventory_provider.db import db
from inventory_provider.db import opsdb
routes = Blueprint("inventory-data-query-routes", __name__)
@routes.after_request
def after_request(resp):
return common.after_request(resp)
@routes.route("/routers", methods=['GET', 'POST'])
@common.require_accepts_json
def routers():
r = common.get_current_redis()
result = []
for k in r.keys('netconf:*'):
m = re.match('^netconf:(.+)$', k.decode('utf-8'))
assert m
result.append(m.group(1))
return jsonify(result)
@routes.route("/interfaces/<hostname>", methods=['GET', 'POST'])
@common.require_accepts_json
def router_interfaces(hostname):
r = common.get_current_redis()
interfaces = []
for k in r.keys('netconf-interfaces:%s:*' % hostname):
ifc = r.get(k.decode('utf-8'))
if ifc:
interfaces.append(json.loads(ifc.decode('utf-8')))
if not interfaces:
return Response(
response="no available interface info for '%s'" % hostname,
status=404,
mimetype="text/html")
return jsonify(interfaces)
@routes.route("/pop/<equipment_name>", methods=['GET', 'POST'])
@common.require_accepts_json
def equipment_location(equipment_name):
config = current_app.config['INVENTORY_PROVIDER_CONFIG']
with db.connection(config['ops-db']) as cx:
result = opsdb.lookup_pop_info(cx, equipment_name)
if not result:
return Response(
response="no available info for {}".format(equipment_name),
status=404,
mimetype="text/html")
return jsonify(result)