SkyFence

Monitoriza aeronaves reales sobre España con datos de adsb.fi, calcula con la fórmula de Haversine si alguna entra en una zona sensible (aeropuertos, bases militares, centrales nucleares) y envía la alerta al instante al mapa por WebSocket.

Estado
Terminado
Áreas
Backend, Frontend, DevSecOps
Tecnologías
  • Java 17
  • Spring Boot 3
  • PostgreSQL 16
  • WebSocket / STOMP
  • React 18
  • Leaflet
  • Resilience4j
  • Bucket4j
  • Prometheus + Grafana + Loki
  • Docker
  • GitHub Actions
  • CodeQL
  • SonarCloud

Demo interactiva

Capturas del proyecto real

Panel de SkyFence con el mapa de España, aeronaves en vuelo, zonas vigiladas y alertas HIGH
Panel en tiempo real con aeronaves reales, zonas vigiladas y alertas
Documentación Swagger de la API REST de SkyFence
API REST documentada con SpringDoc OpenAPI

Qué hace

  • Consulta adsb.fi cada 10 segundos y evalúa cada aeronave contra todas las zonas activas
  • Severidad HIGH si la aeronave está en la mitad interior del radio y MEDIUM en el resto
  • Gestor de zonas en la interfaz: crear y borrar zonas con efecto inmediato
  • Simulador de intrusiones con drones de prueba para validar alertas de punta a punta
  • Histórico de alertas paginado y filtrable, persistido en PostgreSQL
  • Rate limiting con Bucket4j, retry y circuit breaker con Resilience4j

Qué aprendí

  • Pipeline de CI con tests, CodeQL, escaneo de secretos y quality gate de SonarCloud
  • Observabilidad completa: métricas con Micrometer y Prometheus, logs con Loki, dashboards en Grafana
  • Diseñar un servicio que no se cae cuando la API externa falla
  • Tests unitarios con Mockito e integración con MockMvc

El despliegue público en Render y Vercel está parado. En esta página la demo reproduce el comportamiento con aeronaves simuladas, usando las zonas reales que el proyecto carga en su migración inicial.

Cómo está montado

  1. adsb.fiposiciones cada 10 s
  2. FlightDataServiceWebClient + Resilience4j
  3. GeofenceServiceHaversine por zona
  4. AlertServicePostgreSQL + /topic/alerts
  5. React + Leafletmapa y panel de alertas