-
Robert Latta authoredRobert Latta authored
alarmsdb.py 2.35 KiB
from inventory_provider import db
def get_last_known_infinera_interface_status(crs, 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
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(crs, 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"
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(
crs, 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"
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(crs, equipment, interface):
result = get_last_known_infinera_interface_status(
crs, equipment, interface)
if result == "unknown":
result = get_last_known_coriant_interface_status(
crs, equipment, interface)
if result == "unknown":
result = get_last_known_juniper_link_interface_status(
crs, equipment, interface)
return result
def _load_juniper_servers_table(connection):
with db.cursor(connection) as crs:
crs.execute('select ip_address, project_name from juniper_servers')
for row in crs.fetchall():
yield {
'ip_address': row[0],
'project_name': row[1]
}
def load_cache(connection):
yield "juniper_servers", list(_load_juniper_servers_table(connection))