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 compression_metrics;
24pub mod config;
25pub mod core_metrics;
26pub mod futures;
27pub mod gas_price_metrics;
28pub mod graphql_metrics;
29pub mod importer;
30pub mod p2p_metrics;
31pub mod tx_status_manager_metrics;
32pub mod txpool_metrics;
33
34static GLOBAL_REGISTER: OnceLock<GlobalRegistry> = OnceLock::new();
35
36pub fn global_registry() -> &'static GlobalRegistry {
37 GLOBAL_REGISTER.get_or_init(GlobalRegistry::default)
38}
39
40pub fn encode_metrics() -> Result<String, std::fmt::Error> {
41 let mut encoded = String::new();
42
43 let registry = global_registry().registry.lock();
45 encode(&mut encoded, registry.deref())?;
46
47 Ok(encoded)
48}