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

Added alarmsdb interface check implementation and route

parent 10ad9426
Branches
Tags
No related merge requests found
import contextlib
import logging
import mysql.connector
from inventory_provider.constants import DATABASE_LOGGER_NAME
@contextlib.contextmanager
def connection(alarmsdb):
......@@ -32,12 +28,61 @@ def cursor(cnx):
csr.close()
def _db_test(db, router):
database_logger = logging.getLogger(DATABASE_LOGGER_NAME)
def get_last_known_infinera_interface_status(db, equipment, interface):
query = "SELECT status FROM infinera_alarms" \
" WHERE" \
" CONCAT(ne_name, '-', REPLACE(object_name, 'T', '')) = %s" \
" ORDER BY ne_init_time DESC, ne_clear_time DESC LIMIT 1"
search_string = equipment + "-" + interface
with cursor(db) as crs:
crs.execute(query, (search_string,))
result = crs.fetchone()
if not result:
return "unknown"
elif result[0] == "Raised":
return "down"
else:
return "up"
def get_last_known_coriant_interface_status(db, equipment, interface):
query = "SELECT status FROM coriant_alarms" \
" WHERE ne_id_name = %s AND entity_string LIKE %s" \
" ORDER BY last_event_time DESC LIMIT 1"
with cursor(db) as crs:
database_logger.debug("_db_test: %r" % router)
query = "SELECT absid FROM routers WHERE hostname = %s"
crs.execute(query, (router['hostname'],))
for (absid,) in crs:
database_logger.debug("absid: %r" % absid)
yield absid
crs.execute(query, (equipment, interface + "-%"))
result = crs.fetchone()
if not result:
return "unknown"
elif result[0] == "Raised":
return "down"
else:
return "up"
def get_last_known_juniper_link_interface_status(db, equipment, interface):
query = "SELECT IF(link_admin_status = 'up'" \
" AND link_oper_status = 'up', 1, 0) AS up FROM juniper_alarms" \
" WHERE equipment_name = %s AND link_interface_name = %s" \
" ORDER BY alarm_id DESC LIMIT 1"
with cursor(db) as crs:
crs.execute(query, ('lo0.' + equipment, interface))
result = crs.fetchone()
if not result:
return "unknown"
elif result[0] == 0:
return "down"
else:
return "up"
def get_last_known_interface_status(db, equipment, interface):
result = get_last_known_infinera_interface_status(
db, equipment, interface)
if result == "unknown":
result = get_last_known_coriant_interface_status(
db, equipment, interface)
if result == "unknown":
result = get_last_known_juniper_link_interface_status(
db, equipment, interface)
return result
......@@ -26,16 +26,19 @@ def require_accepts_json(f):
return decorated_function
@routes.route("/test", methods=['GET', 'POST'])
@routes.route("/interface-status", methods=['GET', 'POST'])
@require_accepts_json
def alarmsdb_test():
def get_interface_status():
config = current_app.config['INVENTORY_PROVIDER_CONFIG']
result = {}
equipment = request.args.get("equipment")
interface = request.args.get("interface")
with alarmsdb.connection(config['alarms-db']) as db:
for r in config['routers']:
result[r['hostname']] = list(alarmsdb._db_test(db, r))
result = {"status": alarmsdb.get_last_known_interface_status(
db, equipment, interface)}
print(result)
return Response(
json.dumps(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