From: Eugene Crosser Date: Tue, 19 Jul 2022 14:57:47 +0000 (+0200) Subject: rename `lookaside` to `rectifier` X-Git-Tag: 1.90~12 X-Git-Url: http://www.average.org/gitweb/?p=loctrkd.git;a=commitdiff_plain;h=5bd4b1bad2506f2f5f71161ac9e8a9b141e0fef4 rename `lookaside` to `rectifier` --- diff --git a/debian/control b/debian/control index ec01d74..72dbcae 100644 --- a/debian/control +++ b/debian/control @@ -26,4 +26,4 @@ Depends: adduser, Conflicts: python3-gps303 Replaces: python3-gps303 Description: Suite of modules to collect reports from xz303 GPS trackers - Consists of collector, storagae, lookaside, and termconfig + Consists of collector, storagae, rectifier, and termconfig diff --git a/debian/lintian-overrides b/debian/lintian-overrides index b14c41e..d9790ee 100644 --- a/debian/lintian-overrides +++ b/debian/lintian-overrides @@ -1,4 +1,4 @@ python3-loctrkd: systemd-service-file-refers-to-unusual-wantedby-target loctrkd.target [lib/systemd/system/loctrkd.collector.service] -python3-loctrkd: systemd-service-file-refers-to-unusual-wantedby-target loctrkd.target [lib/systemd/system/loctrkd.lookaside.service] +python3-loctrkd: systemd-service-file-refers-to-unusual-wantedby-target loctrkd.target [lib/systemd/system/loctrkd.rectifier.service] python3-loctrkd: systemd-service-file-refers-to-unusual-wantedby-target loctrkd.target [lib/systemd/system/loctrkd.storage.service] python3-loctrkd: systemd-service-file-refers-to-unusual-wantedby-target loctrkd.target [lib/systemd/system/loctrkd.termconfig.service] diff --git a/debian/loctrkd.conf b/debian/loctrkd.conf index d22214d..9f45a08 100644 --- a/debian/loctrkd.conf +++ b/debian/loctrkd.conf @@ -14,7 +14,7 @@ htmlfile = /var/lib/loctrkd/index.html [storage] dbfn = /var/lib/loctrkd/trkloc.sqlite -[lookaside] +[rectifier] # "opencellid" and "googlemaps" can be here. Both require an access token, # though googlemaps is only online, while opencellid backend looks up a # local database, that can be updated once a week or once a month. diff --git a/debian/loctrkd.default b/debian/loctrkd.default index 7b91fc7..15884b2 100644 --- a/debian/loctrkd.default +++ b/debian/loctrkd.default @@ -1,5 +1,5 @@ # Environment for loctrkd suite # Common command-line option for all daemons #OPTIONS="-c /etc/loctrkd.conf -d" -# Which lookaside service to use: opencellid or googleloc +# Which rectifier service to use: opencellid or googleloc LOOKASIDE=opencellid diff --git a/debian/loctrkd.lookaside.service b/debian/loctrkd.lookaside.service deleted file mode 100644 index 0be3186..0000000 --- a/debian/loctrkd.lookaside.service +++ /dev/null @@ -1,17 +0,0 @@ -[Unit] -Description=GPS303 Lookaside Service -PartOf=loctrkd.target - -[Service] -Type=simple -EnvironmentFile=-/etc/default/loctrkd -ExecStart=python3 -m loctrkd.lookaside $OPTIONS -KillSignal=INT -Restart=on-failure -StandardOutput=journal -StandardError=inherit -User=loctrkd -Group=loctrkd - -[Install] -WantedBy=loctrkd.target diff --git a/debian/loctrkd.rectifier.service b/debian/loctrkd.rectifier.service new file mode 100644 index 0000000..fe87874 --- /dev/null +++ b/debian/loctrkd.rectifier.service @@ -0,0 +1,17 @@ +[Unit] +Description=GPS303 Lookaside Service +PartOf=loctrkd.target + +[Service] +Type=simple +EnvironmentFile=-/etc/default/loctrkd +ExecStart=python3 -m loctrkd.rectifier $OPTIONS +KillSignal=INT +Restart=on-failure +StandardOutput=journal +StandardError=inherit +User=loctrkd +Group=loctrkd + +[Install] +WantedBy=loctrkd.target diff --git a/debian/loctrkd.target b/debian/loctrkd.target index 50b71c0..dc27380 100644 --- a/debian/loctrkd.target +++ b/debian/loctrkd.target @@ -3,12 +3,12 @@ Description=GPS303 support suite Requires=loctrkd.collector.service \ loctrkd.storage.service \ loctrkd.termconfig.service \ - loctrkd.lookaside.service \ + loctrkd.rectifier.service \ loctrkd.wsgateway.service After=loctrkd.collector.service \ loctrkd.storage.service \ loctrkd.termconfig.service \ - loctrkd.lookaside.service \ + loctrkd.rectifier.service \ loctrkd.wsgateway.service [Install] diff --git a/debian/rules b/debian/rules index b35833a..3b60f58 100755 --- a/debian/rules +++ b/debian/rules @@ -12,7 +12,7 @@ override_dh_installsystemd: dh_installsystemd --name=loctrkd dh_installsystemd --name=loctrkd.collector dh_installsystemd --name=loctrkd.storage - dh_installsystemd --name=loctrkd.lookaside + dh_installsystemd --name=loctrkd.rectifier dh_installsystemd --name=loctrkd.termconfig dh_installsystemd --name=loctrkd.wsgateway dh_installsystemd --name=loctrkd.ocid-dload diff --git a/loctrkd/lookaside.py b/loctrkd/lookaside.py deleted file mode 100644 index 31c3105..0000000 --- a/loctrkd/lookaside.py +++ /dev/null @@ -1,62 +0,0 @@ -""" Estimate coordinates from WIFI_POSITIONING and send back """ - -from configparser import ConfigParser -from datetime import datetime, timezone -from importlib import import_module -from logging import getLogger -from os import umask -from struct import pack -import zmq - -from . import common -from .zx303proto import parse_message, proto_name, WIFI_POSITIONING -from .zmsg import Bcast, Resp, topic - -log = getLogger("loctrkd/lookaside") - - -def runserver(conf: ConfigParser) -> None: - qry = import_module("." + conf.get("lookaside", "backend"), __package__) - qry.init(conf) - # 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, topic(proto_name(WIFI_POSITIONING))) - zpush = zctx.socket(zmq.PUSH) # type: ignore - zpush.connect(conf.get("collector", "listenurl")) - - try: - while True: - 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, - ) - try: - lat, lon = qry.lookup( - msg.mcc, msg.mnc, msg.gsm_cells, msg.wifi_aps - ) - resp = Resp( - imei=zmsg.imei, - when=zmsg.when, # not the current time, but the original! - packet=msg.Out(latitude=lat, longitude=lon).packed, - ) - log.debug("Response for lat=%s, lon=%s: %s", lat, lon, resp) - zpush.send(resp.packed) - except Exception as e: - log.warning("Lookup for %s resulted in %s", msg, e) - - except KeyboardInterrupt: - zsub.close() - zpush.close() - zctx.destroy() # type: ignore - qry.shut() - - -if __name__.endswith("__main__"): - runserver(common.init(log)) diff --git a/loctrkd/rectifier.py b/loctrkd/rectifier.py new file mode 100644 index 0000000..5ef6d35 --- /dev/null +++ b/loctrkd/rectifier.py @@ -0,0 +1,62 @@ +""" Estimate coordinates from WIFI_POSITIONING and send back """ + +from configparser import ConfigParser +from datetime import datetime, timezone +from importlib import import_module +from logging import getLogger +from os import umask +from struct import pack +import zmq + +from . import common +from .zx303proto import parse_message, proto_name, WIFI_POSITIONING +from .zmsg import Bcast, Resp, topic + +log = getLogger("loctrkd/rectifier") + + +def runserver(conf: ConfigParser) -> None: + qry = import_module("." + conf.get("rectifier", "backend"), __package__) + qry.init(conf) + # 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, topic(proto_name(WIFI_POSITIONING))) + zpush = zctx.socket(zmq.PUSH) # type: ignore + zpush.connect(conf.get("collector", "listenurl")) + + try: + while True: + 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, + ) + try: + lat, lon = qry.lookup( + msg.mcc, msg.mnc, msg.gsm_cells, msg.wifi_aps + ) + resp = Resp( + imei=zmsg.imei, + when=zmsg.when, # not the current time, but the original! + packet=msg.Out(latitude=lat, longitude=lon).packed, + ) + log.debug("Response for lat=%s, lon=%s: %s", lat, lon, resp) + zpush.send(resp.packed) + except Exception as e: + log.warning("Lookup for %s resulted in %s", msg, e) + + except KeyboardInterrupt: + zsub.close() + zpush.close() + zctx.destroy() # type: ignore + qry.shut() + + +if __name__.endswith("__main__"): + runserver(common.init(log)) diff --git a/test/common.py b/test/common.py index df43023..761ea67 100644 --- a/test/common.py +++ b/test/common.py @@ -52,7 +52,7 @@ class TestWithServers(TestCase): "dbfn": self.tmpfilebase + ".opencellid.sqlite", "downloadurl": f"http://localhost:{freeports[2]}/test/262.csv.gz", } - self.conf["lookaside"] = { + self.conf["rectifier"] = { "backend": "opencellid", } self.conf["wsgateway"] = { diff --git a/test/test_storage.py b/test/test_storage.py index 4737f52..88dea4f 100644 --- a/test/test_storage.py +++ b/test/test_storage.py @@ -14,7 +14,7 @@ from loctrkd.ocid_dload import SCHEMA class Storage(TestWithServers): def setUp(self, *args: str, **kwargs: Any) -> None: super().setUp( - "collector", "storage", "lookaside", "termconfig", verbose=True + "collector", "storage", "rectifier", "termconfig", verbose=True ) with connect(self.conf.get("opencellid", "dbfn")) as ldb: ldb.execute(SCHEMA)