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

Method render_prometheus

nodedb/src/control/metrics/database.rs:155–243  ·  view source on GitHub ↗

Render all registered databases as Prometheus text format 0.0.4. Labels: `database=" "`.

(&self, out: &mut String)

Source from the content-addressed store, hash-verified

153 ///
154 /// Labels: `database="<name>"`.
155 pub fn render_prometheus(&self, out: &mut String) {
156 use std::fmt::Write as _;
157
158 let r = self.counters.read().unwrap_or_else(|p| p.into_inner());
159 if r.is_empty() {
160 return;
161 }
162
163 let mut pairs: Vec<_> = r.iter().collect();
164 pairs.sort_by(|a, b| a.0.cmp(b.0));
165
166 macro_rules! emit_counter {
167 ($name:literal, $help:literal, $field:ident) => {
168 let _ = write!(
169 out,
170 "# HELP {} {}\n# TYPE {} counter\n",
171 $name, $help, $name
172 );
173 for (db, c) in &pairs {
174 let _ = writeln!(
175 out,
176 r#"{}{{database="{}"}} {}"#,
177 $name,
178 db,
179 c.$field.load(Ordering::Relaxed)
180 );
181 }
182 out.push('\n');
183 };
184 }
185
186 macro_rules! emit_gauge {
187 ($name:literal, $help:literal, $field:ident) => {
188 let _ = write!(out, "# HELP {} {}\n# TYPE {} gauge\n", $name, $help, $name);
189 for (db, c) in &pairs {
190 let _ = writeln!(
191 out,
192 r#"{}{{database="{}"}} {}"#,
193 $name,
194 db,
195 c.$field.load(Ordering::Relaxed)
196 );
197 }
198 out.push('\n');
199 };
200 }
201
202 emit_counter!(
203 "nodedb_database_qps_total",
204 "Cumulative requests admitted per database",
205 qps_total
206 );
207 emit_gauge!(
208 "nodedb_database_memory_used_bytes",
209 "Current memory usage per database in bytes",
210 memory_bytes
211 );
212 emit_gauge!(

Calls 5

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