Commit graph

24 commits

Author SHA1 Message Date
81a4b7b815
Fix credo issues
- Remove trailing whitespace from comments
- Fix long line in packet_processor.ex
- Rename is_leader? to leader? following Elixir conventions
2026-02-09 11:17:56 -06:00
cd79c3df7e
feat: Add database support for APRS items/objects and DAO extension
- Added item_name, object_name fields to store names
- Added is_item, is_object boolean flags for filtering
- Added dao field to store DAO extension data for extra position precision
- Automatic detection during packet processing to populate these fields
- Added database indexes for efficient queries
- Now preserving itemname as item_name and dao data instead of discarding

This enables future features like:
- Showing/hiding items and objects separately from stations
- Querying for specific objects (events, repeaters, etc.)
- Using DAO data for high-precision applications

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-04 10:19:34 -05:00
a9ad057efc
feat: Update code to handle improved APRS parser features
- Added 20 new database fields for enhanced parser compatibility:
  - Standard parser fields: srccallsign, dstcallsign, body, origpacket, header, alive, posambiguity, symboltable, symbolcode, messaging
  - Radio range field: radiorange
  - Additional weather fields: rain_midnight, has_weather
- Enhanced weather data extraction with dedicated wx field support
- Updated PHG parsing to handle both string format ("1060") and legacy map structure
- Added extraction functions for standard parser compatibility fields
- Created comprehensive test suite for enhanced parser functionality
- Updated APRS parser to latest version with improved field extraction

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-01 18:16:44 -05:00
b5a39102a6
fix: Comprehensive packet processing and test optimization improvements
This commit includes several critical fixes and optimizations:

## Production Buffer Overflow Fix
- Fixed telemetry_vals data type conversion from strings to integers
- Enhanced put_telemetry_fields() with robust type conversion logic
- Handles mixed data types (string, integer, float) gracefully
- Prevents PacketConsumer GenServer crashes that caused buffer overflow
- Processes telemetry from both data_extended and top-level attrs

## Test Suite Performance Optimization
- Improved test execution speed by 48% (43.2s → 24.1s)
- Increased parallelization: max_cases from 16 to 48
- Optimized database connections and reduced timeouts
- Tagged slow tests and exclude them by default for fast development
- Fixed device seeding to only run when needed
- Enhanced log capture for packet consumer tests

## Code Quality Improvements
- Fixed handle_info clause grouping in LeaderElection
- Ensures mix compile --warnings-as-errors passes
- Added comprehensive telemetry conversion tests
- Improved test reliability and reduced flakiness

## Infrastructure Updates
- Added migration init container to StatefulSet for automatic schema updates
- Disabled AUTO_MIGRATE in main container (handled by init container)
- Created .test-commands with helpful test aliases

This resolves production stability issues and significantly improves development workflow.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-01 17:50:07 -05:00
6bfea84b88
fix: Convert telemetry_vals strings to integers to prevent buffer overflow
Fixes production crashes where PacketConsumer GenServers were failing due to
attempting to insert string arrays like ['12.80', '0.00', ...] into an
integer array database field. This was causing buffer overflow as crashed
consumers couldn't process packets.

Changes:
- Enhanced put_telemetry_fields() to convert string/float telemetry values to integers
- Added robust handling for mixed data types (string, integer, float)
- Added graceful fallback for invalid values (converts to 0)
- Process telemetry from both data_extended and top-level attrs
- Added comprehensive tests for all conversion scenarios

This resolves the GenServer crashes and prevents packet processing buffer issues.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-01 17:47:31 -05: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
5ddbb18a10
fix: Handle atom format field from APRS parser
The APRS parser sometimes returns :unknown as an atom for the format field,
but the database expects a string. This was causing Ecto.ChangeError when
inserting packets.

Added normalize_format_field/1 function to convert atom values to strings
before database insertion. This ensures compatibility between the parser
output and database schema requirements.

Fixes error: value `:unknown` for `Aprsme.Packet.format` in `insert_all`
does not match type :string

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-01 17:04:32 -05:00
86d3837075
feat: Add support for enhanced APRS parser features
- Added position resolution field (posresolution) showing accuracy in meters
  - 18.52m for uncompressed positions
  - 0.291m for compressed positions
- Added format field indicating "compressed" or "uncompressed" position type
- Added telemetry support with three new fields:
  - telemetry_seq: sequence number
  - telemetry_vals: array of telemetry values
  - telemetry_bits: binary telemetry bits
- Updated packet schema and database migration
- Enhanced packet extraction logic to handle new fields
- All tests pass successfully

These improvements provide better position accuracy information and
enable telemetry packet processing from APRS stations.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-01 16:57:28 -05:00
82e97e5e31
feat: Add position ambiguity support from APRS parser
- Added position_ambiguity field (integer, 0-4) to packets table
- Created migration to add the new database column
- Updated packet schema and processing to extract position ambiguity
- Position ambiguity levels indicate precision of reported coordinates:
  - 0: No ambiguity (exact position)
  - 1: ~0.1 mile ambiguity
  - 2: ~1 mile ambiguity
  - 3: ~10 mile ambiguity
  - 4: ~60 mile ambiguity
- Automatically captures ambiguity level when parsing APRS packets
- All tests pass with no failures

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-01 16:21:19 -05:00
c59744f352
Fix ArgumentError for unknown field :phg in schema
The :phg field was being added as a map to packet attributes, but it's
not a database field. PHG data should be split into individual fields
(phg_power, phg_height, phg_gain, phg_directivity) which are actual
database columns.

Removed the :phg map from being added to attributes. The put_phg_fields
function already handles extracting individual PHG components.

Updated tests to check for individual PHG fields instead of the map.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-28 12:27:19 -05:00
623800dfc1
Fix failing packet parsing tests for altitude and PHG extraction
The APRS parser wasn't extracting altitude and PHG data from the comment
field. Added extraction functions to parse:
- Altitude from /A=XXXXXX format (converts to feet)
- PHG (Power-Height-Gain-Directivity) from PHGXXXX format

Also updated the comment cleaning to remove these technical details,
leaving only the human-readable station description.

Updated tests to properly use Packet.extract_additional_data() which
is where the parsing happens during packet processing.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-28 12:20:52 -05:00
c09f9175f4
add PHG parsing 2025-07-12 10:22:43 -05:00
7da91f5ccb
fix some accidental weather decoded packets 2025-07-10 16:30:48 -05:00
514d1b66d5
fix all the main map display issues 2025-07-09 16:20:29 -05:00
d6417ff16b
more live updates and chart version update 2025-07-04 12:15:38 -05:00
d15821e72e
more detail fixing 2025-07-04 10:23:37 -05:00
4baf3cffe7
dialyzer fixes 2025-07-03 10:56:06 -05:00
7ef3f59026
parsing improvements 2025-06-28 15:53:27 -05:00
f08330b46c
weather fixing 2025-06-25 11:40:04 -05:00
a0798c49f9
batch insert fix 2025-06-25 08:34:07 -05:00
0beb278371
add packet batcher 2025-06-24 15:06:09 -05:00
229c8f8305
fix messaging name 2025-06-24 14:29:47 -05:00
ce7c50caa1
refactor to use external parser 2025-06-24 14:22:09 -05:00
Renamed from lib/aprs/packet.ex (Browse further)