1 """ Common housekeeping for all daemons """
3 from configparser import ConfigParser
4 from importlib import import_module
5 from getopt import getopt
6 from logging import Formatter, getLogger, Logger, StreamHandler, DEBUG, INFO
7 from logging.handlers import SysLogHandler
8 from pkg_resources import get_distribution, DistributionNotFound
9 from sys import argv, stderr, stdout
10 from typing import Any, cast, Dict, List, Optional, Tuple, Union
12 from .protomodule import ProtoModule
14 CONF = "/etc/loctrkd.conf"
15 pmods: List[ProtoModule] = []
18 version = get_distribution("loctrkd").version
19 except DistributionNotFound:
23 def init_protocols(conf: ConfigParser) -> None:
26 cast(ProtoModule, import_module("." + modnm, __package__))
27 for modnm in conf.get("common", "protocols").split(",")
32 log: Logger, opts: Optional[List[Tuple[str, str]]] = None
35 opts, _ = getopt(argv[1:], "c:d")
38 conf.read(dopts["-c"] if "-c" in dopts else CONF)
39 log.setLevel(DEBUG if "-d" in dopts else INFO)
41 fhdl = StreamHandler(stderr)
43 Formatter("%(asctime)s - %(levelname)s - %(message)s")
46 log.debug("%s starting with options: %s", version, dopts)
48 lhdl = SysLogHandler(address="/dev/log")
50 Formatter("%(name)s[%(process)d]: %(levelname)s - %(message)s")
53 log.info("%s starting with options: %s", version, dopts)
58 def probe_pmod(segment: bytes) -> Optional[ProtoModule]:
60 if pmod.probe_buffer(segment):
65 def pmod_for_proto(proto: str) -> Optional[ProtoModule]:
67 if pmod.proto_handled(proto):