Render all registered databases as Prometheus text format 0.0.4. Labels: `database=" "`.
(&self, out: &mut String)
| 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!( |