Mercurial > personal > weatherlog
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 |
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)) |