# jerremiz/monitor-java architecture

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

- Interactive diagram: https://gitdiagram.com/jerremiz/monitor-java
- Repository: https://github.com/jerremiz/monitor-java

## Overview

Performance Metrics is a Spring Boot system monitor. It samples host metrics, broadcasts live readings over WebSocket, and records readings for REST history queries; scheduled maintenance removes old records. The README also documents cross-platform operation, while the sampled source shows OS metrics collection through OSHI. The principal flow and storage behavior are supported by sampled code; other platform details are documented but not independently verified here.

Main entry points: [`src/main/java/com/jeremiz/monitor/service/HistoryDataService.java`](https://github.com/jerremiz/monitor-java/blob/main/src/main/java/com/jeremiz/monitor/service/HistoryDataService.java) (History data service), [`src/main/java/com/jeremiz/monitor/service/RealTimeDataService.java`](https://github.com/jerremiz/monitor-java/blob/main/src/main/java/com/jeremiz/monitor/service/RealTimeDataService.java) (Live metrics handler), [`src/main/java/com/jeremiz/monitor/service/SystemMetricsService.java`](https://github.com/jerremiz/monitor-java/blob/main/src/main/java/com/jeremiz/monitor/service/SystemMetricsService.java) (System metrics), [`src/main/java/com/jeremiz/monitor/controller/HistoryDataController.java`](https://github.com/jerremiz/monitor-java/blob/main/src/main/java/com/jeremiz/monitor/controller/HistoryDataController.java) (History REST API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_collection["Metric collection"]
  node_metrics["System metrics"]
end

subgraph group_realtime["Live monitoring"]
  node_wsconfig["WebSocket endpoint config"]
  node_realtime["Live metrics handler"]
  node_sessions["WebSocket sessions"]
end

subgraph group_history["History and storage"]
  node_historyapi["History REST API"]
  node_history["History data service"]
  node_sqlite[("SQLite metrics store")]
end

node_operator(("Monitor user"))
node_frontend(("monitor-vue frontend"))
node_host{{"Host operating system"}}

node_operator -.->|"views metrics"| node_frontend
node_frontend -->|"opens WebSocket"| node_realtime
node_frontend -->|"requests history"| node_historyapi
node_wsconfig -->|"registers handler"| node_realtime
node_realtime -->|"tracks clients"| node_sessions
node_realtime -->|"samples metrics"| node_metrics
node_metrics -->|"reads resources"| node_host
node_realtime -->|"sends live readings"| node_frontend
node_history -->|"checks clients"| node_sessions
node_history -->|"reads live sample"| node_realtime
node_history -->|"samples when idle"| node_metrics
node_history -->|"reads system load"| node_metrics
node_history -->|"writes and queries"| node_sqlite
node_historyapi -->|"queries time ranges"| node_history
node_historyapi -->|"reads total memory"| node_metrics
node_history -->|"purges and vacuums"| node_sqlite

click node_metrics "https://github.com/jerremiz/monitor-java/blob/main/src/main/java/com/jeremiz/monitor/service/SystemMetricsService.java"
click node_wsconfig "https://github.com/jerremiz/monitor-java/blob/main/src/main/java/com/jeremiz/monitor/config/WebSocketConfig.java"
click node_realtime "https://github.com/jerremiz/monitor-java/blob/main/src/main/java/com/jeremiz/monitor/service/RealTimeDataService.java"
click node_sessions "https://github.com/jerremiz/monitor-java/blob/main/src/main/java/com/jeremiz/monitor/utils/WebSocketSessionManager.java"
click node_historyapi "https://github.com/jerremiz/monitor-java/blob/main/src/main/java/com/jeremiz/monitor/controller/HistoryDataController.java"
click node_history "https://github.com/jerremiz/monitor-java/blob/main/src/main/java/com/jeremiz/monitor/service/HistoryDataService.java"
click node_sqlite "https://github.com/jerremiz/monitor-java/blob/main/src/main/java/com/jeremiz/monitor/service/HistoryDataService.java"

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_metrics,node_operator,node_frontend toneBlue
class node_wsconfig,node_realtime,node_sessions toneAmber
class node_historyapi,node_history,node_sqlite toneMint
class node_host toneIndigo
```

## Components

### Metric collection

- [System metrics](https://github.com/jerremiz/monitor-java/blob/main/src/main/java/com/jeremiz/monitor/service/SystemMetricsService.java): `src/main/java/com/jeremiz/monitor/service/SystemMetricsService.java`

### Live monitoring

- [WebSocket endpoint config](https://github.com/jerremiz/monitor-java/blob/main/src/main/java/com/jeremiz/monitor/config/WebSocketConfig.java): `src/main/java/com/jeremiz/monitor/config/WebSocketConfig.java`
- [Live metrics handler](https://github.com/jerremiz/monitor-java/blob/main/src/main/java/com/jeremiz/monitor/service/RealTimeDataService.java): `src/main/java/com/jeremiz/monitor/service/RealTimeDataService.java`
- [WebSocket sessions](https://github.com/jerremiz/monitor-java/blob/main/src/main/java/com/jeremiz/monitor/utils/WebSocketSessionManager.java): `src/main/java/com/jeremiz/monitor/utils/WebSocketSessionManager.java`

### History and storage

- [History REST API](https://github.com/jerremiz/monitor-java/blob/main/src/main/java/com/jeremiz/monitor/controller/HistoryDataController.java): `src/main/java/com/jeremiz/monitor/controller/HistoryDataController.java`
- [History data service](https://github.com/jerremiz/monitor-java/blob/main/src/main/java/com/jeremiz/monitor/service/HistoryDataService.java): `src/main/java/com/jeremiz/monitor/service/HistoryDataService.java`
- [SQLite metrics store](https://github.com/jerremiz/monitor-java/blob/main/src/main/java/com/jeremiz/monitor/service/HistoryDataService.java): `src/main/java/com/jeremiz/monitor/service/HistoryDataService.java`

### Other components

- **Monitor user**
- **monitor-vue frontend**
- **Host operating system**

## Connections

- Monitor user → monitor-vue frontend: views metrics
- monitor-vue frontend → Live metrics handler: opens WebSocket
- monitor-vue frontend → History REST API: requests history
- WebSocket endpoint config → Live metrics handler: registers handler
- Live metrics handler → WebSocket sessions: tracks clients
- Live metrics handler → System metrics: samples metrics
- System metrics → Host operating system: reads resources
- Live metrics handler → monitor-vue frontend: sends live readings
- History data service → WebSocket sessions: checks clients
- History data service → Live metrics handler: reads live sample
- History data service → System metrics: samples when idle
- History data service → System metrics: reads system load
- History data service → SQLite metrics store: writes and queries
- History REST API → History data service: queries time ranges
- History REST API → System metrics: reads total memory
- History data service → SQLite metrics store: purges and vacuums
