use std::time::Instant;
use tracing::{Level, Span};
use super::tracing_config::TracingConfig;
macro_rules! dynamic_span {
($level:expr, $name:expr $(, $($field:tt)*)?) => {
match $level {
Level::ERROR => tracing::error_span!($name $(, $($field)*)?),
Level::WARN => tracing::warn_span!($name $(, $($field)*)?),
Level::INFO => tracing::info_span!($name $(, $($field)*)?),
Level::DEBUG => tracing::debug_span!($name $(, $($field)*)?),
Level::TRACE => tracing::trace_span!($name $(, $($field)*)?),
}
};
}
#[expect(
clippy::cognitive_complexity,
reason = "complexity from dynamic_span! macro expansion — five match arms are inherent"
)]
pub(crate) fn connect_span(config: &TracingConfig, peer_addr: &str) -> Span {
dynamic_span!(
config.connect_level,
"client.connect",
peer.addr = peer_addr
)
}
#[expect(
clippy::cognitive_complexity,
reason = "complexity from dynamic_span! macro expansion"
)]
pub(crate) fn send_span(config: &TracingConfig, frame_bytes: usize) -> Span {
dynamic_span!(config.send_level, "client.send", frame.bytes = frame_bytes)
}
#[expect(
clippy::cognitive_complexity,
reason = "complexity from dynamic_span! macro expansion"
)]
pub(crate) fn receive_span(config: &TracingConfig) -> Span {
dynamic_span!(
config.receive_level,
"client.receive",
frame.bytes = tracing::field::Empty,
result = tracing::field::Empty
)
}
#[expect(
clippy::cognitive_complexity,
reason = "complexity from dynamic_span! macro expansion"
)]
pub(crate) fn send_envelope_span(
config: &TracingConfig,
correlation_id: u64,
frame_bytes: usize,
) -> Span {
dynamic_span!(
config.send_level,
"client.send_envelope",
correlation_id = correlation_id,
frame.bytes = frame_bytes
)
}
#[expect(
clippy::cognitive_complexity,
reason = "complexity from dynamic_span! macro expansion"
)]
pub(crate) fn call_span(config: &TracingConfig) -> Span {
dynamic_span!(
config.call_level,
"client.call",
result = tracing::field::Empty
)
}
#[expect(
clippy::cognitive_complexity,
reason = "complexity from dynamic_span! macro expansion"
)]
pub(crate) fn call_correlated_span(config: &TracingConfig) -> Span {
dynamic_span!(
config.call_level,
"client.call_correlated",
correlation_id = tracing::field::Empty,
result = tracing::field::Empty
)
}
#[expect(
clippy::cognitive_complexity,
reason = "complexity from dynamic_span! macro expansion"
)]
pub(crate) fn streaming_span(config: &TracingConfig, correlation_id: u64) -> Span {
dynamic_span!(
config.streaming_level,
"client.call_streaming",
correlation_id = correlation_id,
frame.bytes = tracing::field::Empty
)
}
#[expect(
clippy::cognitive_complexity,
reason = "complexity from dynamic_span! macro expansion"
)]
pub(crate) fn close_span(config: &TracingConfig) -> Span {
dynamic_span!(config.close_level, "client.close")
}
pub(crate) fn emit_timing_event(start: Option<Instant>) {
if let Some(start) = start {
let elapsed_us = start.elapsed().as_micros();
tracing::debug!(elapsed_us = elapsed_us, "operation.timing");
}
}