80 lines
2.3 KiB
Markdown
80 lines
2.3 KiB
Markdown
# Monitoring Service
|
|
|
|
Exposes system resource metrics via HTTP for observability.
|
|
|
|
## Overview
|
|
|
|
- **Service name**: `MonitoringService`
|
|
- **Endpoint**: `GET /api/monitoring/resources`
|
|
- **Metrics**: CPU usage, memory, filesystem, uptime
|
|
|
|
## Endpoint
|
|
|
|
### GET /api/monitoring/resources
|
|
|
|
Returns real-time system resource metrics.
|
|
|
|
Response fields:
|
|
- `cpu.current_usage`: Current CPU usage percent
|
|
- `cpu.average_usage`: Average CPU usage percent
|
|
- `cpu.max_usage`: Max observed CPU usage
|
|
- `cpu.min_usage`: Min observed CPU usage
|
|
- `cpu.measurement_count`: Number of measurements
|
|
- `cpu.is_measuring`: Whether measurement is active
|
|
- `memory.free_heap`: Free heap bytes
|
|
- `memory.total_heap`: Total heap bytes (approximate)
|
|
- `memory.min_free_heap`: Minimum free heap (0 on ESP8266)
|
|
- `memory.max_alloc_heap`: Max allocatable heap (0 on ESP8266)
|
|
- `memory.heap_fragmentation`: Fragmentation percent (0 on ESP8266)
|
|
- `filesystem.total_bytes`: LittleFS total bytes
|
|
- `filesystem.used_bytes`: Used bytes
|
|
- `filesystem.free_bytes`: Free bytes
|
|
- `filesystem.usage_percent`: Usage percent
|
|
- `system.uptime_ms`: Uptime in milliseconds
|
|
- `system.uptime_seconds`: Uptime in seconds
|
|
- `system.uptime_formatted`: Human-readable uptime
|
|
|
|
Example:
|
|
```json
|
|
{
|
|
"cpu": {
|
|
"current_usage": 3.5,
|
|
"average_usage": 2.1,
|
|
"max_usage": 15.2,
|
|
"min_usage": 0.0,
|
|
"measurement_count": 120,
|
|
"is_measuring": true
|
|
},
|
|
"memory": {
|
|
"free_heap": 48748,
|
|
"total_heap": 81920,
|
|
"min_free_heap": 0,
|
|
"max_alloc_heap": 0,
|
|
"heap_fragmentation": 0,
|
|
"heap_usage_percent": 40.4
|
|
},
|
|
"filesystem": {
|
|
"total_bytes": 65536,
|
|
"used_bytes": 10240,
|
|
"free_bytes": 55296,
|
|
"usage_percent": 15.6
|
|
},
|
|
"system": {
|
|
"uptime_ms": 123456,
|
|
"uptime_seconds": 123,
|
|
"uptime_formatted": "0h 2m 3s"
|
|
}
|
|
}
|
|
```
|
|
|
|
## Implementation Notes
|
|
|
|
- `MonitoringService` reads from `CpuUsage` and ESP8266 SDK APIs.
|
|
- Filesystem metrics are gathered from LittleFS.
|
|
- CPU measurement is bracketed by `Spore::loop()` calling `cpuUsage.startMeasurement()` and `cpuUsage.endMeasurement()`.
|
|
|
|
## Troubleshooting
|
|
|
|
- If `filesystem.total_bytes` is zero, ensure LittleFS is enabled in `platformio.ini` and an FS image is uploaded.
|
|
- CPU usage values remain zero until the main loop runs and CPU measurement is started.
|