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