Skip to content
Snippets Groups Projects
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))