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

Added addiotional route and implementation for getting interface status from cache

parent 40869a66
No related branches found
No related tags found
No related merge requests found
from inventory_provider import db from inventory_provider import db
def get_last_known_infinera_interface_status(connection, equipment, interface): def get_last_known_infinera_interface_status(crs, equipment, interface):
query = "SELECT status FROM infinera_alarms" \ query = "SELECT status FROM infinera_alarms" \
" WHERE" \ " WHERE" \
" CONCAT(ne_name, '-', REPLACE(object_name, 'T', '')) = %s" \ " CONCAT(ne_name, '-', REPLACE(object_name, 'T', '')) = %s" \
" ORDER BY ne_init_time DESC, ne_clear_time DESC LIMIT 1" " ORDER BY ne_init_time DESC, ne_clear_time DESC LIMIT 1"
search_string = equipment + "-" + interface search_string = equipment + "-" + interface
with db.cursor(connection) as crs: crs.execute(query, (search_string,))
crs.execute(query, (search_string,)) result = crs.fetchone()
result = crs.fetchone()
if not result: if not result:
return "unknown" return "unknown"
elif result[0] == "Raised": elif result[0] == "Raised":
...@@ -18,13 +17,12 @@ def get_last_known_infinera_interface_status(connection, equipment, interface): ...@@ -18,13 +17,12 @@ def get_last_known_infinera_interface_status(connection, equipment, interface):
return "up" return "up"
def get_last_known_coriant_interface_status(connection, equipment, interface): def get_last_known_coriant_interface_status(crs, equipment, interface):
query = "SELECT status FROM coriant_alarms" \ query = "SELECT status FROM coriant_alarms" \
" WHERE ne_id_name = %s AND entity_string LIKE %s" \ " WHERE ne_id_name = %s AND entity_string LIKE %s" \
" ORDER BY last_event_time DESC LIMIT 1" " ORDER BY last_event_time DESC LIMIT 1"
with db.cursor(connection) as crs: crs.execute(query, (equipment, interface + "-%"))
crs.execute(query, (equipment, interface + "-%")) result = crs.fetchone()
result = crs.fetchone()
if not result: if not result:
return "unknown" return "unknown"
elif result[0] == "Raised": elif result[0] == "Raised":
...@@ -34,14 +32,13 @@ def get_last_known_coriant_interface_status(connection, equipment, interface): ...@@ -34,14 +32,13 @@ def get_last_known_coriant_interface_status(connection, equipment, interface):
def get_last_known_juniper_link_interface_status( def get_last_known_juniper_link_interface_status(
connection, equipment, interface): crs, equipment, interface):
query = "SELECT IF(link_admin_status = 'up'" \ query = "SELECT IF(link_admin_status = 'up'" \
" AND link_oper_status = 'up', 1, 0) AS up FROM juniper_alarms" \ " AND link_oper_status = 'up', 1, 0) AS up FROM juniper_alarms" \
" WHERE equipment_name = %s AND link_interface_name = %s" \ " WHERE equipment_name = %s AND link_interface_name = %s" \
" ORDER BY alarm_id DESC LIMIT 1" " ORDER BY alarm_id DESC LIMIT 1"
with db.cursor(connection) as crs: crs.execute(query, ('lo0.' + equipment, interface))
crs.execute(query, ('lo0.' + equipment, interface)) result = crs.fetchone()
result = crs.fetchone()
if not result: if not result:
return "unknown" return "unknown"
elif result[0] == 0: elif result[0] == 0:
...@@ -50,15 +47,15 @@ def get_last_known_juniper_link_interface_status( ...@@ -50,15 +47,15 @@ def get_last_known_juniper_link_interface_status(
return "up" return "up"
def get_last_known_interface_status(connection, equipment, interface): def get_last_known_interface_status(crs, equipment, interface):
result = get_last_known_infinera_interface_status( result = get_last_known_infinera_interface_status(
connection, equipment, interface) crs, equipment, interface)
if result == "unknown": if result == "unknown":
result = get_last_known_coriant_interface_status( result = get_last_known_coriant_interface_status(
connection, equipment, interface) crs, equipment, interface)
if result == "unknown": if result == "unknown":
result = get_last_known_juniper_link_interface_status( result = get_last_known_juniper_link_interface_status(
connection, equipment, interface) crs, equipment, interface)
return result return result
......
...@@ -2,11 +2,12 @@ import functools ...@@ -2,11 +2,12 @@ import functools
import json import json
import pkg_resources import pkg_resources
from flask import Blueprint, request, Response, current_app from flask import Blueprint, jsonify, request, Response, current_app
from lxml import etree from lxml import etree
import redis import redis
from inventory_provider import juniper from inventory_provider import db, juniper
from inventory_provider.storage import external_inventory
routes = Blueprint("inventory-data-query-routes", __name__) routes = Blueprint("inventory-data-query-routes", __name__)
...@@ -162,3 +163,18 @@ def bgp_configs(hostname): ...@@ -162,3 +163,18 @@ def bgp_configs(hostname):
return Response( return Response(
json.dumps(routes), json.dumps(routes),
mimetype="application/json") mimetype="application/json")
@routes.route("/interfaces/status/<hostname>/<path:interface>",
methods=['GET', 'POST'])
@require_accepts_json
def interface_statuses(hostname, interface):
r = db.get_redis()
result = r.hget(external_inventory.interface_status_key,
"{}::{}".format(hostname, interface))
if not result:
return Response(
response="no available info for {} {}".format(hostname, interface),
status=404,
mimetype="text/html")
return jsonify({"status": result.decode('utf-8')})
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment