view weatherlog/daemon.py @ 13:4c81182eaa6b

daemon: Fail less ungracefully, bump to v0.1.0.
author Paul Fisher <paul@pfish.zone>
date Sun, 29 Sep 2019 12:11:16 -0400
parents 91e22a09b82f
children c01f9929ae38
line wrap: on
line source

"""Entry point to set up a temperature logging daemon."""

import time
import typing as t

from . import http_writer
from . import logger
from . import reader

DEFAULT_INTERVAL_SECS = 60
MIN_INTERVAL_SECS = 5


def run(
    directory: str,
    url: str,
    preamble: t.Dict[str, t.Any],
    interval: int = DEFAULT_INTERVAL_SECS,
):
    """Sets up and runs a logger daemon."""
    writer = http_writer.HTTPWriter(url, preamble)
    log = logger.BufferedLogger(directory, writer)
    log.start()

    r = reader.DHT22Reader()
    cycle = 0
    start = time.time()
    try:
        while True:
            log.write(r.read())
            cycle += 1
            target = start + interval * cycle
            now = time.time()
            time.sleep(max(target - now, MIN_INTERVAL_SECS))
    finally:
        log.close()