summaryrefslogtreecommitdiff
path: root/state_tracker.py
diff options
context:
space:
mode:
authorScott Gasch <[email protected]>2022-02-08 17:46:56 -0800
committerScott Gasch <[email protected]>2022-02-08 17:46:56 -0800
commite8fbbb7306430478dec55d2c963eed116d8330cc (patch)
tree28c61b43d11df95b0d70d7f12eba139e02a3942e /state_tracker.py
parent0d63d44ac89aab38fe95f36497adaf95110ab949 (diff)
More cleanup, yey!
Diffstat (limited to 'state_tracker.py')
-rw-r--r--state_tracker.py16
1 files changed, 11 insertions, 5 deletions
diff --git a/state_tracker.py b/state_tracker.py
index e592315..b375f89 100644
--- a/state_tracker.py
+++ b/state_tracker.py
@@ -1,5 +1,10 @@
#!/usr/bin/env python3
+"""Several helpers to keep track of internal state via periodic
+polling. StateTracker expects to be invoked periodically to maintain
+state whereas the others automatically update themselves and,
+optionally, expose an event for client code to wait on state changes."""
+
import datetime
import logging
import threading
@@ -35,6 +40,7 @@ class StateTracker(ABC):
"""
self.update_ids_to_update_secs = update_ids_to_update_secs
self.last_reminder_ts: Dict[str, Optional[datetime.datetime]] = {}
+ self.now: Optional[datetime.datetime] = None
for x in update_ids_to_update_secs.keys():
self.last_reminder_ts[x] = None
@@ -80,13 +86,13 @@ class StateTracker(ABC):
refresh_secs = self.update_ids_to_update_secs[update_id]
last_run = self.last_reminder_ts[update_id]
if last_run is None: # Never run before
- logger.debug(f'id {update_id} has never been run; running it now')
+ logger.debug('id %s has never been run; running it now', update_id)
self.update(update_id, self.now, self.last_reminder_ts[update_id])
self.last_reminder_ts[update_id] = self.now
else:
delta = self.now - last_run
if delta.total_seconds() >= refresh_secs: # Is overdue?
- logger.debug(f'id {update_id} is overdue; running it now')
+ logger.debug('id %s is overdue; running it now', update_id)
self.update(
update_id,
self.now,
@@ -114,7 +120,7 @@ class AutomaticStateTracker(StateTracker):
logger.debug('pace_maker noticed event; shutting down')
return
self.heartbeat()
- logger.debug(f'pace_maker is sleeping for {self.sleep_delay}s')
+ logger.debug('pace_maker is sleeping for %.1fs', self.sleep_delay)
time.sleep(self.sleep_delay)
def __init__(
@@ -127,12 +133,12 @@ class AutomaticStateTracker(StateTracker):
super().__init__(update_ids_to_update_secs)
if override_sleep_delay is not None:
- logger.debug(f'Overriding sleep delay to {override_sleep_delay}')
+ logger.debug('Overriding sleep delay to %.1f', override_sleep_delay)
self.sleep_delay = override_sleep_delay
else:
periods_list = list(update_ids_to_update_secs.values())
self.sleep_delay = math_utils.gcd_float_sequence(periods_list)
- logger.info(f'Computed sleep_delay={self.sleep_delay}')
+ logger.info('Computed sleep_delay=%.1f', self.sleep_delay)
(thread, stop_event) = self.pace_maker()
self.should_terminate = stop_event
self.updater_thread = thread