README with new Documentation section
This commit is contained in:
parent
3cf2cf9288
commit
4eca8d6e91
62
docs/ARCHITECTURE.md
Normal file
62
docs/ARCHITECTURE.md
Normal file
@ -0,0 +1,62 @@
|
||||
# Architecture
|
||||
|
||||
## High-Level Overview
|
||||
|
||||
The application is a Java Swing desktop client that:
|
||||
|
||||
1. subscribes to MQTT prediction events,
|
||||
2. stores accepted events in SQLite,
|
||||
3. computes risk ratios,
|
||||
4. updates UI state and visualization,
|
||||
5. exports animation state for Unreal integration.
|
||||
|
||||
## Layers
|
||||
|
||||
- `bootstrap`
|
||||
- builds and wires all services in `ApplicationInitializer`
|
||||
- handles orderly shutdown in `ApplicationShutdownManager`
|
||||
- `service`
|
||||
- integration and business logic (MQTT, DB, stats, evaluation, external processes)
|
||||
- `model`
|
||||
- simple state and value objects (`AppState`, `ProblemLevel`, `DatabaseEntry`, `RatioPoint`)
|
||||
- `controller`
|
||||
- UI orchestration between state/services and Swing views
|
||||
- `ui`
|
||||
- window and visual components (tabs, chart, browser, status widgets)
|
||||
- `util`
|
||||
- shared helpers for config and logging
|
||||
|
||||
## Runtime Data Flow
|
||||
|
||||
1. `App.main` initializes look-and-feel and context.
|
||||
2. `MqttClientService` connects to `tcp://localhost:1883`.
|
||||
3. Subscription on configured topic routes payloads into `BinaryEventService`.
|
||||
4. `BinaryEventService` validates JSON and stores `prediction` values.
|
||||
5. `EvaluationService` gets ratio from `StatisticsService`.
|
||||
6. `AppState` is updated with the new `ProblemLevel`.
|
||||
7. Controllers listen to `AppState` and refresh UI (`DashboardView`, status bar).
|
||||
8. `AnimationFileService` writes the animation JSON consumed by Unreal side logic.
|
||||
|
||||
## Main Components
|
||||
|
||||
- `vassistent.App`
|
||||
- process entry point and shutdown hook registration
|
||||
- `ApplicationContext`
|
||||
- in-memory service container
|
||||
- `DataPersistenceService`
|
||||
- SQLite schema init and data access
|
||||
- `MqttClientService`
|
||||
- MQTT connect/subscribe/publish callbacks
|
||||
- `StatisticsService`
|
||||
- ratio and rolling-average computations
|
||||
- `EvaluationService`
|
||||
- ratio-to-level mapping
|
||||
- `ProcessManagerService`
|
||||
- optional startup/shutdown of simulator/Unreal helper processes
|
||||
|
||||
## UI Structure
|
||||
|
||||
- Main window: `AppWindow`
|
||||
- Tab 1: `PixelStreamingView` (JCEF browser)
|
||||
- Tab 2: `DashboardView` (JFreeChart + `ProblemLevelBar`)
|
||||
- Footer status bar: MQTT status + current level
|
||||
35
docs/CONFIGURATION.md
Normal file
35
docs/CONFIGURATION.md
Normal file
@ -0,0 +1,35 @@
|
||||
# Configuration
|
||||
|
||||
Application settings are loaded from classpath properties files in `src/main/resources/config`.
|
||||
|
||||
## `application.properties`
|
||||
|
||||
| Key | Purpose | Current Default |
|
||||
|---|---|---|
|
||||
| `app.mode` | Generic mode flag | `test` |
|
||||
| `python.path` | Python interpreter for simulator process | `C:\\Program Files\\PyManager\\python.exe` |
|
||||
| `mqtt.topic` | MQTT topic to subscribe to | `PREDICTION` |
|
||||
| `mqtt_sim.enabled` | Enables simulator startup | `false` |
|
||||
| `mqtt_sim.script` | Simulator script path | `src/main/resources/scripts/mqtt_simulator.py` |
|
||||
| `unreal.enabled` | Enables Unreal startup flow | `true` |
|
||||
| `unreal.executable` | PowerShell script to start Unreal process | absolute path |
|
||||
| `unreal.signalling_server.script` | Signalling server BAT file path | absolute path |
|
||||
|
||||
Notes:
|
||||
|
||||
- MQTT broker host/port are currently hardcoded in Java (`MqttClientService`): `tcp://localhost:1883`.
|
||||
- Several Unreal-related paths are absolute and environment-specific.
|
||||
|
||||
## `logger.properties`
|
||||
|
||||
| Key | Purpose | Current Default |
|
||||
|---|---|---|
|
||||
| `logger.level` | Minimum log level | `DEBUG` |
|
||||
| `logger.file.enabled` | Enables file logging | `true` |
|
||||
| `logger.file` | Log output file | `logs/application.log` |
|
||||
| `logger.max.size.mb` | Rotation threshold | `10` |
|
||||
|
||||
## Related Script Files
|
||||
|
||||
- `src/main/resources/scripts/mqtt_simulator.py`
|
||||
- `src/main/resources/scripts/start_avatar.ps1`
|
||||
20
docs/INDEX.md
Normal file
20
docs/INDEX.md
Normal file
@ -0,0 +1,20 @@
|
||||
# Documentation Index
|
||||
|
||||
This folder contains project-level documentation for the virtual health assistant.
|
||||
|
||||
## Contents
|
||||
|
||||
- [Architecture](ARCHITECTURE.md)
|
||||
- [Setup and Run](SETUP_AND_RUN.md)
|
||||
- [Configuration](CONFIGURATION.md)
|
||||
- [Source Map](SOURCE_MAP.md)
|
||||
- [Testing](TESTING.md)
|
||||
- [Known Issues](KNOWN_ISSUES.md)
|
||||
|
||||
## Recommended Reading Order
|
||||
|
||||
1. [Architecture](ARCHITECTURE.md)
|
||||
2. [Setup and Run](SETUP_AND_RUN.md)
|
||||
3. [Configuration](CONFIGURATION.md)
|
||||
4. [Testing](TESTING.md)
|
||||
5. [Known Issues](KNOWN_ISSUES.md)
|
||||
45
docs/KNOWN_ISSUES.md
Normal file
45
docs/KNOWN_ISSUES.md
Normal file
@ -0,0 +1,45 @@
|
||||
# Known Issues
|
||||
|
||||
## 1. Hardcoded Environment Paths
|
||||
|
||||
Several runtime paths are absolute and machine-specific:
|
||||
|
||||
- animation output file path in `AnimationFileService`
|
||||
- Unreal process script paths in `application.properties`
|
||||
- PID file cleanup paths in `ProcessManagerService`
|
||||
|
||||
Impact:
|
||||
|
||||
- project is not portable across machines without local path edits
|
||||
|
||||
## 2. Database Deleted on Shutdown
|
||||
|
||||
`App.deleteDatabase()` deletes `data/health.db` on app exit.
|
||||
|
||||
Impact:
|
||||
|
||||
- historical data is lost every run unless behavior is changed
|
||||
|
||||
## 3. Signalling Process Startup Incomplete
|
||||
|
||||
In `ProcessManagerService.startSignallingServer()`, process creation is currently prepared but not started (`pb.start()` is commented).
|
||||
|
||||
Impact:
|
||||
|
||||
- log output may indicate startup intent, but process is not actually launched via that path
|
||||
|
||||
## 4. Legacy Mockito Dependency
|
||||
|
||||
Mockito-based tests fail on Java 17 due to old `mockito-all:2.0.2-beta`.
|
||||
|
||||
Impact:
|
||||
|
||||
- full CI-style green test run is blocked until dependency modernization
|
||||
|
||||
## 5. Encoding Artifacts in Logs/Strings
|
||||
|
||||
Some source/log text contains mojibake characters in comments/messages.
|
||||
|
||||
Impact:
|
||||
|
||||
- readability and consistency issues in logs and source text
|
||||
58
docs/SETUP_AND_RUN.md
Normal file
58
docs/SETUP_AND_RUN.md
Normal file
@ -0,0 +1,58 @@
|
||||
# Setup and Run
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Java 17 (JDK)
|
||||
- Maven 3.9+
|
||||
- MQTT broker reachable at `localhost:1883`
|
||||
- Windows environment for bundled PowerShell/BAT process scripts
|
||||
|
||||
Optional:
|
||||
|
||||
- Python (for MQTT simulator startup)
|
||||
- Unreal + Pixel Streaming environment (if enabled in config)
|
||||
|
||||
## Build
|
||||
|
||||
```powershell
|
||||
mvn clean compile
|
||||
```
|
||||
|
||||
## Run (CLI)
|
||||
|
||||
```powershell
|
||||
mvn org.codehaus.mojo:exec-maven-plugin:3.5.0:java -Dexec.mainClass=vassistent.App
|
||||
```
|
||||
|
||||
## Run (IDE)
|
||||
|
||||
Run the class:
|
||||
|
||||
- `vassistent.App`
|
||||
|
||||
## MQTT Payload Format
|
||||
|
||||
Publish payloads to configured topic (default `PREDICTION`) in this format:
|
||||
|
||||
```json
|
||||
{
|
||||
"valid": true,
|
||||
"_id": 1,
|
||||
"prediction": 0
|
||||
}
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- `valid` must be `true`
|
||||
- `_id` must exist
|
||||
- `prediction` must be `0` or `1`
|
||||
|
||||
## Shutdown Behavior
|
||||
|
||||
On shutdown, the app:
|
||||
|
||||
- disconnects MQTT
|
||||
- stops managed external processes
|
||||
- flushes logger queue
|
||||
- deletes `data/health.db` (current implementation)
|
||||
59
docs/SOURCE_MAP.md
Normal file
59
docs/SOURCE_MAP.md
Normal file
@ -0,0 +1,59 @@
|
||||
# Source Map
|
||||
|
||||
Package-level map of all Java source files in `src/main/java` and tests in `src/test/java`.
|
||||
|
||||
## Main Sources
|
||||
|
||||
### `vassistent`
|
||||
|
||||
- `App.java`: application entry point and shutdown hook logic
|
||||
|
||||
### `vassistent.bootstrap`
|
||||
|
||||
- `ApplicationContext.java`: container for shared services/state
|
||||
- `ApplicationInitializer.java`: wiring and startup sequence
|
||||
- `ApplicationShutdownManager.java`: managed shutdown sequence
|
||||
|
||||
### `vassistent.controller`
|
||||
|
||||
- `AppWindowController.java`: main window lifecycle and state-driven UI updates
|
||||
- `DashboardController.java`: chart and level updates on state changes
|
||||
- `StreamingController.java`: stream view actions (reload/focus)
|
||||
|
||||
### `vassistent.model`
|
||||
|
||||
- `AppState.java`: observable app state
|
||||
- `DatabaseEntry.java`: persisted event value + timestamp
|
||||
- `ProblemLevel.java`: risk level enum
|
||||
- `RatioPoint.java`: chart point model
|
||||
|
||||
### `vassistent.service`
|
||||
|
||||
- `AnimationFileService.java`: writes animation state JSON file
|
||||
- `BinaryEventService.java`: payload validation + dispatch
|
||||
- `DataPersistenceService.java`: SQLite init and CRUD-like methods
|
||||
- `EvaluationService.java`: ratio-to-problem-level mapping
|
||||
- `MqttClientService.java`: MQTT connectivity and callbacks
|
||||
- `ProcessManagerService.java`: optional process startup/shutdown
|
||||
- `StatisticsService.java`: ratio and rolling-avg computations
|
||||
|
||||
### `vassistent.ui`
|
||||
|
||||
- `AppWindow.java`: root frame with tabbed layout
|
||||
- `DashboardView.java`: chart + threshold markers + level display
|
||||
- `PixelStreamingView.java`: JCEF browser panel for stream
|
||||
- `ProblemLevelBar.java`: custom level visualization widget
|
||||
|
||||
### `vassistent.util`
|
||||
|
||||
- `ConfigLoader.java`: classpath properties loader
|
||||
- `Logger.java`: async logger with file rotation
|
||||
|
||||
## Test Sources
|
||||
|
||||
### `vassistent.service`
|
||||
|
||||
- `BinaryEventServiceTest.java`
|
||||
- `DataPersistenceServiceTest.java`
|
||||
- `EvaluationServiceTest.java`
|
||||
- `StatisticsServiceTest.java`
|
||||
39
docs/TESTING.md
Normal file
39
docs/TESTING.md
Normal file
@ -0,0 +1,39 @@
|
||||
# Testing
|
||||
|
||||
## Run Tests
|
||||
|
||||
```powershell
|
||||
mvn test
|
||||
```
|
||||
|
||||
## Current Test Suite
|
||||
|
||||
Located in `src/test/java/vassistent/service`:
|
||||
|
||||
- `BinaryEventServiceTest`
|
||||
- `DataPersistenceServiceTest`
|
||||
- `EvaluationServiceTest`
|
||||
- `StatisticsServiceTest`
|
||||
|
||||
## Current Status (Java 17)
|
||||
|
||||
The suite does not fully pass on Java 17 because of legacy Mockito dependency:
|
||||
|
||||
- project uses `mockito-all:2.0.2-beta`
|
||||
- this version relies on CGLIB behavior that conflicts with modern Java module access
|
||||
- result: Mockito-based tests fail at initialization (`InaccessibleObjectException`)
|
||||
|
||||
Tests not depending on Mockito are expected to run successfully.
|
||||
|
||||
## Recommended Fix
|
||||
|
||||
Replace legacy dependency with modern Mockito stack, for example:
|
||||
|
||||
- `org.mockito:mockito-core` (or `mockito-junit-jupiter`)
|
||||
- ensure JUnit Jupiter engine is configured by Surefire
|
||||
|
||||
After dependency update, rerun:
|
||||
|
||||
```powershell
|
||||
mvn test
|
||||
```
|
||||
10
readme.md
10
readme.md
@ -2,6 +2,16 @@
|
||||
|
||||
Java desktop application that receives binary health predictions via MQTT, stores them in SQLite, computes rolling risk ratios, and visualizes the result in a dashboard with an avatar streaming view.
|
||||
|
||||
## Documentation
|
||||
|
||||
- [Docs Index](docs/INDEX.md)
|
||||
- [Architecture](docs/ARCHITECTURE.md)
|
||||
- [Setup and Run](docs/SETUP_AND_RUN.md)
|
||||
- [Configuration](docs/CONFIGURATION.md)
|
||||
- [Source Map](docs/SOURCE_MAP.md)
|
||||
- [Testing](docs/TESTING.md)
|
||||
- [Known Issues](docs/KNOWN_ISSUES.md)
|
||||
|
||||
## Features
|
||||
|
||||
- Swing desktop UI with two tabs:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user