aprsd 1.0.0__py3-none-any.whl → 3.4.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aprsd/__init__.py +6 -4
- aprsd/cli_helper.py +151 -0
- aprsd/client/__init__.py +13 -0
- aprsd/client/aprsis.py +132 -0
- aprsd/client/base.py +105 -0
- aprsd/client/drivers/__init__.py +0 -0
- aprsd/client/drivers/aprsis.py +228 -0
- aprsd/client/drivers/fake.py +73 -0
- aprsd/client/drivers/kiss.py +119 -0
- aprsd/client/factory.py +88 -0
- aprsd/client/fake.py +48 -0
- aprsd/client/kiss.py +103 -0
- aprsd/client/stats.py +38 -0
- aprsd/cmds/__init__.py +0 -0
- aprsd/cmds/completion.py +22 -0
- aprsd/cmds/dev.py +162 -0
- aprsd/cmds/fetch_stats.py +156 -0
- aprsd/cmds/healthcheck.py +86 -0
- aprsd/cmds/list_plugins.py +319 -0
- aprsd/cmds/listen.py +231 -0
- aprsd/cmds/send_message.py +171 -0
- aprsd/cmds/server.py +137 -0
- aprsd/cmds/webchat.py +674 -0
- aprsd/conf/__init__.py +56 -0
- aprsd/conf/client.py +131 -0
- aprsd/conf/common.py +301 -0
- aprsd/conf/log.py +65 -0
- aprsd/conf/opts.py +80 -0
- aprsd/conf/plugin_common.py +182 -0
- aprsd/conf/plugin_email.py +105 -0
- aprsd/exception.py +13 -0
- aprsd/log/__init__.py +0 -0
- aprsd/log/log.py +138 -0
- aprsd/main.py +104 -867
- aprsd/packets/__init__.py +20 -0
- aprsd/packets/collector.py +79 -0
- aprsd/packets/core.py +823 -0
- aprsd/packets/log.py +161 -0
- aprsd/packets/packet_list.py +110 -0
- aprsd/packets/seen_list.py +49 -0
- aprsd/packets/tracker.py +103 -0
- aprsd/packets/watch_list.py +119 -0
- aprsd/plugin.py +474 -284
- aprsd/plugin_utils.py +86 -0
- aprsd/plugins/__init__.py +0 -0
- aprsd/plugins/email.py +709 -0
- aprsd/plugins/fortune.py +61 -0
- aprsd/plugins/location.py +179 -0
- aprsd/plugins/notify.py +61 -0
- aprsd/plugins/ping.py +31 -0
- aprsd/plugins/time.py +115 -0
- aprsd/plugins/version.py +31 -0
- aprsd/plugins/weather.py +405 -0
- aprsd/stats/__init__.py +20 -0
- aprsd/stats/app.py +49 -0
- aprsd/stats/collector.py +37 -0
- aprsd/threads/__init__.py +11 -0
- aprsd/threads/aprsd.py +119 -0
- aprsd/threads/keep_alive.py +131 -0
- aprsd/threads/log_monitor.py +121 -0
- aprsd/threads/registry.py +56 -0
- aprsd/threads/rx.py +354 -0
- aprsd/threads/stats.py +44 -0
- aprsd/threads/tx.py +255 -0
- aprsd/utils/__init__.py +218 -0
- aprsd/utils/counter.py +51 -0
- aprsd/utils/json.py +80 -0
- aprsd/utils/objectstore.py +123 -0
- aprsd/utils/ring_buffer.py +40 -0
- aprsd/utils/trace.py +180 -0
- aprsd/web/__init__.py +0 -0
- aprsd/web/admin/__init__.py +0 -0
- aprsd/web/admin/static/css/index.css +84 -0
- aprsd/web/admin/static/css/prism.css +4 -0
- aprsd/web/admin/static/css/tabs.css +35 -0
- aprsd/web/admin/static/images/Untitled.png +0 -0
- aprsd/web/admin/static/images/aprs-symbols-16-0.png +0 -0
- aprsd/web/admin/static/images/aprs-symbols-16-1.png +0 -0
- aprsd/web/admin/static/images/aprs-symbols-64-0.png +0 -0
- aprsd/web/admin/static/images/aprs-symbols-64-1.png +0 -0
- aprsd/web/admin/static/images/aprs-symbols-64-2.png +0 -0
- aprsd/web/admin/static/js/charts.js +235 -0
- aprsd/web/admin/static/js/echarts.js +465 -0
- aprsd/web/admin/static/js/logs.js +26 -0
- aprsd/web/admin/static/js/main.js +231 -0
- aprsd/web/admin/static/js/prism.js +12 -0
- aprsd/web/admin/static/js/send-message.js +114 -0
- aprsd/web/admin/static/js/tabs.js +28 -0
- aprsd/web/admin/templates/index.html +196 -0
- aprsd/web/chat/static/css/chat.css +115 -0
- aprsd/web/chat/static/css/index.css +66 -0
- aprsd/web/chat/static/css/style.css.map +1 -0
- aprsd/web/chat/static/css/tabs.css +41 -0
- aprsd/web/chat/static/css/upstream/bootstrap.min.css +6 -0
- aprsd/web/chat/static/css/upstream/font.woff2 +0 -0
- aprsd/web/chat/static/css/upstream/google-fonts.css +23 -0
- aprsd/web/chat/static/css/upstream/jquery-ui.css +1311 -0
- aprsd/web/chat/static/css/upstream/jquery.toast.css +28 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Bold.woff +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Bold.woff2 +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Regular.woff +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Regular.woff2 +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/icons.woff +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/icons.woff2 +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/outline-icons.woff +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/outline-icons.woff2 +0 -0
- aprsd/web/chat/static/images/Untitled.png +0 -0
- aprsd/web/chat/static/images/aprs-symbols-16-0.png +0 -0
- aprsd/web/chat/static/images/aprs-symbols-16-1.png +0 -0
- aprsd/web/chat/static/images/aprs-symbols-64-0.png +0 -0
- aprsd/web/chat/static/images/aprs-symbols-64-1.png +0 -0
- aprsd/web/chat/static/images/aprs-symbols-64-2.png +0 -0
- aprsd/web/chat/static/images/globe.svg +3 -0
- aprsd/web/chat/static/js/gps.js +84 -0
- aprsd/web/chat/static/js/main.js +45 -0
- aprsd/web/chat/static/js/send-message.js +585 -0
- aprsd/web/chat/static/js/tabs.js +28 -0
- aprsd/web/chat/static/js/upstream/bootstrap.bundle.min.js +7 -0
- aprsd/web/chat/static/js/upstream/jquery-3.7.1.min.js +2 -0
- aprsd/web/chat/static/js/upstream/jquery-ui.min.js +13 -0
- aprsd/web/chat/static/js/upstream/jquery.toast.js +374 -0
- aprsd/web/chat/static/js/upstream/semantic.min.js +11 -0
- aprsd/web/chat/static/js/upstream/socket.io.min.js +7 -0
- aprsd/web/chat/templates/index.html +139 -0
- aprsd/wsgi.py +315 -0
- aprsd-3.4.2.dist-info/AUTHORS +13 -0
- aprsd-3.4.2.dist-info/LICENSE +175 -0
- aprsd-3.4.2.dist-info/METADATA +793 -0
- aprsd-3.4.2.dist-info/RECORD +133 -0
- {aprsd-1.0.0.dist-info → aprsd-3.4.2.dist-info}/WHEEL +1 -1
- aprsd-3.4.2.dist-info/entry_points.txt +8 -0
- aprsd/fake_aprs.py +0 -83
- aprsd/utils.py +0 -166
- aprsd-1.0.0.dist-info/AUTHORS +0 -6
- aprsd-1.0.0.dist-info/METADATA +0 -181
- aprsd-1.0.0.dist-info/RECORD +0 -13
- aprsd-1.0.0.dist-info/entry_points.txt +0 -4
- aprsd-1.0.0.dist-info/pbr.json +0 -1
- /aprsd/{fuzzyclock.py → utils/fuzzyclock.py} +0 -0
- {aprsd-1.0.0.dist-info → aprsd-3.4.2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
from aprsd.packets import collector
|
2
|
+
from aprsd.packets.core import ( # noqa: F401
|
3
|
+
AckPacket, BeaconPacket, BulletinPacket, GPSPacket, MessagePacket,
|
4
|
+
MicEPacket, ObjectPacket, Packet, RejectPacket, StatusPacket,
|
5
|
+
ThirdPartyPacket, UnknownPacket, WeatherPacket, factory,
|
6
|
+
)
|
7
|
+
from aprsd.packets.packet_list import PacketList # noqa: F401
|
8
|
+
from aprsd.packets.seen_list import SeenList # noqa: F401
|
9
|
+
from aprsd.packets.tracker import PacketTrack # noqa: F401
|
10
|
+
from aprsd.packets.watch_list import WatchList # noqa: F401
|
11
|
+
|
12
|
+
|
13
|
+
# Register all the packet tracking objects.
|
14
|
+
collector.PacketCollector().register(PacketList)
|
15
|
+
collector.PacketCollector().register(SeenList)
|
16
|
+
collector.PacketCollector().register(PacketTrack)
|
17
|
+
collector.PacketCollector().register(WatchList)
|
18
|
+
|
19
|
+
|
20
|
+
NULL_MESSAGE = -1
|
@@ -0,0 +1,79 @@
|
|
1
|
+
import logging
|
2
|
+
from typing import Callable, Protocol, runtime_checkable
|
3
|
+
|
4
|
+
from aprsd.packets import core
|
5
|
+
from aprsd.utils import singleton
|
6
|
+
|
7
|
+
|
8
|
+
LOG = logging.getLogger("APRSD")
|
9
|
+
|
10
|
+
|
11
|
+
@runtime_checkable
|
12
|
+
class PacketMonitor(Protocol):
|
13
|
+
"""Protocol for Monitoring packets in some way."""
|
14
|
+
|
15
|
+
def rx(self, packet: type[core.Packet]) -> None:
|
16
|
+
"""When we get a packet from the network."""
|
17
|
+
...
|
18
|
+
|
19
|
+
def tx(self, packet: type[core.Packet]) -> None:
|
20
|
+
"""When we send a packet out the network."""
|
21
|
+
...
|
22
|
+
|
23
|
+
def flush(self) -> None:
|
24
|
+
"""Flush out any data."""
|
25
|
+
...
|
26
|
+
|
27
|
+
def load(self) -> None:
|
28
|
+
"""Load any data."""
|
29
|
+
...
|
30
|
+
|
31
|
+
|
32
|
+
@singleton
|
33
|
+
class PacketCollector:
|
34
|
+
def __init__(self):
|
35
|
+
self.monitors: list[Callable] = []
|
36
|
+
|
37
|
+
def register(self, monitor: Callable) -> None:
|
38
|
+
if not isinstance(monitor, PacketMonitor):
|
39
|
+
raise TypeError(f"Monitor {monitor} is not a PacketMonitor")
|
40
|
+
self.monitors.append(monitor)
|
41
|
+
|
42
|
+
def unregister(self, monitor: Callable) -> None:
|
43
|
+
if not isinstance(monitor, PacketMonitor):
|
44
|
+
raise TypeError(f"Monitor {monitor} is not a PacketMonitor")
|
45
|
+
self.monitors.remove(monitor)
|
46
|
+
|
47
|
+
def rx(self, packet: type[core.Packet]) -> None:
|
48
|
+
for name in self.monitors:
|
49
|
+
cls = name()
|
50
|
+
try:
|
51
|
+
cls.rx(packet)
|
52
|
+
except Exception as e:
|
53
|
+
LOG.error(f"Error in monitor {name} (rx): {e}")
|
54
|
+
|
55
|
+
def tx(self, packet: type[core.Packet]) -> None:
|
56
|
+
for name in self.monitors:
|
57
|
+
cls = name()
|
58
|
+
try:
|
59
|
+
cls.tx(packet)
|
60
|
+
except Exception as e:
|
61
|
+
LOG.error(f"Error in monitor {name} (tx): {e}")
|
62
|
+
|
63
|
+
def flush(self):
|
64
|
+
"""Call flush on the objects. This is used to flush out any data."""
|
65
|
+
for name in self.monitors:
|
66
|
+
cls = name()
|
67
|
+
try:
|
68
|
+
cls.flush()
|
69
|
+
except Exception as e:
|
70
|
+
LOG.error(f"Error in monitor {name} (flush): {e}")
|
71
|
+
|
72
|
+
def load(self):
|
73
|
+
"""Call load on the objects. This is used to load any data."""
|
74
|
+
for name in self.monitors:
|
75
|
+
cls = name()
|
76
|
+
try:
|
77
|
+
cls.load()
|
78
|
+
except Exception as e:
|
79
|
+
LOG.error(f"Error in monitor {name} (load): {e}")
|