diff --git a/brian_polling_manager/interfaces.py b/brian_polling_manager/interfaces.py index a94a13c2254c0d691be7b28e7ae029153e4561bb..30de108cd3c1a4f47efcda946b88e9c6a9be9602 100644 --- a/brian_polling_manager/interfaces.py +++ b/brian_polling_manager/interfaces.py @@ -70,7 +70,7 @@ def _checks_match(a, b) -> bool: return True -def refresh(sensu_params, state, statsd=None): +def refresh(sensu_params, state): ifc_checks = load_ifc_checks(sensu_params) @@ -97,9 +97,10 @@ def refresh(sensu_params, state, statsd=None): for name in extra_checks: sensu.delete_check(sensu_params, name) - if statsd: - statsd.gauge('checks', len(ifc_checks)) - statsd.gauge('interfaces', interfaces) - statsd.gauge('checks_created', created) - statsd.gauge('checks_updated', updated) - statsd.gauge('checks_deleted', len(extra_checks)) + return { + 'checks': len(ifc_checks), + 'input': interfaces, + 'created': created, + 'updated': updated, + 'deleted': len(extra_checks) + } diff --git a/brian_polling_manager/main.py b/brian_polling_manager/main.py index 1b8999721a7f25a587ceff8ab17ee20a583d5c7a..03969f48f04caaa424ac6fd4a9ded7bff9f9974d 100644 --- a/brian_polling_manager/main.py +++ b/brian_polling_manager/main.py @@ -34,6 +34,36 @@ from brian_polling_manager import inventory, interfaces, configuration logger = logging.getLogger(__name__) +def refresh(config, force=False): + """ + reload inventory data & update sensu checks + + :param config: a dict returned by configuration.load_config + :param force: if True, reload inventory data even if timestamp is same + :return: + """ + state = configuration.State(config['statedir']) + last = inventory.last_update_timestamp(config['inventory']) + if force or not last or last != state.last: + state.last = last + state.interfaces = inventory.load_interfaces(config['inventory']) + + result = interfaces.refresh(config['sensu'], state) + + statsd_config = config.get('statsd', None) + if statsd_config: + statsd = StatsClient( + host=statsd_config['hostname'], + port=statsd_config['port'], + prefix=f'{statsd_config["prefix"]}_interfaces') + statsd.gauge('checks', result['checks']) + statsd.gauge('input', result['input']) + statsd.gauge('created', result['created']) + statsd.gauge('updated', result['updated']) + statsd.gauge('deleted', result['deleted']) + + return statsd_config + def _validate_config(_ctx, _param, file): """ loads, validates and returns configuration parameters @@ -65,23 +95,7 @@ def cli(config, force): """ Update BRIAN snmp checks based on Inventory Provider data. """ - - state = configuration.State(config['statedir']) - last = inventory.last_update_timestamp(config['inventory']) - if force or not last or last != state.last: - state.last = last - state.interfaces = inventory.load_interfaces(config['inventory']) - - statsd_config = config.get('statsd', None) - if statsd_config: - statsd = StatsClient( - host=statsd_config['hostname'], - port=statsd_config['port'], - prefix=statsd_config['prefix']) - else: - statsd = None - - interfaces.refresh(config['sensu'], state, statsd=statsd) + refresh(config, force) if __name__ == '__main__':