MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / prometheus_database_metrics

Method prometheus_database_metrics

nodedb/src/control/metrics/system/render.rs:32–153  ·  view source on GitHub ↗

Emit per-database labeled counters and gauges. Six series: - `nodedb_database_queries_total{database="..."}` — cumulative queries - `nodedb_database_errors_total{database="..."}` — cumulative errors - `nodedb_database_collections_total{database="..."}` — current collection count - `nodedb_database_tenants_total{database="..."}` — tenant count (stub-zero) - `nodedb_database_memory_bytes{database="

(&self, out: &mut String)

Source from the content-addressed store, hash-verified

30 /// - `nodedb_database_memory_bytes{database="..."}` — memory usage (stub-zero)
31 /// - `nodedb_database_storage_bytes{database="..."}` — storage usage (stub-zero)
32 pub(super) fn prometheus_database_metrics(&self, out: &mut String) {
33 use std::fmt::Write as _;
34
35 let queries = self
36 .database_queries_by_name
37 .read()
38 .unwrap_or_else(|p| p.into_inner());
39 if !queries.is_empty() {
40 let _ = out.write_str(
41 "# HELP nodedb_database_queries_total Queries executed against each database\n\
42 # TYPE nodedb_database_queries_total counter\n",
43 );
44 let mut pairs: Vec<_> = queries.iter().collect();
45 pairs.sort_by(|a, b| a.0.cmp(b.0));
46 for (db, count) in pairs {
47 let _ = writeln!(
48 out,
49 r#"nodedb_database_queries_total{{database="{db}"}} {count}"#
50 );
51 }
52 }
53 drop(queries);
54
55 let errors = self
56 .database_errors_by_name
57 .read()
58 .unwrap_or_else(|p| p.into_inner());
59 if !errors.is_empty() {
60 let _ = out.write_str(
61 "# HELP nodedb_database_errors_total Query errors against each database\n\
62 # TYPE nodedb_database_errors_total counter\n",
63 );
64 let mut pairs: Vec<_> = errors.iter().collect();
65 pairs.sort_by(|a, b| a.0.cmp(b.0));
66 for (db, count) in pairs {
67 let _ = writeln!(
68 out,
69 r#"nodedb_database_errors_total{{database="{db}"}} {count}"#
70 );
71 }
72 }
73 drop(errors);
74
75 let colls = self
76 .database_collections_by_name
77 .read()
78 .unwrap_or_else(|p| p.into_inner());
79 if !colls.is_empty() {
80 let _ = out.write_str(
81 "# HELP nodedb_database_collections_total Collections registered in each database\n\
82 # TYPE nodedb_database_collections_total gauge\n",
83 );
84 let mut pairs: Vec<_> = colls.iter().collect();
85 pairs.sort_by(|a, b| a.0.cmp(b.0));
86 for (db, count) in pairs {
87 let _ = writeln!(
88 out,
89 r#"nodedb_database_collections_total{{database="{db}"}} {count}"#

Callers 1

to_prometheusMethod · 0.80

Calls 5

collectMethod · 0.80
readMethod · 0.45
is_emptyMethod · 0.45
iterMethod · 0.45
cmpMethod · 0.45

Tested by

no test coverage detected