diff --git a/aprsd/packets/log.py b/aprsd/packets/log.py index 88b63a0..5bddecd 100644 --- a/aprsd/packets/log.py +++ b/aprsd/packets/log.py @@ -1,10 +1,12 @@ import logging from typing import Optional +from geopy.distance import geodesic from loguru import logger from oslo_config import cfg -from aprsd.packets.core import AckPacket, RejectPacket +from aprsd import utils +from aprsd.packets.core import AckPacket, GPSPacket, RejectPacket LOG = logging.getLogger() @@ -16,6 +18,8 @@ TO_COLOR = "fg #D033FF" TX_COLOR = "red" RX_COLOR = "green" PACKET_COLOR = "cyan" +DISTANCE_COLOR = "fg #FF5733" +DEGREES_COLOR = "fg #FFA900" def log_multiline(packet, tx: Optional[bool] = False, header: Optional[bool] = True) -> None: @@ -97,19 +101,21 @@ def log(packet, tx: Optional[bool] = False, header: Optional[bool] = True) -> No if header: if tx: via_color = "red" - arrow = f"<{via_color}>->" + # arrow = f"<{via_color}>->" + arrow = f"<{via_color}>\u2192" logit.append( - f"TX {arrow} " + f"TX\u2191 " f"{name}" f":{packet.msgNo}" f" ({packet.send_count + 1} of {pkt_max_send_count})", ) else: - via_color = "fg #828282" - arrow = f"<{via_color}>->" - left_arrow = f"<{via_color}><-" + via_color = "fg #1AA730" + #arrow = f"<{via_color}>->" + arrow = f"<{via_color}>\u2192" + f"<{via_color}><-" logit.append( - f"RX {left_arrow} " + f"RX\u2193 " f"{name}" f":{packet.msgNo}", ) @@ -139,5 +145,19 @@ def log(packet, tx: Optional[bool] = False, header: Optional[bool] = True) -> No msg = msg.replace("<", "\\<") logit.append(f"{msg}") + # is there distance information? + if isinstance(packet, GPSPacket) and CONF.latitude and CONF.longitude: + my_coords = (CONF.latitude, CONF.longitude) + packet_coords = (packet.latitude, packet.longitude) + try: + bearing = utils.calculate_initial_compass_bearing(my_coords, packet_coords) + except Exception as e: + LOG.error(f"Failed to calculate bearing: {e}") + bearing = 0 + logit.append( + f" : <{DEGREES_COLOR}>{utils.degrees_to_cardinal(bearing, full_string=True)}" + f"<{DISTANCE_COLOR}>@{geodesic(my_coords, packet_coords).miles:.2f}miles", + ) + LOGU.opt(colors=True).info(" ".join(logit)) log_multiline(packet, tx, header)