annotate weatherlog/daemon.py @ 12:91e22a09b82f

Create 'daemon.py', a runner to tie it all together.
author Paul Fisher <paul@pfish.zone>
date Sun, 29 Sep 2019 11:53:35 -0400
parents
children 4c81182eaa6b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
1 """Entry point to set up a temperature logging daemon."""
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
2
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
3 import time
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
4 import typing as t
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
5
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
6 from . import http_writer
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
7 from . import logger
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
8 from . import reader
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
9
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
10 DEFAULT_INTERVAL_SECS = 60
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
11 MIN_INTERVAL_SECS = 5
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
12
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
13
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
14 def run(
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
15 directory: str,
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
16 url: str,
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
17 preamble: t.Dict[str, t.Any],
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
18 interval: int = DEFAULT_INTERVAL_SECS,
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
19 ):
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
20 """Sets up and runs a logger daemon."""
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
21 writer = http_writer.HTTPWriter(url, preamble)
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
22 log = logger.BufferedLogger(directory, writer)
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
23 log.start()
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
24
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
25 r = reader.DHT22Reader()
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
26 cycle = 0
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
27 start = time.time()
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
28 while True:
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
29 log.write(r.read())
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
30 cycle += 1
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
31 target = start + interval * cycle
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
32 now = time.time()
91e22a09b82f Create 'daemon.py', a runner to tie it all together.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
33 time.sleep(max(target - now, MIN_INTERVAL_SECS))