Expand description
gregg-protocol defines the versioned JSON wire contract shared by the
greggd daemon and the gregg client.
The crate is intentionally dependency-light (only serde, serde_json, and
thiserror) so it can be consumed by collectors, the HTTP server, the
polling engine, and tests without dragging in larger stacks.
§Schema version 1
Every snapshot carries an explicit
SCHEMA_VERSION_V1 so clients can reject
incompatible payloads per host without terminating the whole TUI.
Numeric values are transported as raw units — bytes for memory and swap,
percentages in the closed interval 0.0..=100.0 for utilization, and
milliseconds since the Unix epoch for timestamps. No human-formatted
strings cross the wire.
§Compatibility policy
Within schema version 1:
- Unknown additive JSON fields are ignored by default.
- Required version-1 fields remain required unless explicitly changed to optional under an additive compatibility decision.
- Capability flags control interpretation of optional metrics. A
Nonevalue paired with afalsecapability is expected; aNonevalue paired with atruecapability indicates a missing or still-warming sample.
§Examples
use gregg_protocol::{StatusSnapshot, HealthResponse, ReadinessState, SCHEMA_VERSION_V1};
let json = format!(r#"{{
"schema_version": {sv},
"observed_at_unix_ms": 1,
"sample_interval_ms": 1000,
"capabilities": {{ "cpu_iowait": false }},
"system": {{
"name": "mac-mini",
"hostname": "mac-mini.local",
"os_name": "macos",
"os_version": "15.0",
"kernel_name": "Darwin",
"kernel_release": "24.0.0",
"architecture": "arm64"
}},
"cpu": {{ "logical_cores": 8, "usage_pct": 12.5, "iowait_pct": null }},
"load": {{ "one": 1.1, "five": 0.9, "fifteen": 0.6 }},
"memory": {{ "used_bytes": 1, "total_bytes": 2, "usage_pct": 50.0 }},
"swap": {{ "used_bytes": 0, "total_bytes": 0, "usage_pct": 0.0 }}
}}"#, sv = SCHEMA_VERSION_V1);
let snap: StatusSnapshot = serde_json::from_str(&json).expect("valid snapshot");
snap.validate().expect("snapshot validates");
let health = HealthResponse::warming();
assert_eq!(health.state, ReadinessState::Warming);Structs§
- CpuMetrics
- CPU utilization snapshot.
- Health
Response - Health and readiness response served by the daemon.
- Load
Average - One-, five-, and fifteen-minute load averages as reported by the operating system.
- Memory
Metrics - Physical memory utilization.
- Metric
Capabilities - Per-metric capability flags.
- Status
Snapshot - Top-level daemon snapshot returned by the status endpoint.
- Swap
Metrics - Swap utilization.
- System
Identity - Stable identity fields. Each field is transported separately so the TUI can degrade by width priority without parsing a combined string.
- Validation
Violation - A single protocol-invariant violation.
Enums§
- Health
Category - Machine-readable category for a non-ready health response.
- Readiness
State - Coarse readiness state shared between the daemon and the client.
- Violation
Kind - The kind of a single protocol-invariant violation.
Constants§
- SCHEMA_
VERSION_ V1 - Schema major version implemented by this crate.