# HG changeset patch # User drewp@bigasterisk.com # Date 1640229814 28800 # Node ID a340a9bdaedbc2bad79ebac20c7023e246152fa0 factor this out from wherever it was diff -r 000000000000 -r a340a9bdaedb background_loop.py --- /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 diff -r 000000000000 -r a340a9bdaedb setup.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/setup.py Wed Dec 22 19:23:34 2021 -0800 @@ -0,0 +1,15 @@ +from setuptools import setup + +setup( + name='background_loop', + version='0.0.0', + packages=['background_loop'], + package_dir={'background_loop': ''}, + install_requires=[ + 'prometheus_client', + 'twisted', + ], + url='https://projects.bigasterisk.com/background_loop/background_loop-0.0.0.tar.gz', + author='Drew Perttula', + author_email='drewp@bigasterisk.com', +) diff -r 000000000000 -r a340a9bdaedb tasks.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tasks.py Wed Dec 22 19:23:34 2021 -0800 @@ -0,0 +1,9 @@ +from invoke import task + +import sys +sys.path.append('/my/proj/release') +from release import local_release + +@task +def release(ctx): + local_release(ctx)