Commit graph

7 commits

Author SHA1 Message Date
8755bba9f0
Optimize historical packet loading by selecting only needed columns
Historical map loading previously fetched all 73 columns (SELECT *) from
the packets table (~2068 bytes/row). Added get_recent_packets_for_map/1
with select_map_fields/1 that fetches only the 22 columns needed for map
rendering (~200 bytes/row), yielding a ~3x query speedup.

Also removes unused all_packets tracking from PacketProcessor and
simplifies visible_packets cleanup in Index.
2026-02-20 07:41:14 -06:00
6c2b664333
Fix code review batch 3: auth, performance, dedup, cache TTL 2026-02-20 07:29:27 -06:00
d803d070ac
Add other SSIDs list to map sidebar, fix context/web boundary
- Add Packets.get_other_ssids/1 to query other SSIDs for a base callsign
- Show other SSIDs in MapLive sidebar with track and info link buttons
- Clicking an SSID tracks it on the map (zooms, shows marker, updates URL)
- Refactor InfoLive.Show to use shared Packets.get_other_ssids/1
- Remove web-layer dependency from Packets context (no more
  AprsmeWeb.TimeHelpers calls from data layer)
- Return raw received_at DateTime instead of pre-formatted timestamp maps
- Format timestamps in the view layer where they belong
2026-02-18 18:15:02 -06:00
74a19b0640
Fix nesting depth issues in device_cache, packets, and spatial_pubsub
Reduces function nesting depth to comply with Credo requirements (max depth 2):

- device_cache.ex: Extract pattern matching logic into separate helpers
  (pattern_matches?/2, matches_wildcard_pattern?/2)

- packets.ex: Extract data sanitization logic into separate helpers
  (sanitize_data_extended_attr/1, deep_sanitize_map/1)
  Note: This refactoring improved robustness - invalid data_extended
  values now return validation errors instead of throwing exceptions

- spatial_pubsub.ex: Extract grid cell and client filtering logic
  (remove_client_from_grid_cell/3, update_grid_cell_after_removal/3,
  filter_clients_by_bounds/3, client_contains_point?/3)

- Update test expectation in packets_test.exs to match improved
  error handling behavior (validation_error vs storage_exception)

Fixes 3 Credo nesting depth issues (8 remaining)
2026-02-09 12:27:34 -06:00
dc0bc7bbdf
Fix credo warnings and start on design suggestions
Warnings fixed (13 issues):
- Replace expensive length/1 checks with empty list comparisons
- Remove redundant n == n comparison in is_finite guards
- Use proper type notation in @spec instead of struct literal

Design suggestions (3/13 files):
- Add aliases for nested modules in historical_loader, page_controller, mobile_channel

Remaining: 10 design suggestions, 42 refactoring opportunities (complex functions)
2026-02-09 11:23:01 -06:00
d06ec8b13d
test: Add comprehensive test suite for Aprsme.Packets module
- Add tests for store_packet/1 functionality including validation, MicE data, and error handling
- Add tests for store_bad_packet/2 with proper error type conversion
- Add tests for get_recent_packets/1 with time, bounds, and callsign filtering
- Add tests for get_nearby_stations/4 with distance ordering and exclusions
- Add tests for weather packet queries and cleanup functions
- Add tests for packet replay, streaming, and counting operations
- Fix MicE struct access to use Access behavior instead of dot notation
- Fix error_type conversion to string for BadPacket storage
- Ensure all tests are passing (437 tests, 0 failures)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-01 17:18:39 -05:00
179e2e407d
fix: Convert telemetry_seq string values to integers
The APRS parser returns telemetry sequence numbers as strings (e.g., "094"),
but the database schema expects integers. This was causing Ecto.ChangeError
in production when processing telemetry packets.

Changes:
- Updated put_telemetry_fields/2 to convert string seq values to integers
- Added comprehensive tests for telemetry_seq type conversion
- Handles nil, string, integer, and invalid seq values gracefully

Production deployment notes:
1. Check if migration 20250801215236 has run in production
2. If not, run pending migrations before deploying this fix

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-01 17:12:47 -05:00