1 """ Store zmq broadcasts to sqlite """
3 from datetime import datetime, timezone
4 from logging import getLogger
8 from .evstore import initdb, stow
9 from .gps303proto import proto_of_message
10 from .zmsg import Bcast
12 log = getLogger("gps303/storage")
16 dbname = conf.get("storage", "dbfn")
17 log.info('Using Sqlite3 database "%s"', dbname)
20 zsub = zctx.socket(zmq.SUB)
21 zsub.connect(conf.get("collector", "publishurl"))
22 zsub.setsockopt(zmq.SUBSCRIBE, b"")
26 zmsg = Bcast(zsub.recv())
28 "%s IMEI %s from %s at %s: %s",
29 "I" if zmsg.is_incoming else "O",
32 datetime.fromtimestamp(zmsg.when).astimezone(tz=timezone.utc),
35 if zmsg.peeraddr is not None:
36 addr, port = zmsg.peeraddr
37 peeraddr = str((str(addr), port))
41 is_incoming=zmsg.is_incoming,
45 proto=proto_of_message(zmsg.packet),
48 except KeyboardInterrupt:
52 if __name__.endswith("__main__"):
53 runserver(common.init(log))