1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
//! Compile-time observability stubs.
//!
//! When the `observability` feature is enabled, these macros emit real
//! metrics and tracing spans. When disabled, they compile to nothing.
//!
//! This is a deliberate, complete macro family: a few members
//! (`observe_counter_add`, `observe_histogram`) are not yet called from
//! anywhere in the engine but are kept so the set is uniform and ready to
//! use. Hence the scoped `unused_macros` allow (preferred over a
//! crate-wide allow — review P2-2).
#![allow(unused_macros)]
/// Increment a counter metric. No-op when `observability` is disabled.
macro_rules! observe_counter {
($name:expr, $($label_key:expr => $label_val:expr),* $(,)?) => {
#[cfg(feature = "observability")]
{
::metrics::counter!($name, $($label_key => $label_val),*).increment(1);
}
#[cfg(not(feature = "observability"))]
{
$(let _ = ($label_key, $label_val);)*
let _ = $name;
}
};
}
/// Increment a counter by a given value. No-op when `observability` is disabled.
macro_rules! observe_counter_add {
($name:expr, $val:expr, $($label_key:expr => $label_val:expr),* $(,)?) => {
#[cfg(feature = "observability")]
{
::metrics::counter!($name, $($label_key => $label_val),*).increment($val);
}
#[cfg(not(feature = "observability"))]
{
$(let _ = ($label_key, $label_val);)*
let _ = ($name, $val);
}
};
}
/// Record a histogram value. No-op when `observability` is disabled.
macro_rules! observe_histogram {
($name:expr, $val:expr, $($label_key:expr => $label_val:expr),* $(,)?) => {
#[cfg(feature = "observability")]
{
::metrics::histogram!($name, $($label_key => $label_val),*).record($val);
}
#[cfg(not(feature = "observability"))]
{
$(let _ = ($label_key, $label_val);)*
let _ = ($name, $val);
}
};
}
/// Increment a gauge by 1. No-op when `observability` is disabled.
macro_rules! observe_gauge_inc {
($name:expr) => {
#[cfg(feature = "observability")]
{
::metrics::gauge!($name).increment(1.0);
}
#[cfg(not(feature = "observability"))]
{
let _ = $name;
}
};
}
/// Decrement a gauge by 1. No-op when `observability` is disabled.
macro_rules! observe_gauge_dec {
($name:expr) => {
#[cfg(feature = "observability")]
{
::metrics::gauge!($name).decrement(1.0);
}
#[cfg(not(feature = "observability"))]
{
let _ = $name;
}
};
}
/// Create a tracing span. No-op when `observability` is disabled.
/// Returns an `Option<tracing::span::EnteredSpan>` when enabled, `()` when disabled.
macro_rules! observe_span {
($name:expr, $($field_key:ident = $field_val:expr),* $(,)?) => {
#[cfg(feature = "observability")]
let _obs_span = {
let _span = ::tracing::info_span!($name, $($field_key = $field_val),*);
Some(_span.entered())
};
#[cfg(not(feature = "observability"))]
let _obs_span: () = {
$(let _ = $field_val;)*
let _ = $name;
};
};
}
/// Start a timer. Returns `Option<std::time::Instant>` when enabled, `()` when disabled.
macro_rules! observe_timer_start {
() => {{
#[cfg(feature = "observability")]
{
Some(std::time::Instant::now())
}
#[cfg(not(feature = "observability"))]
{
None::<std::time::Instant>
}
}};
}
/// Record elapsed time from a timer into a histogram. No-op when disabled.
macro_rules! observe_timer_record {
($timer:expr, $name:expr, $($label_key:expr => $label_val:expr),* $(,)?) => {
#[cfg(feature = "observability")]
{
if let Some(start) = $timer {
let elapsed = start.elapsed().as_secs_f64();
::metrics::histogram!($name, $($label_key => $label_val),*).record(elapsed);
}
}
#[cfg(not(feature = "observability"))]
{
let _ = ($timer, $name);
$(let _ = ($label_key, $label_val);)*
}
};
}