# dylankatchen/engine_prediction_app architecture

> Architecture diagram of the GitHub repository dylankatchen/engine_prediction_app, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dylankatchen/engine_prediction_app
- Repository: https://github.com/dylankatchen/engine_prediction_app

## Overview

EngineGuard AI simulates a fleet from CMAPSS sensor data, predicts engine remaining useful life, and presents fleet health and per-engine history. The documented path is producer → Kafka → API ingestion and persistence → scheduled ML prediction → status/history API → dashboard. The README documents PostgreSQL, Kafka, and dashboard capabilities; source excerpts show the API and ML interactions, while deployment configuration and some frontend implementation details were not sampled.

Main entry points: [`maintenance-api/src/main/java/com/aircraft/maintenance/SensorReadingRepository.java`](https://github.com/dylankatchen/engine_prediction_app/blob/main/maintenance-api/src/main/java/com/aircraft/maintenance/SensorReadingRepository.java) (Reading repository), [`maintenance-api/src/main/java/com/aircraft/maintenance/PredictionScheduler.java`](https://github.com/dylankatchen/engine_prediction_app/blob/main/maintenance-api/src/main/java/com/aircraft/maintenance/PredictionScheduler.java) (Prediction scheduler), [`maintenance-api/src/main/java/com/aircraft/maintenance/EngineStatusRepository.java`](https://github.com/dylankatchen/engine_prediction_app/blob/main/maintenance-api/src/main/java/com/aircraft/maintenance/EngineStatusRepository.java) (Status repository), [`maintenance-api/src/main/java/com/aircraft/maintenance/SensorConsumer.java`](https://github.com/dylankatchen/engine_prediction_app/blob/main/maintenance-api/src/main/java/com/aircraft/maintenance/SensorConsumer.java) (Sensor consumer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ingest["Sensor ingestion"]
  node_producer["CMAPSS simulator<br/>[producer.py]"]
  node_kafka["Kafka bus"]
end

subgraph group_maintenance["Maintenance API"]
  node_consumer["Sensor consumer"]
  node_reading["Sensor readings<br/>[SensorReading.java]"]
  node_readingrepo["Reading repository"]
  node_postgres[("PostgreSQL")]
  node_engine_status["Engine status<br/>[EngineStatus.java]"]
  node_statusrepo["Status repository"]
  node_controller["Status and history API"]
end

subgraph group_prediction["RUL prediction"]
  node_scheduler["Prediction scheduler"]
  node_ml["ML prediction service<br/>[app.py]"]
  node_training["Model training<br/>[train.py]"]
end

subgraph group_dashboard["Fleet dashboard"]
  node_dashboard["Fleet health dashboard<br/>[App.tsx]"]
end

node_operator(("Demo operator"))
node_user(("Dashboard user"))

node_operator -->|"starts simulation"| node_producer
node_producer -->|"publishes readings"| node_kafka
node_kafka -->|"delivers readings"| node_consumer
node_consumer -->|"creates records"| node_reading
node_consumer -->|"saves readings"| node_readingrepo
node_readingrepo -->|"persists records"| node_reading
node_readingrepo -.->|"stores readings"| node_postgres
node_scheduler -->|"loads pending"| node_readingrepo
node_scheduler -->|"requests prediction"| node_ml
node_ml -->|"returns RUL"| node_scheduler
node_scheduler -->|"saves status"| node_statusrepo
node_scheduler -->|"marks processed"| node_readingrepo
node_statusrepo -->|"persists status"| node_engine_status
node_statusrepo -.->|"stores status"| node_postgres
node_controller -->|"reads statuses"| node_statusrepo
node_controller -->|"reads history"| node_readingrepo
node_dashboard -->|"fetches status and history"| node_controller
node_user -->|"views health charts"| node_dashboard
node_training -.->|"provides model"| node_ml

click node_producer "https://github.com/dylankatchen/engine_prediction_app/blob/main/kafka-producer/producer.py"
click node_consumer "https://github.com/dylankatchen/engine_prediction_app/blob/main/maintenance-api/src/main/java/com/aircraft/maintenance/SensorConsumer.java"
click node_reading "https://github.com/dylankatchen/engine_prediction_app/blob/main/maintenance-api/src/main/java/com/aircraft/maintenance/SensorReading.java"
click node_readingrepo "https://github.com/dylankatchen/engine_prediction_app/blob/main/maintenance-api/src/main/java/com/aircraft/maintenance/SensorReadingRepository.java"
click node_scheduler "https://github.com/dylankatchen/engine_prediction_app/blob/main/maintenance-api/src/main/java/com/aircraft/maintenance/PredictionScheduler.java"
click node_ml "https://github.com/dylankatchen/engine_prediction_app/blob/main/ml-service/app.py"
click node_training "https://github.com/dylankatchen/engine_prediction_app/blob/main/ml-service/train.py"
click node_engine_status "https://github.com/dylankatchen/engine_prediction_app/blob/main/maintenance-api/src/main/java/com/aircraft/maintenance/EngineStatus.java"
click node_statusrepo "https://github.com/dylankatchen/engine_prediction_app/blob/main/maintenance-api/src/main/java/com/aircraft/maintenance/EngineStatusRepository.java"
click node_controller "https://github.com/dylankatchen/engine_prediction_app/blob/main/maintenance-api/src/main/java/com/aircraft/maintenance/EngineController.java"
click node_dashboard "https://github.com/dylankatchen/engine_prediction_app/blob/main/frontend_dash/src/App.tsx"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_producer,node_kafka,node_user toneBlue
class node_consumer,node_reading,node_readingrepo,node_postgres,node_engine_status,node_statusrepo,node_controller toneAmber
class node_scheduler,node_ml,node_training toneMint
class node_dashboard toneRose
class node_operator toneIndigo
```

## Components

### Sensor ingestion

- [CMAPSS simulator](https://github.com/dylankatchen/engine_prediction_app/blob/main/kafka-producer/producer.py): `kafka-producer/producer.py`
- **Kafka bus**

### Maintenance API

- [Sensor consumer](https://github.com/dylankatchen/engine_prediction_app/blob/main/maintenance-api/src/main/java/com/aircraft/maintenance/SensorConsumer.java): `maintenance-api/src/main/java/com/aircraft/maintenance/SensorConsumer.java`
- [Sensor readings](https://github.com/dylankatchen/engine_prediction_app/blob/main/maintenance-api/src/main/java/com/aircraft/maintenance/SensorReading.java): `maintenance-api/src/main/java/com/aircraft/maintenance/SensorReading.java`
- [Reading repository](https://github.com/dylankatchen/engine_prediction_app/blob/main/maintenance-api/src/main/java/com/aircraft/maintenance/SensorReadingRepository.java): `maintenance-api/src/main/java/com/aircraft/maintenance/SensorReadingRepository.java`
- **PostgreSQL**
- [Engine status](https://github.com/dylankatchen/engine_prediction_app/blob/main/maintenance-api/src/main/java/com/aircraft/maintenance/EngineStatus.java): `maintenance-api/src/main/java/com/aircraft/maintenance/EngineStatus.java`
- [Status repository](https://github.com/dylankatchen/engine_prediction_app/blob/main/maintenance-api/src/main/java/com/aircraft/maintenance/EngineStatusRepository.java): `maintenance-api/src/main/java/com/aircraft/maintenance/EngineStatusRepository.java`
- [Status and history API](https://github.com/dylankatchen/engine_prediction_app/blob/main/maintenance-api/src/main/java/com/aircraft/maintenance/EngineController.java): `maintenance-api/src/main/java/com/aircraft/maintenance/EngineController.java`

### RUL prediction

- [Prediction scheduler](https://github.com/dylankatchen/engine_prediction_app/blob/main/maintenance-api/src/main/java/com/aircraft/maintenance/PredictionScheduler.java): `maintenance-api/src/main/java/com/aircraft/maintenance/PredictionScheduler.java`
- [ML prediction service](https://github.com/dylankatchen/engine_prediction_app/blob/main/ml-service/app.py): `ml-service/app.py`
- [Model training](https://github.com/dylankatchen/engine_prediction_app/blob/main/ml-service/train.py): `ml-service/train.py`

### Fleet dashboard

- [Fleet health dashboard](https://github.com/dylankatchen/engine_prediction_app/blob/main/frontend_dash/src/App.tsx): `frontend_dash/src/App.tsx`

### Other components

- **Demo operator**
- **Dashboard user**

## Connections

- Demo operator → CMAPSS simulator: starts simulation (evidence: `README.md`)
- CMAPSS simulator → Kafka bus: publishes readings (evidence: `kafka-producer/producer.py`)
- Kafka bus → Sensor consumer: delivers readings (evidence: `README.md`)
- Sensor consumer → Sensor readings: creates records (evidence: `maintenance-api/src/main/java/com/aircraft/maintenance/SensorConsumer.java`)
- Sensor consumer → Reading repository: saves readings (evidence: `maintenance-api/src/main/java/com/aircraft/maintenance/SensorConsumer.java`)
- Reading repository → Sensor readings: persists records (evidence: `maintenance-api/src/main/java/com/aircraft/maintenance/SensorReadingRepository.java`)
- Reading repository → PostgreSQL: stores readings
- Prediction scheduler → Reading repository: loads pending (evidence: `maintenance-api/src/main/java/com/aircraft/maintenance/PredictionScheduler.java`)
- Prediction scheduler → ML prediction service: requests prediction (evidence: `maintenance-api/src/main/java/com/aircraft/maintenance/PredictionScheduler.java`)
- ML prediction service → Prediction scheduler: returns RUL (evidence: `maintenance-api/src/main/java/com/aircraft/maintenance/PredictionScheduler.java`)
- Prediction scheduler → Status repository: saves status (evidence: `maintenance-api/src/main/java/com/aircraft/maintenance/PredictionScheduler.java`)
- Prediction scheduler → Reading repository: marks processed (evidence: `maintenance-api/src/main/java/com/aircraft/maintenance/PredictionScheduler.java`)
- Status repository → Engine status: persists status (evidence: `maintenance-api/src/main/java/com/aircraft/maintenance/EngineStatusRepository.java`)
- Status repository → PostgreSQL: stores status
- Status and history API → Status repository: reads statuses (evidence: `maintenance-api/src/main/java/com/aircraft/maintenance/EngineController.java`)
- Status and history API → Reading repository: reads history (evidence: `maintenance-api/src/main/java/com/aircraft/maintenance/EngineController.java`)
- Fleet health dashboard → Status and history API: fetches status and history (evidence: `frontend_dash/src/App.tsx`)
- Dashboard user → Fleet health dashboard: views health charts (evidence: `README.md`)
- Model training → ML prediction service: provides model (evidence: `README.md`)
