Drop the pre-insert aprs_messages broadcast in Is.dispatch (subscribers already get a richer payload via postgres:aprsme_packets after insert). Switch PacketsLive.CallsignView to the per-callsign packets:<CS> topic so it only receives relevant packets instead of filtering every one. In PacketConsumer: reuse the received_at stamped in Is.dispatch instead of calling DateTime.utc_now/0 per packet; drop the duplicate struct_to_map pass (Is.dispatch already handled it); fold coordinate validation and Geo.Point construction into set_lat_lon + create_location_geometry so coords are normalized once; extract device_identifier from the already- normalized attrs; pre-build the broadcast payload once (identifier pick, lat/lon aliases, routing callsign) so the async broadcast task no longer does Map.drop/Map.merge per packet. Rewrite PacketSanitizer.sanitize_packet / sanitize_data_map with Map.new/2 instead of Enum.reduce + Map.put — one allocation per packet instead of N. Also compute has_weather in Packet.changeset/2 so direct-changeset inserts (tests, backfills) populate it the same way the GenStage pipeline does. |
||
|---|---|---|
| .. | ||
| aprsme | ||
| aprsme_web | ||
| assets/js | ||
| integration | ||
| support | ||
| types | ||
| test_helper.exs | ||