]> www.average.org Git - loctrkd.git/blob - gps303/storage.py
initial storage service
[loctrkd.git] / gps303 / storage.py
1 """ Store zmq broadcasts to sqlite """
2
3 from getopt import getopt
4 from logging import getLogger
5 from logging.handlers import SysLogHandler
6 import sys
7 from time import time
8 import zmq
9
10 from . import common
11 from .evstore import initdb, stow
12 from .gps303proto import parse_message
13
14 log = getLogger("gps303/storage")
15
16 def runserver(conf):
17     dbname = conf.get("storage", "dbfn")
18     log.info('Using Sqlite3 database "%s"', dbname)
19     initdb(dbname)
20     zctx = zmq.Context()
21     zsub = zctx.socket(zmq.SUB)
22     zsub.connect(conf.get("collector", "publishurl"))
23     zsub.setsockopt(zmq.SUBSCRIBE, b"")
24
25     try:
26         while True:
27             zmsg = zsub.recv()
28             imei = zmsg[1:17].decode()
29             packet = zmsg[17:]
30             msg = parse_message(packet)
31             log.debug("From IMEI %s: %s", imei, msg)
32             stow("", time(), imei, msg.length, msg.PROTO, msg.payload)
33     except KeyboardInterrupt:
34         pass
35
36
37 if __name__.endswith("__main__"):
38     runserver(common.init(log))