1
0
mirror of https://github.com/craigerl/aprsd.git synced 2026-01-26 23:45:45 -05:00
aprsd/aprsd/plugins/notify.py
Walter Boring ee61bf5fd5 Updates for plugins to make them more consistent.
Got rid of some comment blocks and inconsistent logging messsages
2026-01-22 23:35:09 -05:00

64 lines
2.3 KiB
Python

import logging
from oslo_config import cfg
from aprsd import packets, plugin
CONF = cfg.CONF
LOG = logging.getLogger('APRSD')
class NotifySeenPlugin(plugin.APRSDWatchListPluginBase):
"""Notification plugin to send seen message for callsign.
This plugin will track callsigns in the watch list and report
when a callsign has been seen when the last time they were
seen was older than the configured age limit.
"""
short_description = 'Notify me when a CALLSIGN is recently seen on APRS-IS'
def process(self, packet: packets.MessagePacket) -> packets.MessagePacket:
LOG.info('NotifySeenPlugin')
notify_callsign = CONF.watch_list.alert_callsign
fromcall = packet.from_call
wl = packets.WatchList()
age = wl.age(fromcall)
if fromcall != notify_callsign:
# Check if the callsign was old BEFORE WatchList.rx() updated the timestamp
# This ensures we can detect when a previously old callsign is seen again
if wl.was_old_before_last_update(fromcall):
LOG.info(
'NOTIFY {} last seen {} max age={}'.format(
fromcall,
age,
wl.max_delta(),
),
)
# Mark the callsign as new to prevent duplicate notifications
# until it becomes old again
wl.mark_as_new(fromcall)
packet_type = packet.__class__.__name__
# we shouldn't notify the alert user that they are online.
pkt = packets.MessagePacket(
from_call=CONF.callsign,
to_call=notify_callsign,
message_text=(f"{fromcall} was just seen by type:'{packet_type}'"),
allow_delay=False,
)
pkt.allow_delay = False
return pkt
else:
LOG.debug(
'Not old enough to notify on callsign '
f"'{fromcall}' : {age} < {wl.max_delta()}",
)
return packets.NULL_MESSAGE
else:
LOG.debug('fromcall and notify_callsign are the same, ignoring')
return packets.NULL_MESSAGE