diff --git a/brian_polling_manager/interfaces.py b/brian_polling_manager/interfaces.py index 9bdfa77a27bf82b1e651d80acee5fd0f2d262d8e..3d2d47dc06a5766405b97c4c2cde9792918c4298 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 bd2c484473f9f76059fbf9a6651e618ecaf03e3f..b11406b90d8ff2372fc5ea00d13cdea71e123d3f 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 228ea5188e67e81055168b152eb87ffa9c418736..b1d429568e6a218afdd698cb3f98f495ad7190e6 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