aprs.ru Log in · Register · Русский

Technical details

aprs.ru consists of five parts, each running as a separate systemd service:

  1. The collector (Python, asyncio) keeps a connection to APRS-IS, decodes packets of all formats (uncompressed and compressed positions, Mic-E, NMEA, objects, items, weather, telemetry, messages, bulletins, status reports, beacons), drops duplicates and writes them to the database in batches. Processing delay is shown on the Service status page.
  2. The maintenance process expires old data, compresses older history and rebuilds the prefix index and hourly statistics every hour.
  3. The web front end (PHP 8.5, Symfony) serves the pages and the API; it is stateless, sessions live in Redis.
  4. The map (TypeScript, Leaflet) runs in the browser and receives real-time updates.
  5. The live service (Python, WebSocket) pushes new positions, weather and telemetry to subscribed browsers.

Storage

PostgreSQL with TimescaleDB (history split into monthly chunks and compressed) and PostGIS (spatial search, reverse geocoding with the GeoNames database). Current positions of all stations are kept in Redis, so the API answers in tens of milliseconds.

Retention

Raw packets2 days
Messages, beacons14 days
Status reports30 days
Bulletinsshown for 24 hours
Tracks, weather (at most once per 10 min), telemetry2 years

See also the change log and the statistics.