summaryrefslogtreecommitdiffstats
path: root/src/api
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-25 13:07:48 +0100
committertv <tv@krebsco.de>2026-10-25 13:07:48 +0100
commit3af7c116d41c06822006fb447211e3792862fd7c (patch)
tree52b9cdc0630fbd7b811e6b6e20a1f61624806ee8 /src/api
parentd6620dc266b593e9ed269bcb7e65d3d8c9710d27 (diff)
add disk I/O stats
Diffstat (limited to 'src/api')
-rw-r--r--src/api/stats.rs18
-rw-r--r--src/api/stats/prometheus.rs26
2 files changed, 44 insertions, 0 deletions
diff --git a/src/api/stats.rs b/src/api/stats.rs
index 838cc0f..6c5e172 100644
--- a/src/api/stats.rs
+++ b/src/api/stats.rs
@@ -35,6 +35,18 @@ pub(crate) struct StatsResponse {
/// The peers listed in /peers together (a forgotten peer's are gone).
incidents: Incidents,
propagation: PropagationStats,
+ disk: DiskStats,
+}
+
+/// Files this node reads and writes for itself (the state file, a backup to recover
+/// from), since it started.
+#[derive(Debug, Serialize)]
+#[serde(rename_all = "camelCase")]
+struct DiskStats {
+ reads: u64,
+ read_bytes: u64,
+ writes: u64,
+ written_bytes: u64,
}
/// How long changes written elsewhere took from their commit there until applied here,
@@ -195,5 +207,11 @@ async fn collect(state: &AppState) -> StatsResponse {
.map(|(le_ms, count)| PropagationBucket { le_ms, count })
.collect(),
},
+ disk: DiskStats {
+ reads: node.disk.reads,
+ read_bytes: node.disk.read_bytes,
+ writes: node.disk.writes,
+ written_bytes: node.disk.written_bytes,
+ },
}
}
diff --git a/src/api/stats/prometheus.rs b/src/api/stats/prometheus.rs
index f68ca85..ea97bd2 100644
--- a/src/api/stats/prometheus.rs
+++ b/src/api/stats/prometheus.rs
@@ -297,6 +297,32 @@ pub(super) async fn render(state: &AppState, stats: &StatsResponse) -> String {
stats.stale_hello_replies as f64,
);
+ let disk = &stats.disk;
+ out.single(
+ "disk_reads_total",
+ "counter",
+ "Files this node read for itself (state file, backup).",
+ disk.reads as f64,
+ );
+ out.single(
+ "disk_read_bytes_total",
+ "counter",
+ "Bytes of those files.",
+ disk.read_bytes as f64,
+ );
+ out.single(
+ "disk_writes_total",
+ "counter",
+ "Files this node wrote for itself (state file).",
+ disk.writes as f64,
+ );
+ out.single(
+ "disk_written_bytes_total",
+ "counter",
+ "Bytes of those files.",
+ disk.written_bytes as f64,
+ );
+
let propagation = &stats.propagation;
out.family(
"propagation_delay_seconds",