X-Git-Url: http://average.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=loctrkd%2Fstorage.py;fp=loctrkd%2Fstorage.py;h=473806e2154c36b2f9c445b35dba818e0441564c;hb=dbdf9d63af31770ad57302e16b17a2fdc526773f;hp=0000000000000000000000000000000000000000;hpb=bf48ccad4b4b91e7d7e09d1087f5953bc2db97d7;p=loctrkd.git diff --git a/loctrkd/storage.py b/loctrkd/storage.py new file mode 100644 index 0000000..473806e --- /dev/null +++ b/loctrkd/storage.py @@ -0,0 +1,51 @@ +""" Store zmq broadcasts to sqlite """ + +from configparser import ConfigParser +from datetime import datetime, timezone +from logging import getLogger +import zmq + +from . import common +from .evstore import initdb, stow +from .zx303proto import proto_of_message +from .zmsg import Bcast + +log = getLogger("loctrkd/storage") + + +def runserver(conf: ConfigParser) -> None: + dbname = conf.get("storage", "dbfn") + log.info('Using Sqlite3 database "%s"', dbname) + initdb(dbname) + # Is this https://github.com/zeromq/pyzmq/issues/1627 still not fixed?! + zctx = zmq.Context() # type: ignore + zsub = zctx.socket(zmq.SUB) # type: ignore + zsub.connect(conf.get("collector", "publishurl")) + zsub.setsockopt(zmq.SUBSCRIBE, b"") + + try: + while True: + zmsg = Bcast(zsub.recv()) + log.debug( + "%s IMEI %s from %s at %s: %s", + "I" if zmsg.is_incoming else "O", + zmsg.imei, + zmsg.peeraddr, + datetime.fromtimestamp(zmsg.when).astimezone(tz=timezone.utc), + zmsg.packet.hex(), + ) + stow( + is_incoming=zmsg.is_incoming, + peeraddr=str(zmsg.peeraddr), + when=zmsg.when, + imei=zmsg.imei, + proto=proto_of_message(zmsg.packet), + packet=zmsg.packet, + ) + except KeyboardInterrupt: + zsub.close() + zctx.destroy() # type: ignore + + +if __name__.endswith("__main__"): + runserver(common.init(log))