From ff13a394bab4d797a300455950df77c12bce5f74 Mon Sep 17 00:00:00 2001
From: Marcin Sobczyk <msobczyk@syncad.com>
Date: Thu, 13 Mar 2025 12:35:41 +0100
Subject: [PATCH] Run periodic works update node/alarms data only if its not
 ongoing

---
 clive/__private/ui/app.py | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/clive/__private/ui/app.py b/clive/__private/ui/app.py
index f8c15da749..c4975138ab 100644
--- a/clive/__private/ui/app.py
+++ b/clive/__private/ui/app.py
@@ -163,10 +163,10 @@ class Clive(App[int]):
 
     def on_mount(self) -> None:
         self._refresh_node_data_interval = self.set_interval(
-            safe_settings.node.refresh_rate_secs, lambda: self.update_data_from_node(), pause=True
+            safe_settings.node.refresh_rate_secs, self._retrigger_update_data_from_node, pause=True
         )
         self._refresh_alarms_data_interval = self.set_interval(
-            safe_settings.node.refresh_alarms_rate_secs, lambda: self.update_alarms_data(), pause=True
+            safe_settings.node.refresh_alarms_rate_secs, self._retrigger_update_alarms_data, pause=True
         )
 
         self._refresh_beekeeper_wallet_lock_status_interval = self.set_interval(
@@ -309,3 +309,14 @@ class Clive(App[int]):
         loop = asyncio.get_running_loop()  # can't use self._loop since it's not set yet
         for signal_number in [signal.SIGHUP, signal.SIGINT, signal.SIGQUIT, signal.SIGTERM]:
             loop.add_signal_handler(signal_number, callback)
+
+    def _is_worker_group_empty(self, group: str) -> bool:
+        return not bool([worker for worker in self.workers if worker.group == group])
+
+    def _retrigger_update_data_from_node(self) -> None:
+        if self._is_worker_group_empty("node_data"):
+            self.update_data_from_node()
+
+    def _retrigger_update_alarms_data(self) -> None:
+        if self._is_worker_group_empty("alarms_data"):
+            self.update_alarms_data()
-- 
GitLab