| Crates.io | metrics-derive |
| lib.rs | metrics-derive |
| version | 0.1.0 |
| created_at | 2024-09-30 07:25:01.286273+00 |
| updated_at | 2024-09-30 07:25:01.286273+00 |
| description | Proc macro for automatically describing and initializing metrics |
| homepage | |
| repository | https://github.com/rkrasiuk/metrics-derive |
| max_upload_size | |
| id | 1391413 |
| size | 54,409 |
metrics-derivemetrics-derive provides the Metrics derive macro, allowing you to automatically implement metrics description and initialization.
Originally introduced in paradigmxyz/reth repository in https://github.com/paradigmxyz/reth/pull/592.
To use metrics-derive, add it to your Cargo.toml:
[dependencies]
metrics-derive = "0.1"
This crate requires a metrics peer dependency.
use metrics::{Counter, Gauge, Histogram};
use metrics_derive::Metrics;
#[derive(Metrics)]
#[metrics(scope = "metrics_custom")]
pub struct CustomMetrics {
/// A gauge with doc comment description.
gauge: Gauge,
#[metric(rename = "second_gauge", describe = "A gauge with metric attribute description.")]
gauge2: Gauge,
/// Some doc comment
#[metric(describe = "Metric attribute description will be preferred over doc comment.")]
counter: Counter,
/// A renamed histogram.
#[metric(rename = "histogram")]
histo: Histogram,
}
The example above will be expanded to:
pub struct CustomMetrics {
/// A gauge with doc comment description.
gauge: metrics::Gauge,
gauge2: metrics::Gauge,
/// Some doc comment
counter: metrics::Counter,
/// A renamed histogram.
histo: metrics::Histogram,
}
impl Default for CustomMetrics {
fn default() -> Self {
Self {
gauge: metrics::gauge!("metrics_custom_gauge"),
gauge2: metrics::gauge!("metrics_custom_second_gauge"),
counter: metrics::counter!("metrics_custom_counter"),
histo: metrics::histogram!("metrics_custom_histogram"),
}
}
}
impl CustomMetrics {
/// Describe all exposed metrics
pub fn describe() {
metrics::describe_gauge!(
"metrics_custom_gauge",
"A gauge with doc comment description."
);
metrics::describe_gauge!(
"metrics_custom_second_gauge",
"A gauge with metric attribute description."
);
metrics::describe_counter!(
"metrics_custom_counter",
"Metric attribute description will be preferred over doc comment."
);
metrics::describe_histogram!("metrics_custom_histogram", "A renamed histogram.");
}
}
impl std::fmt::Debug for CustomMetrics {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("CustomMetrics").finish()
}
}