diff --git a/brian_polling_manager/configuration.py b/brian_polling_manager/configuration.py index a200bb881182fd2d521b7474ca318054b207f18a..e7c273d54762b1d074e805af20ea4721cbbf8a74 100644 --- a/brian_polling_manager/configuration.py +++ b/brian_polling_manager/configuration.py @@ -36,12 +36,19 @@ _DEFAULT_CONFIG = { 'gws-direct-interface-check': { 'script': '/var/lib/sensu/bin/poll-gws-direct.sh', 'measurement': 'gwsd_counters', - 'command': '{script} {measurement} {nren} {isp} {hostname} {tag}' + 'command': '{script} --inventory http://localhost:18080' + ' {measurement} {nren} {isp} {hostname} {tag}' }, 'dscp32-service-check': { 'script': '/var/lib/sensu/bin/poll-gws-indirect.sh', 'measurement': 'dscp32_counters', 'command': '{script} {measurement} {service}' + }, + 'eumetsat-multicast-check': { + 'script': '/home/brian_checks/venv/eumetsat-multicast', + 'measurement': 'multicast', + 'command': '{script} --inventory http://localhost:18080' + ' --measurement {measurement} --hostname {hostname}' } }, 'statedir': '/tmp/', @@ -75,16 +82,21 @@ CONFIG_SCHEMA = { 'minItems': 1 }, 'api-key': {'type': 'string'}, - 'interface-check': {'$ref': '#/definitions/influx-check'}, + 'interface-check': + {'$ref': '#/definitions/influx-check'}, 'gws-direct-interface-check': {'$ref': '#/definitions/influx-check'}, - 'dscp32-service-check': {'$ref': '#/definitions/influx-check'}, + 'dscp32-service-check': + {'$ref': '#/definitions/influx-check'}, + 'eumetsat-multicast-check': + {'$ref': '#/definitions/influx-check'}, }, 'required': [ 'api-base', 'api-key', 'interface-check', 'gws-direct-interface-check', - 'dscp32-service-check'], + 'dscp32-service-check', + 'eumetsat-multicast-check'], 'additionalProperties': False }, 'statsd': { diff --git a/brian_polling_manager/eumetsat_multicast.py b/brian_polling_manager/eumetsat_multicast.py new file mode 100644 index 0000000000000000000000000000000000000000..2912e49c264260f26c14ff4b09b2cb31283e106a --- /dev/null +++ b/brian_polling_manager/eumetsat_multicast.py @@ -0,0 +1,48 @@ +from brian_polling_manager import sensu + + +def load_eumetsat_multicast_checks(sensu_params): + def _is_eumetsat_multicast_check(check): + name = check['metadata']['name'] + return name.startswith('eumetmc') + ifc_checks = filter( + _is_eumetsat_multicast_check, sensu.load_all_checks(sensu_params)) + return {c['metadata']['name']: c for c in ifc_checks} + + +class EUMETSATMulticastHostCheck(sensu.AbstractCheck): + + def __init__(self, check_config, hostname): + super().__init__() + self.check_config = check_config + self.hostname = hostname + + @sensu.AbstractCheck.name.getter + def name(self): + return f'eumetmc-{self.hostname}' + + @sensu.AbstractCheck.command.getter + def command(self): + return self.check_config['command'].format( + script=self.check_config['script'], + measurement=self.check_config['measurement'], + hostname=self.hostname) + + @sensu.AbstractCheck.proxy_entity_name.getter + def proxy_entity_name(self): + return self.hostname + + +def refresh(sensu_params, eumetsat_multicast_config): + + # one check per unique host + all_routers = {x['router'] for x in eumetsat_multicast_config} + required_checks = [ + EUMETSATMulticastHostCheck( + sensu_params['eumetsat-multicast-check'], hostname) + for hostname in all_routers] + + return sensu.refresh( + sensu_params, + required_checks, + load_eumetsat_multicast_checks(sensu_params)) diff --git a/brian_polling_manager/main.py b/brian_polling_manager/main.py index a753961cd9aa60da479c218461dde27b6de08dda..cb31270288382a802917b699eb398ffb80a58715 100644 --- a/brian_polling_manager/main.py +++ b/brian_polling_manager/main.py @@ -30,7 +30,7 @@ import jsonschema from statsd import StatsClient from brian_polling_manager import inventory, configuration, \ - interfaces, gws_direct, gws_indirect, sensu + interfaces, gws_direct, gws_indirect, eumetsat_multicast, sensu logger = logging.getLogger(__name__) @@ -90,6 +90,9 @@ def refresh(config, force=False): 'gws_direct': gws_direct.refresh(config['sensu'], state.gws_direct), 'gws_indirect': gws_indirect.refresh( config['sensu'], state.gws_indirect), + 'eumetsat_multicast': eumetsat_multicast.refresh( + config['sensu'], state.eumetsat_multicast), + } jsonschema.validate(result, REFRESH_RESULT_SCHEMA) # sanity