Combines local ADS-B data with other data sources and notifies about interesting aircraft.
- Triggers Push Notifications when interesting aircraft are spotted by tar1090
- Keeps track of all seen aircraft (in progress)
- Displays statistics about aircraft seen (to do)
- Re-implement
discovererservice using Go- Publish aircraft when found
- Re-add NATS
- Implement
enricherservice- Enrich with HexDB data
- Enrich with PlaneAlertDb data (i.e. whether it's an interesting aircraft and why)
- What should happen if an enricher fails? Should it continue? Later enricher may be able to fill in gaps
- Use Context appropriately with enrichers (e.g. set deadline, cancel gracefully)
- Investigate any other potential data sources
- Implement
evaluatorservice- Implement logic to identify interesting aircraft
- Implement
notifierservice- Publish notifications using Pushover
- Add Postgres
- Add
historianservice - Add
statsservice - Add a
monitoringservice to keep track of enrichment failures (could use this to compare sources and find backup enrichers for when one source doesn't have any details) - Other / refactoring / future
- Try out https://github.com/caarlos0/env
- Back-off approach for enrichers if they fail with certain error codes (not 404)
- Add a "system context" C4-style diagram
- Add some architecture docs explaining design choices
- A tar1090 API endpoint available e.g. by running Readsb on your local network
- A Kubernetes (K8s) cluster
- kubectl or your preferred K8s tool
- A K8s namespace of your choosing e.g.
aircraftkubectl create namespace aircraft
- Install DevSpace
- Install NATS on your K8s cluster
helm repo add nats https://nats-io.github.io/k8s/helm/charts/ helm repo update helm install my-nats nats/nats
- Install Postgres Operator into your K8s cluster
helm repo add cnpg https://cloudnative-pg.github.io/charts helm upgrade --install cnpg \ --namespace cnpg-system \ --create-namespace \ cnpg/cloudnative-pg
- Setup Postgres
kubectl create secret generic postgres-historian-password-secret \ --from-literal=username=historian \ --from-literal=password=password \ -n aircraft kubectl apply -f ./infrastructure/cnpg-cluster.yaml
- Generate any generated code
make generate
- An antenna that can pick up 1090MHz
- An adapter if the antenna has a different connector to the dongle
- A USB SDR ADS-B Receiver Dongle
- A Ubuntu Server VM with access to a USB port
- Readsb installed directly onto Ubuntu
- Clone the repository
git clone https://github.com/corinm/aircraft-go.git
- Create and populate
.envfiles in each service (refer to.env.examplefiles) - Ensure you are in your chosen namespace
devspace use namespace # Select your namespace from the drop-down - Optional: For a production-like deployment use devspace's deploy command
devspace deploy
- Optional: To develop a specific service
cdinto the service directory and use devspace's dev commandcd ./notifier devspace dev
- Polling for aircraft will start automatically when the
discovererstarts up - In future there will be API endpoints and a dashboard to view aircraft data and statistics
This is a personal project I'm using to learn and experiment. I want to be able to make changes as easily as possible, therefore I'm intentionally keeping automated testing very minimal for now. I’ll add tests where they make sense and where they help me understand or validate something specific, but I’m not aiming for the type of test coverage I'd expect from production-grade software.
Currently only the enricher service has unit tests
make unit-tests- Readme structure based on Best-README-Template
- AI-generated artwork created using Perchance
