Skip to content
Snippets Groups Projects
interfaces.py 1.80 KiB
import logging
import re

from brian_polling_manager import sensu

logger = logging.getLogger(__name__)


def load_ifc_checks(sensu_params):
    def _is_ifc_check(check):
        name = check['metadata']['name']
        # check-* is the old-style name (add to the returned
        # data so it can be deleted)
        return re.match(r'^(check|ifc)-[^-]+\.geant\.net-.+$', name)
    ifc_checks = filter(_is_ifc_check, sensu.load_all_checks(sensu_params))
    return {c['metadata']['name']: c for c in ifc_checks}


class InterfaceCheck(sensu.AbstractCheck):

    def __init__(self, ifc_check_params, interface):
        super().__init__()
        self.ifc_check_params = ifc_check_params
        self.interface = interface

    @sensu.AbstractCheck.name.getter
    def name(self):
        ifc_name = self.interface['name'].replace('/', '-').replace(':', '.')
        return f'ifc-{self.interface["router"]}-{ifc_name}'

    @sensu.AbstractCheck.command.getter
    def command(self):
        return self.ifc_check_params['command'].format(
            script=self.ifc_check_params['script'],
            measurement=self.ifc_check_params['measurement'],
            # TODO: add community string to /poller/interfaces response
            # (cf. POL1-339)
            community='0pBiFbD',
            hostname=self.interface['router'],
            interface=self.interface['name'],
            ifIndex=self.interface['snmp-index'])

    @sensu.AbstractCheck.proxy_entity_name.getter
    def proxy_entity_name(self):
        return self.interface['router']


def refresh(sensu_params, inventory_interfaces):

    required_checks = [
        InterfaceCheck(sensu_params['interface-check'], ifc)
        for ifc in inventory_interfaces]

    return sensu.refresh(
        sensu_params,
        required_checks,
        load_ifc_checks(sensu_params))