macro_rules! product_metrics {
(
$(#[$struct_meta:meta])*
$vis:vis struct $name:ident {
$(
$(#[$field_meta:meta])*
$field:ident : $kind:ident (
$subsystem:expr,
$metric_name:expr,
$help:expr,
$labels:expr
$(, $buckets:expr)?
$(,)?
)
),* $(,)?
}
) => { ... };
(@field_type counter) => { ... };
(@field_type gauge) => { ... };
(@field_type histogram) => { ... };
(@field_type histogram_with_buckets) => { ... };
(@register counter, $subsystem:expr, $metric_name:expr, $help:expr, $labels:expr) => { ... };
(@register gauge, $subsystem:expr, $metric_name:expr, $help:expr, $labels:expr) => { ... };
(@register histogram, $subsystem:expr, $metric_name:expr, $help:expr, $labels:expr) => { ... };
(@register histogram_with_buckets, $subsystem:expr, $metric_name:expr, $help:expr, $labels:expr, $buckets:expr) => { ... };
}Expand description
Declares a typed product metric set backed by the shared Prometheus registry.
The generated struct owns typed metric handles and exposes a register() function that
registers every declared metric in order.
aster_forge_metrics::product_metrics! {
pub struct ProductMetrics {
requests: counter(
"example",
"requests_total",
"Total example requests.",
&["status"],
),
latency: histogram_with_buckets(
"example",
"request_duration_seconds",
"Example request duration.",
&["status"],
&[0.1, 0.5, 1.0],
),
}
}