diff background_loop.py @ 0:a340a9bdaedb

factor this out from wherever it was
author drewp@bigasterisk.com
date Wed, 22 Dec 2021 19:23:34 -0800
parents
children 263ccb9e00df
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/background_loop.py	Wed Dec 22 19:23:34 2021 -0800
@@ -0,0 +1,44 @@
+import time
+import traceback
+import logging
+from typing import Callable
+from prometheus_client import Gauge
+
+log = logging.getLogger()
+
+
+def loop_forever_sync(func, sleep_period, up_metric):
+    first_run = True
+    while True:
+        try:
+            func(first_run)
+            up_metric.set(1)
+            first_run = False
+        except Exception as ex:
+            log.error(ex)
+            traceback.print_exc()
+            up_metric.set(0)
+        time.sleep(sleep_period)
+
+
+def loop_forever_async(func: Callable[[bool], None], sleep_period: float,
+                       up_metric: Gauge):
+    """
+    sleep_period is the sleep time after however long func takes to run
+    """
+    from twisted.internet import reactor
+    first_run = True
+
+    def step():
+        nonlocal first_run
+        try:
+            func(first_run)
+            up_metric.set(1)
+            first_run = False
+        except Exception as ex:
+            log.error(ex)
+            traceback.print_exc()
+            up_metric.set(0)
+        reactor.callLater(sleep_period, step)
+
+    step()
\ No newline at end of file