""" Store zmq broadcasts to sqlite """
+from datetime import datetime, timezone
from getopt import getopt
from logging import getLogger
from logging.handlers import SysLogHandler
from . import common
from .evstore import initdb, stow
from .gps303proto import parse_message
+from .zmsg import Bcast
log = getLogger("gps303/storage")
+
def runserver(conf):
dbname = conf.get("storage", "dbfn")
log.info('Using Sqlite3 database "%s"', dbname)
try:
while True:
- zmsg = zsub.recv()
- imei = zmsg[1:17].decode()
- packet = zmsg[17:]
- msg = parse_message(packet)
- log.debug("From IMEI %s: %s", imei, msg)
- stow("", time(), imei, msg.length, msg.PROTO, msg.payload)
+ zmsg = Bcast(zsub.recv())
+ msg = parse_message(zmsg.packet)
+ log.debug("IMEI %s from %s at %s: %s", zmsg.imei, zmsg.peeraddr, datetime.fromtimestamp(zmsg.when).astimezone(tz=timezone.utc), msg)
+ stow(
+ zmsg.peeraddr,
+ zmsg.when,
+ zmsg.imei,
+ msg.length,
+ msg.PROTO,
+ msg.payload,
+ )
except KeyboardInterrupt:
pass