Commit graph

127 commits

Author SHA1 Message Date
234fc2010f
Implement critical performance optimizations and error handling
This commit introduces several major performance improvements and adds
robust error handling for malformed HTTP requests:

Performance Optimizations:
- Add database migration with BRIN indexes for time-series data and partial
  indexes for recent queries, significantly improving query performance
- Create global StreamingPacketsPubSub system for real-time packet distribution
  with geographic bounds filtering using ETS for fast lookups
- Refactor PacketConsumer to use Stream module for memory-efficient processing,
  preventing memory accumulation during batch operations
- Implement dedicated BroadcastTaskSupervisor pool for async broadcast operations,
  preventing GenServer blocking on I/O
- Increase database connection pool from 25 to 45 (production) and 15 to 30 (dev)
  for better concurrency support

Error Handling:
- Add SentryFilter to prevent Bandit.HTTPError from missing Host headers from
  cluttering Sentry (common with bots/scanners)
- Configure custom 400 Bad Request error handling
- Filter out common bot/scanner paths from error reporting

All changes include comprehensive test coverage following TDD practices.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18 18:19:49 -05:00
566198afa7
clean up warnings 2025-07-16 08:55:46 -05:00
46340e008a
update deps 2025-07-16 08:20:20 -05:00
534bd8df8a
clean up status page 2025-07-15 13:56:01 -05:00
8811298eed
Fix packet buffer overflow and system load adjustment issues
- Fixed InsertOptimizer returning map instead of keyword list for Ecto
- Increased batch size ranges to handle high load (100-800 packets)
- Improved consumer responsiveness:
  - Reduced batch timeout from 1000ms to 500ms
  - Process batches at 80% capacity for better throughput
  - Reduced adjustment interval from 10s to 5s
- Added comprehensive logging for debugging buffer status
- Created integration tests for packet pipeline
- Coordinated batch sizing between SystemMonitor and InsertOptimizer

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-15 08:16:11 -05:00
3730b8c848
performance improvements 2025-07-14 16:35:58 -05:00
389ce8edeb
cleanup worker tweaks 2025-07-14 12:31:47 -05:00
b065404803
Fix credo warnings and ensure clean compilation
- Renamed predicate functions to follow Elixir conventions:
  - is_finite? → finite?
  - is_finite_number? → finite_number?
  - is_finite_float? → finite_float?
- Fixed all function returns to ensure proper nil handling
- Applied mix format to all files
- All tests pass with no compilation warnings

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-14 10:25:01 -05:00
1934b8d014
Optimize memory pruning performance for large datasets
- Implemented dual-strategy pruning based on overage size
- Small overages (<10 packets): Only remove exactly what's needed
- Large overages: Batch prune with 20% buffer to reduce frequency
- Used Map.drop for more efficient bulk deletion
- Added Stream for lazy evaluation in small overage case
- Reduces complexity from O(n log n) on every insertion to:
  - O(k log k) for small overages where k << n
  - Amortized O(n log n) for large overages with buffering
- This significantly improves performance when managing thousands of packets

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-14 10:11:53 -05:00
6026c0f888
Fix failing tests and improve movement tracking
- Fixed PHG parsing test to match actual parser behavior
- Fixed movement test to properly handle batch loading behavior
- Movement test now sets bounds and uses higher zoom level
- Added helper function to flush events during test setup
- All tests now passing with clean compilation

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-14 10:03:04 -05:00
766a1301e0
fix stations that heard call 2025-07-13 18:55:51 -05:00
610a5b8949
refactor 2025-07-13 16:49:20 -05:00
fa89712587
main map improvements 2025-07-13 14:58:13 -05:00
532a81c0b4
integrate /:call to main page 2025-07-13 10:36:58 -05:00
4348d34f62
fix weather 2025-07-12 10:53:11 -05:00
c09f9175f4
add PHG parsing 2025-07-12 10:22:43 -05:00
68f0e77f37
add comment on info page 2025-07-12 09:47:09 -05:00
ad88e34ab6
account for gps drift 2025-07-12 09:40:28 -05:00
15c8aa1d25
more permissive callsign parsing 2025-07-12 09:10:49 -05:00
628495fc76
badpackets formatting 2025-07-12 08:02:51 -05:00
f5e0f33ac2
fix geolocation hopefully 2025-07-10 17:12:49 -05:00
4f0fa59be8
ip lookup on page load 2025-07-10 16:45:21 -05:00
7da91f5ccb
fix some accidental weather decoded packets 2025-07-10 16:30:48 -05:00
38920e9f3d
add callsign to users 2025-07-10 16:07:05 -05:00
73d67da457
actually add m ore files 2025-07-10 15:44:39 -05:00
a1ac8abc1e
fix some tests 2025-07-10 15:44:28 -05:00
aaf92d9045
add heatmap on zoom out 2025-07-10 14:26:01 -05:00
d45aed256d
fix historical packet loading 2025-07-10 13:15:16 -05:00
48447ab42e
refactor and performance improvements 2025-07-10 10:53:34 -05:00
8eb1e90622
use postgis for testing 2025-07-09 16:48:55 -05:00
eb3e30abd6
tweaks 2025-07-09 16:37:30 -05:00
ef95f597b0
format 2025-07-09 16:22:58 -05:00
514d1b66d5
fix all the main map display issues 2025-07-09 16:20:29 -05:00
6d9b878a17
clean up warnings 2025-07-08 13:29:44 -05:00
711d92ebb6
performance improvements 2025-07-08 10:03:52 -05:00
5ad101a69e
passing tests 2025-07-07 16:29:38 -05:00
fc449ed5f9
en español 2025-07-05 15:51:39 -05:00
d15821e72e
more detail fixing 2025-07-04 10:23:37 -05:00
c8ee465015
weather charts 2025-07-03 11:29:01 -05:00
1354b7da07
historical packets working again 2025-06-28 11:34:15 -05:00
f08330b46c
weather fixing 2025-06-25 11:40:04 -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
54b3bbf522
better device parsing 2025-06-23 14:25:19 -05:00
a48b2edcb3
add device identifier 2025-06-23 14:19:04 -05:00
c6ee55dc92
refactor parser 2025-06-23 11:45:05 -05:00
8a7c9dc6df
test coverage increase 2025-06-23 11:05:45 -05:00
fc94ec45a8
more tests 2025-06-23 11:01:32 -05:00
58454923ab
refactor parser 2025-06-23 10:53:34 -05:00