import collections import json import re from flask import Blueprint, Response, jsonify from inventory_provider.routes import common routes = Blueprint("inventory-opsdb-query-routes", __name__) interfaces_key = "interface_services" equipment_locations_key = "equipment_locations" service_child_to_parents_key = "child_to_parent_circuit_relations" service_parent_to_children_key = "parent_to_children_circuit_relations" interface_status_key = "interface_statuses" # def _decode_utf8_dict(d): # return {k.decode('utf8'): json.loads(v) for k, v in d.items()} # # @routes.route("/interfaces") def get_all_interface_details(): r = common.get_redis() result = collections.defaultdict(list) for k in r.keys('opsdb:interface_services:*'): m = re.match( r'^opsdb:interface_services:([^:]+):(.*)$', k.decode('utf-8')) assert m result[m.group(1)].append(m.group(2)) return jsonify(result) @routes.route("/interfaces/<equipment_name>") def get_interface_details_for_equipment(equipment_name): r = common.get_redis() result = [] for k in r.keys('opsdb:interface_services:%s:*' % equipment_name): m = re.match( r'^opsdb:interface_services:%s:(.*)$' % equipment_name, k.decode('utf-8')) assert m result.append(m.group(1)) return jsonify(result) @routes.route("/interfaces/<equipment_name>/<path:interface>") def get_interface_details(equipment_name, interface): r = common.get_redis() key = 'opsdb:interface_services:%s:%s' % (equipment_name, interface) # TODO: handle None (return 404) return jsonify(json.loads(r.get(key).decode('utf-8'))) @routes.route("/equipment-location") def get_all_equipment_locations(): r = common.get_redis() result = {} for k in r.keys('opsdb:location:*'): k = k.decode('utf-8') m = re.match(r'^opsdb:location:(.*)$', k) assert m result[m.group(1)] = json.loads(r.get(k).decode('utf-8')) return jsonify(result) @routes.route("/equipment-location/<path:equipment_name>") def get_equipment_location(equipment_name): r = common.get_redis() result = r.get('opsdb:location:' + equipment_name) # TODO: handle None (return 404) return jsonify(json.loads(result.decode('utf-8'))) @routes.route("/circuit-hierarchy/children/<int:parent_id>") def get_children(parent_id): r = common.get_redis() result = r.get('opsdb:services:children:%d' % parent_id) # TODO: handle None (return 404) return jsonify(json.loads(result.decode('utf-8'))) @routes.route("/circuit-hierarchy/parents/<int:child_id>") def get_parents(child_id): r = common.get_redis() result = r.get('opsdb:services:parents:%d' % child_id) # TODO: handle None (return 404) return jsonify(json.loads(result.decode('utf-8')))