From 965eefea2b8519f9eece10d203b3a04ec6e553bb Mon Sep 17 00:00:00 2001 From: Erik Reid <erik.reid@geant.org> Date: Tue, 15 Jun 2021 16:29:32 +0200 Subject: [PATCH] moved some reusable code to sensu module --- brian_polling_manager/interfaces.py | 36 +++++--------------------- brian_polling_manager/main.py | 2 +- brian_polling_manager/sensu.py | 40 +++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 31 deletions(-) diff --git a/brian_polling_manager/interfaces.py b/brian_polling_manager/interfaces.py index 9bdfa77..3d2d47d 100644 --- a/brian_polling_manager/interfaces.py +++ b/brian_polling_manager/interfaces.py @@ -43,37 +43,13 @@ class InterfaceCheck(sensu.AbstractCheck): return self.interface['router'] -def refresh(sensu_params, state): +def refresh(sensu_params, inventory_interfaces): - current_ifc_checks = load_ifc_checks(sensu_params) - - created = 0 - updated = 0 required_checks = [ InterfaceCheck(sensu_params['interface-check'], ifc) - for ifc in state.interfaces] - - for expected_check in required_checks: - - if expected_check.name not in current_ifc_checks: - sensu.create_check(sensu_params, expected_check.to_dict()) - created += 1 - elif not sensu.AbstractCheck.match_check_dicts( - current_ifc_checks[expected_check.name], - expected_check.to_dict()): - sensu.update_check(sensu_params, expected_check.to_dict()) - updated += 1 - - wanted_checks = {check.name for check in required_checks} - extra_checks = set(current_ifc_checks.keys()) - wanted_checks - for name in extra_checks: - sensu.delete_check(sensu_params, name) + for ifc in inventory_interfaces] - # cf. main.REFRESH_RESULT_SCHEMA - return { - 'checks': len(current_ifc_checks), - 'input': len(required_checks), - 'created': created, - 'updated': updated, - 'deleted': len(extra_checks) - } + return sensu.refresh( + sensu_params, + required_checks, + load_ifc_checks(sensu_params)) diff --git a/brian_polling_manager/main.py b/brian_polling_manager/main.py index bd2c484..b11406b 100644 --- a/brian_polling_manager/main.py +++ b/brian_polling_manager/main.py @@ -80,7 +80,7 @@ def refresh(config, force=False): # state.gws_direct = inventory.load_gws_direct_interfaces( # config['inventory']) result = { - 'interfaces': interfaces.refresh(config['sensu'], state), + 'interfaces': interfaces.refresh(config['sensu'], state.interfaces), # 'gws direct': gws_direct.refresh(config['sensu'], state) } diff --git a/brian_polling_manager/sensu.py b/brian_polling_manager/sensu.py index 228ea51..b1d4295 100644 --- a/brian_polling_manager/sensu.py +++ b/brian_polling_manager/sensu.py @@ -168,3 +168,43 @@ class AbstractCheck(object): if a['metadata']['namespace'] != b['metadata']['namespace']: return False return True + + +def refresh(sensu_params, required_checks, current_checks): + """ + update any current_checks that are not present in required_checks + remove any extras + + :param sensu_params: + :param required_checks: list of AbstractCheck instances + :param current_checks: dict of {name:check_dict} from sensu + :return: dict with change counts + """ + + # cf. main.REFRESH_RESULT_SCHEMA + result = { + 'checks': len(current_checks), + 'input': len(required_checks), + 'created': 0, + 'updated': 0, + 'deleted': None + } + + for expected_check in required_checks: + + if expected_check.name not in current_checks: + create_check(sensu_params, expected_check.to_dict()) + result['created'] += 1 + elif not AbstractCheck.match_check_dicts( + current_checks[expected_check.name], + expected_check.to_dict()): + update_check(sensu_params, expected_check.to_dict()) + result['updated'] += 1 + + wanted_checks = {check.name for check in required_checks} + extra_checks = set(current_checks.keys()) - wanted_checks + for name in extra_checks: + delete_check(sensu_params, name) + + result['deleted'] = len(extra_checks) + return result -- GitLab