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