1 """ Store zmq broadcasts to sqlite """
3 from configparser import ConfigParser
4 from datetime import datetime, timezone
5 from logging import getLogger
9 from .evstore import initdb, stow
10 from .zx303proto import proto_of_message
11 from .zmsg import Bcast
13 log = getLogger("loctrkd/storage")
16 def runserver(conf: ConfigParser) -> None:
17 dbname = conf.get("storage", "dbfn")
18 log.info('Using Sqlite3 database "%s"', dbname)
20 # Is this https://github.com/zeromq/pyzmq/issues/1627 still not fixed?!
21 zctx = zmq.Context() # type: ignore
22 zsub = zctx.socket(zmq.SUB) # type: ignore
23 zsub.connect(conf.get("collector", "publishurl"))
24 zsub.setsockopt(zmq.SUBSCRIBE, b"")
28 zmsg = Bcast(zsub.recv())
30 "%s IMEI %s from %s at %s: %s",
31 "I" if zmsg.is_incoming else "O",
34 datetime.fromtimestamp(zmsg.when).astimezone(tz=timezone.utc),
38 is_incoming=zmsg.is_incoming,
39 peeraddr=str(zmsg.peeraddr),
42 proto=proto_of_message(zmsg.packet),
45 except KeyboardInterrupt:
47 zctx.destroy() # type: ignore
50 if __name__.endswith("__main__"):
51 runserver(common.init(log))