1#![deny(clippy::arithmetic_side_effects)]
2#![deny(clippy::cast_possible_truncation)]
3#![deny(unused_crate_dependencies)]
4#![deny(warnings)]
5
6use prometheus_client::{
7 encoding::text::encode,
8 registry::Registry,
9};
10use std::{
11 ops::Deref,
12 sync::OnceLock,
13};
14
15#[derive(Default)]
17pub struct GlobalRegistry {
18 pub registry: parking_lot::Mutex<Registry>,
20}
21
22mod buckets;
23pub mod config;
24pub mod core_metrics;
25pub mod futures;
26pub mod gas_price_metrics;
27pub mod graphql_metrics;
28pub mod importer;
29pub mod p2p_metrics;
30pub mod txpool_metrics;
31
32static GLOBAL_REGISTER: OnceLock<GlobalRegistry> = OnceLock::new();
33
34pub fn global_registry() -> &'static GlobalRegistry {
35 GLOBAL_REGISTER.get_or_init(GlobalRegistry::default)
36}
37
38pub fn encode_metrics() -> Result<String, std::fmt::Error> {
39 let mut encoded = String::new();
40
41 let registry = global_registry().registry.lock();
43 encode(&mut encoded, registry.deref())?;
44
45 Ok(encoded)
46}