From 9a9902070959b2bf73e9005dbd0584e31aed9fce Mon Sep 17 00:00:00 2001 From: Blallo Date: Mon, 28 Jan 2019 21:08:04 +0100 Subject: [PATCH] Daemon fully working. Log still spamming on stderr. --- bot_z/cli.py | 38 ++++++++++++++++++++++++++++++++++---- bot_z/zdaemon.py | 1 + 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/bot_z/cli.py b/bot_z/cli.py index e80304b..864ae96 100644 --- a/bot_z/cli.py +++ b/bot_z/cli.py @@ -3,7 +3,9 @@ """Console script to control the bot_z daemon""" import errno +import logging import os +import sys import time import typing as T @@ -12,9 +14,22 @@ import lockfile from bot_z.zdaemon import daemon_process, Fifo +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) +sh = logging.StreamHandler(stream=sys.stdout) +sh.setFormatter(logging.Formatter("%(message)s")) +logger.addHandler(sh) + @click.group() @click.option("-d", "--debug", is_flag=True, default=False, help="Enable debug mode.") +@click.option( + "-v", + "--verbose", + is_flag=True, + default=False, + help="More verbose output from this cli.", +) @click.option( "-f", "--fifo", @@ -30,12 +45,17 @@ from bot_z.zdaemon import daemon_process, Fifo help="The working dir where to launch the daemon and where the lockfile is put.", ) @click.pass_context -def cli(ctx: click.Context, debug: bool, fifo: str, workdir: str) -> None: +def cli( + ctx: click.Context, debug: bool, verbose: bool, fifo: str, workdir: str +) -> None: """ Group cli. """ + if verbose: + logger.setLevel(logging.DEBUG) ctx.ensure_object(dict) ctx.obj["debug"] = debug + ctx.obj["verbose"] = verbose ctx.obj["fifo"] = fifo ctx.obj["workdir"] = workdir @@ -85,7 +105,8 @@ def start_command( """ Invokes daemon_process for the first time. """ - lf = lockfile.FileLock(os.path.join(ctx.obj["workdir"], "bot_z.lock")) + lf = lockfile.FileLock(os.path.join(ctx.obj["workdir"], "bot_z")) + logger.debug("Daemon starting. Lockfile: %s", lf) proxy_tuple = None if proxy: proxy_tuple = tuple(proxy.split(":")) @@ -103,6 +124,7 @@ def start_command( debug=ctx.obj["debug"], foreground=foreground, ) + logger.info("Daemon started.") @cli.command("stop") @@ -111,9 +133,11 @@ def stop_command(ctx: click.Context): """ Writes on the fifo. Invokes the stop. """ + logger.debug("Sending the stop command down the pipe: %s", ctx.obj["fifo"]) with open(ctx.obj["fifo"], "w") as fifo: fifo.write("stop") fifo.flush() + logger.info("Stop sent.") @cli.command("reload") @@ -122,9 +146,11 @@ def reload_command(ctx: click.Context): """ Writes on the fifo. Invokes the reload. """ + logger.debug("Sending the reload command down the pipe: %s", ctx.obj["fifo"]) with open(ctx.obj["fifo"], "w") as fifo: fifo.write("reload") fifo.flush() + logger.info("Reload sent.") @cli.command("status") @@ -134,14 +160,18 @@ def status_command(ctx: click.Context): Writes on the fifo. Queries the status. """ rfifo_path = os.path.join(ctx.obj["workdir"], "rfifo-{}".format(id(ctx))) + logger.debug("Awaiting response on fifo: %s", rfifo_path) try: os.mkfifo(rfifo_path) + logger.debug("Response fifo newly created.") except OSError as err: if err.errno != errno.EEXIST: raise + logger.debug("Response fifo exists.") with Fifo(ctx.obj["fifo"], "w") as fifo: fifo.write("status|{}".format(rfifo_path)) + logger.debug("Awaiting response...") done = False while not done: try: @@ -149,9 +179,9 @@ def status_command(ctx: click.Context): resp = rfifo.read() done = True except FileNotFoundError as e: - print(e) + logger.warning("File not found: %s", e) pass - print(resp) + logger.info(resp) if __name__ == "__main__": diff --git a/bot_z/zdaemon.py b/bot_z/zdaemon.py index d72c0be..851a0e6 100644 --- a/bot_z/zdaemon.py +++ b/bot_z/zdaemon.py @@ -137,6 +137,7 @@ def daemon_process( class Fifo(object): """ Iterator to continuously read the command fifo. + Supports also write operations if opened with mode="r". """ def __init__(self, fifopath: str, mode: str = "r") -> None: