Skip to content

swim-developer/swim-example-apps

Repository files navigation

swim-example-apps

Operational demonstration applications for the swim-developer SWIM framework. Each application represents a real ATM operational scenario and integrates directly with one or more core SWIM services.

Repository: git@github.com:swim-developer/swim-example-apps.git


What is this

The SWIM framework (swim-dnotam-consumer, swim-ed254-consumer, swim-dnotam-provider, swim-ed254-provider) handles the infrastructure concerns: AMQP connections, mTLS, XSD validation, subscription lifecycle, outbox, heartbeat, and delivery guarantees.

These example applications sit on top of that framework and show what operational teams can build once the data is flowing:

  • Consumer apps read events from Kafka topics that the framework services publish after processing
  • Provider apps inject events into the framework via Kafka or the internal HTTP API, simulating upstream data sources

Each application has a Quarkus backend and a React + PatternFly frontend.


Applications

Consumer applications — receive and display SWIM data

Application Simulates Data source Backend Frontend
dnotam-operations-dashboard Airfield ops centre receiving real-time DNOTAM events swim-dnotam-consumer Kafka topics (6 operational intent categories) :8090 :3000
ed254-arrival-flow-manager Downstream ATSU receiving arrival sequences from an upstream AMAN swim-ed254-consumer Kafka topics + consumer subscription API :8091 :3001

Provider applications — inject data into SWIM services

Application Simulates Data target Backend Frontend
dnotam-event-publisher AISP/EAD workstation publishing DNOTAM events swim-dnotam-provider via Kafka or internal HTTP API :8092 :3002
ed254-aman-client Upstream AMAN system operator publishing arrival sequences and monitoring downstream consumers swim-ed254-provider via Kafka and internal HTTP API :8093 :3003

Prerequisites

SWIM services (external dependencies)

The consumer apps require the corresponding SWIM service to be running and publishing to Kafka:

App Required service Kafka topics expected
dnotam-operations-dashboard swim-dnotam-consumer dnotam-events-closure-topic, dnotam-events-restriction-topic, dnotam-events-surface-condition-topic, dnotam-events-airspace-topic, dnotam-events-hazards-navaids-topic, dnotam-events-others-topic
ed254-arrival-flow-manager swim-ed254-consumer ed254-arrival-sequence-topic, ed254-provider-exception-topic

The provider apps require the corresponding SWIM provider to be running:

App Required service Integration point
dnotam-event-publisher swim-dnotam-provider Internal HTTP API at :9080 and/or Kafka dnotam-events-all-topic
ed254-aman-client swim-ed254-provider Internal HTTP API at :9080 and Kafka ed254-arrival-sequence-topic

Local tooling

  • Java 21 + Maven 3.9+
  • Node.js 20+ and npm
  • Podman with Compose support

Development mode

Each app ships with a compose.yml that starts the local infrastructure (Kafka, WireMock or AKHQ) needed to run the backend in Quarkus dev mode.

# Start infrastructure for the app
cd <app-directory>
podman compose up -d

# Start backend
cd backend
./mvnw quarkus:dev -Ddebug=false

# Start frontend (separate terminal)
cd frontend
npm install
npm run dev

See each app's README for the full walkthrough and specific configuration.

Application URLs (dev mode)

Application Frontend Backend Swagger UI
dnotam-operations-dashboard http://localhost:3000 http://localhost:8090 http://localhost:8090/swagger-ui
ed254-arrival-flow-manager http://localhost:3001 http://localhost:8091 http://localhost:8091/swagger-ui
dnotam-event-publisher http://localhost:3002 http://localhost:8092 http://localhost:8092/swagger-ui
ed254-aman-client http://localhost:3003 http://localhost:8093 http://localhost:8093/swagger-ui

Container images

All images are multi-arch (linux/amd64 + linux/arm64) and published to quay.io. Each app has one repository with two tags: backend and frontend.

Application Image
dnotam-operations-dashboard quay.io/masales/example-apps-dnotam-dashboard
dnotam-event-publisher quay.io/masales/example-apps-dnotam-publisher
ed254-arrival-flow-manager quay.io/masales/example-apps-ed254-manager
ed254-aman-client quay.io/masales/example-apps-ed254-aman

Building

From example-apps/:

# Build a single app (backend + frontend, multi-arch manifest)
make dnotam-dashboard-jvm
make dnotam-publisher-jvm
make ed254-manager-jvm
make ed254-aman-jvm

# Build only one component
make dnotam-dashboard-backend-jvm
make dnotam-dashboard-frontend-jvm

# Override registry or tag
make dnotam-dashboard-jvm REGISTRY=quay.io/myorg TAG=v1.0.0

Run make help for the full list of targets.


Deployment to OpenShift

Each app includes a Helm chart under <app>/deploy/helm/. Environment-specific values files control namespace, routes, and resource limits.

Environment Values file Namespace Route domain
CRC (default) values-crc.yaml swim-demo *.apps-crc.testing
Production values.yaml swim-example-apps *.apps.ocp4.masales.cloud
# Deploy to CRC
make deploy-dnotam-dashboard

# Deploy all apps
make deploy-all

# Deploy to a different environment
make deploy-dnotam-dashboard ENV=prod NAMESPACE=swim-example-apps

# Check status
make status

# Remove
make cleanup-dnotam-dashboard
make cleanup-all

Technology stack

Layer Technology
Backend Quarkus 3.x, Java 21 (virtual threads)
Database MongoDB (Panache Active Record)
Messaging Apache Kafka (SmallRye Reactive Messaging)
Real-time WebSocket (Quarkus WebSockets Next)
API JAX-RS + OpenAPI 3.1
Observability OpenTelemetry, Prometheus metrics
Frontend React 19, PatternFly 6, Vite 6
Container runtime UBI9 openjdk-21 (backend), Nginx 1.27 (frontend)
Registry quay.io, multi-arch (amd64 + arm64)
Orchestration Helm 3 on OpenShift / Kubernetes

Architecture

┌────────────────────────────────────────────────────────┐
│               swim-developer SWIM Services             │
├────────────────────────────────────────────────────────┤
│  swim-dnotam-provider   │   swim-ed254-provider        │
│  swim-dnotam-consumer   │   swim-ed254-consumer        │
│         (Kafka topics)  │         (Kafka topics)       │
└────────────┬────────────┴────────────┬─────────────────┘
             │  data flows             │
┌────────────▼────────────────────────▼─────────────────┐
│               swim-example-apps                        │
├───────────────────────────┬────────────────────────────┤
│  Consumer apps            │  Provider apps             │
│                           │                            │
│  dnotam-operations-       │  dnotam-event-publisher    │
│  dashboard  (:8090/3000)  │  (:8092/3002)              │
│                           │                            │
│  ed254-arrival-flow-      │  ed254-aman-client         │
│  manager  (:8091/3001)    │  (:8093/3003)              │
└───────────────────────────┴────────────────────────────┘

Related projects

Project Role
swim-dnotam-consumer Consumes DNOTAM events from AMQP, publishes to Kafka
swim-dnotam-provider Publishes DNOTAM events to subscribers via AMQP
swim-ed254-consumer Consumes ED-254 arrival sequences from AMQP, publishes to Kafka
swim-ed254-provider Publishes ED-254 arrival sequences to subscribers via AMQP
swim-developer-framework Core framework all services are built on

License

Licensed under the Apache License 2.0.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors