diff --git a/.gitignore b/.gitignore index 20e7e00..aedbbcb 100644 --- a/.gitignore +++ b/.gitignore @@ -36,4 +36,12 @@ Thumbs.db # Temporary files tmp/ -temp/ \ No newline at end of file +temp/ + +# Database files +*.db +*.db-shm +*.db-wal +*.sqlite +*.sqlite3 +dev-skyview.db \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md index c7a8ea6..c8b46c9 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -103,4 +103,5 @@ This document outlines coding standards, architectural principles, and developme --- -These guidelines ensure SkyView remains reliable, maintainable, and suitable for aviation use while supporting continued development and enhancement. \ No newline at end of file +These guidelines ensure SkyView remains reliable, maintainable, and suitable for aviation use while supporting continued development and enhancement. +- All future changes to the UX should keep in mind a gradual move to a mobile friendly design, but not at the cost of a working and useful UI for non-mobile clients. \ No newline at end of file diff --git a/Makefile b/Makefile index 2f71042..1543a96 100644 --- a/Makefile +++ b/Makefile @@ -17,8 +17,14 @@ build-beast-dump: @mkdir -p $(BUILD_DIR) go build -ldflags="$(LDFLAGS)" -o $(BUILD_DIR)/beast-dump ./cmd/beast-dump +# Build skyview-data database management binary +build-skyview-data: + @echo "Building skyview-data..." + @mkdir -p $(BUILD_DIR) + go build -ldflags="$(LDFLAGS)" -o $(BUILD_DIR)/skyview-data ./cmd/skyview-data + # Build all binaries -build-all: build build-beast-dump +build-all: build build-beast-dump build-skyview-data @echo "Built all binaries successfully:" @ls -la $(BUILD_DIR)/ @@ -99,4 +105,4 @@ vet: check: format vet lint test @echo "All checks passed!" -.DEFAULT_GOAL := build \ No newline at end of file +.DEFAULT_GOAL := build-all \ No newline at end of file diff --git a/README.md b/README.md index 3765f15..a034158 100644 --- a/README.md +++ b/README.md @@ -27,12 +27,15 @@ A high-performance, multi-source ADS-B aircraft tracking application that connec - **Map Controls**: Center on aircraft, reset to origin, toggle overlays - **Signal Heatmaps**: Coverage heatmap visualization *(under construction)* š§ -### Aircraft Data +### Aircraft Data Enhancement - **Complete Mode S Decoding**: Position, velocity, altitude, heading - **Aircraft Identification**: Callsign, category, country, registration +- **Enhanced Callsign Lookup**: Multi-source airline database with 6,162+ airlines and 83,557+ airports +- **Aviation Data Integration**: OpenFlights and OurAirports databases with automatic updates - **ICAO Country Database**: Comprehensive embedded database with 70+ allocations covering 40+ countries - **Multi-source Tracking**: Signal strength from each receiver -- **Historical Data**: Position history and trail visualization +- **Historical Data**: Position history with configurable retention +- **Database Optimization**: Automatic VACUUM operations and storage efficiency monitoring ## š Quick Start @@ -255,23 +258,66 @@ sudo journalctl -u skyview -f make build # Create user and directories -sudo useradd -r -s /bin/false skyview -sudo mkdir -p /etc/skyview /var/lib/skyview /var/log/skyview -sudo chown skyview:skyview /var/lib/skyview /var/log/skyview +sudo useradd -r -s /bin/false skyview-adsb +sudo mkdir -p /etc/skyview-adsb /var/lib/skyview-adsb /var/log/skyview-adsb +sudo chown skyview-adsb:skyview-adsb /var/lib/skyview-adsb /var/log/skyview-adsb # Install binary and config sudo cp build/skyview /usr/bin/ -sudo cp config.example.json /etc/skyview/config.json -sudo chown root:skyview /etc/skyview/config.json -sudo chmod 640 /etc/skyview/config.json +sudo cp build/skyview-data /usr/bin/ +sudo cp config.example.json /etc/skyview-adsb/config.json +sudo chown root:skyview-adsb /etc/skyview-adsb/config.json +sudo chmod 640 /etc/skyview-adsb/config.json # Create systemd service -sudo cp debian/lib/systemd/system/skyview.service /lib/systemd/system/ +sudo cp debian/lib/systemd/system/skyview-adsb.service /lib/systemd/system/ +sudo cp debian/lib/systemd/system/skyview-database-update.service /lib/systemd/system/ +sudo cp debian/lib/systemd/system/skyview-database-update.timer /lib/systemd/system/ sudo systemctl daemon-reload -sudo systemctl enable skyview -sudo systemctl start skyview +sudo systemctl enable skyview-adsb +sudo systemctl enable skyview-database-update.timer +sudo systemctl start skyview-adsb +sudo systemctl start skyview-database-update.timer ``` +### Database Management + +SkyView includes powerful database management capabilities through the `skyview-data` command: + +```bash +# Update aviation data sources (airlines, airports) +skyview-data update + +# Optimize database storage and performance +skyview-data optimize + +# Check database optimization statistics +skyview-data optimize --stats-only + +# List available data sources +skyview-data list + +# Check current database status +skyview-data status +``` + +The system automatically: +- Updates aviation databases on service startup +- Runs weekly database updates via systemd timer +- Optimizes storage with VACUUM operations +- Monitors database efficiency and statistics + +### Configuration + +SkyView supports comprehensive configuration including external aviation data sources: + +- **3 External Data Sources**: OpenFlights Airlines (~6,162), OpenFlights Airports (~7,698), OurAirports (~83,557) +- **Database Management**: Automatic optimization, configurable retention, backup settings +- **Privacy Controls**: Privacy mode for air-gapped operation, selective source control +- **Performance Tuning**: Connection pooling, cache settings, update intervals + +See **[Configuration Guide](docs/CONFIGURATION.md)** for complete documentation of all options. + ## š Security The application includes security hardening: diff --git a/assets/assets.go b/assets/assets.go index 54e1c4a..e80edaa 100644 --- a/assets/assets.go +++ b/assets/assets.go @@ -28,5 +28,6 @@ import "embed" // This approach ensures the web interface is always available without requiring // external file deployment or complicated asset management. // +// Updated to include database.html for database status page //go:embed static var Static embed.FS diff --git a/assets/static/css/style.css b/assets/static/css/style.css index 5389c2d..3879d96 100644 --- a/assets/static/css/style.css +++ b/assets/static/css/style.css @@ -566,6 +566,95 @@ body { color: #00ff88 !important; } +/* Rich callsign display styles */ +.callsign-display { + display: inline-block; +} + +.callsign-display.enriched { + display: inline-flex; + flex-direction: column; + gap: 0.25rem; +} + +.callsign-code { + display: inline-flex; + align-items: center; + gap: 0.25rem; +} + +.airline-code { + color: #00ff88 !important; + font-weight: 600; + font-family: monospace; + background: rgba(0, 255, 136, 0.1); + padding: 0.1rem 0.3rem; + border-radius: 3px; + border: 1px solid rgba(0, 255, 136, 0.3); +} + +.flight-number { + color: #00a8ff !important; + font-weight: 500; + font-family: monospace; +} + +.callsign-details { + font-size: 0.85rem; + opacity: 0.9; +} + +.airline-name { + color: #ffd700 !important; + font-weight: 500; +} + +.airline-country { + color: #cccccc !important; + font-size: 0.8rem; + opacity: 0.8; +} + +.callsign-display.simple { + color: #00ff88 !important; + font-family: monospace; +} + +.callsign-display.no-data { + color: #888888 !important; + font-style: italic; +} + +/* Compact callsign for table view */ +.callsign-compact { + color: #00ff88 !important; + font-family: monospace; + font-weight: 500; +} + +/* Loading state for callsign enhancement */ +.callsign-loading { + position: relative; +} + +.callsign-loading::after { + content: 'ā³'; + margin-left: 0.25rem; + opacity: 0.6; + animation: spin 1s linear infinite; + font-size: 0.8rem; +} + +@keyframes spin { + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } +} + +.callsign-enhanced { + /* Smooth transition when enhanced */ + transition: all 0.3s ease; +} + .popup-details { font-size: 0.9rem; color: #ffffff !important; diff --git a/assets/static/database.html b/assets/static/database.html new file mode 100644 index 0000000..cec9db8 --- /dev/null +++ b/assets/static/database.html @@ -0,0 +1,360 @@ + + +
+ + +