Skip to main content

commonware_runtime/telemetry/traces/
mod.rs

1//! Utility functions for traces
2
3pub mod status;
4
5#[cfg(any(test, feature = "test-utils"))]
6pub mod collector;
7
8/// Records an integer as a numeric tracing field.
9///
10/// `tracing-opentelemetry` serializes `u64` and `Display`/`Debug` span fields as
11/// strings, so integers must be recorded as `i64` to stay range-queryable and
12/// correctly sorted in TraceQL. Record integer fields as `field = value.traced()`.
13pub trait TracedExt {
14    /// Returns `self` as an `i64` for use as a tracing field value.
15    fn traced(self) -> i64;
16}
17
18macro_rules! impl_traced {
19    ($($ty:ty),+ $(,)?) => {
20        $(
21            impl TracedExt for $ty {
22                fn traced(self) -> i64 {
23                    i64::try_from(self).unwrap_or(i64::MAX)
24                }
25            }
26        )+
27    };
28}
29
30macro_rules! impl_traced_signed {
31    ($($ty:ty),+ $(,)?) => {
32        $(
33            impl TracedExt for $ty {
34                fn traced(self) -> i64 {
35                    i64::try_from(self).unwrap_or(if self < 0 {
36                        i64::MIN
37                    } else {
38                        i64::MAX
39                    })
40                }
41            }
42        )+
43    };
44}
45
46impl_traced!(u8, u16, u32, u64, u128, usize);
47impl_traced_signed!(i8, i16, i32, i64, i128, isize);