//! Request events for observability and monitoring. //! //! Events use DEBUG level when OTEL is disabled, INFO when enabled. use tracing::{debug, event, Level}; use super::otel_trace::is_otel_enabled; /// Module path used by CustomOtelFilter to identify events for OTEL export. #[inline] pub const fn get_module_path() -> &'static str { "smg::observability::events" } pub trait Event { fn emit(&self); } /// Event emitted when a prefill-decode request pair is sent. #[derive(Debug, Clone, Copy)] pub struct RequestPDSentEvent<'a> { pub prefill_url: &'a str, pub decode_url: &'a str, } impl Event for RequestPDSentEvent<'_> { #[inline] fn emit(&self) { if is_otel_enabled() { event!( Level::INFO, prefill_url = %self.prefill_url, decode_url = %self.decode_url, "Sending concurrent requests" ); } else { debug!( prefill_url = %self.prefill_url, decode_url = %self.decode_url, "Sending concurrent requests" ); } } } /// Event emitted when a request is sent to a worker. #[derive(Debug, Clone, Copy)] pub struct RequestSentEvent<'a> { pub url: &'a str, } impl Event for RequestSentEvent<'_> { #[inline] fn emit(&self) { if is_otel_enabled() { event!(Level::INFO, url = %self.url, "Sending request"); } else { debug!(url = %self.url, "Sending request"); } } } /// Event emitted when concurrent requests are received. #[derive(Debug, Clone, Copy)] pub struct RequestReceivedEvent; impl Event for RequestReceivedEvent { #[inline] fn emit(&self) { if is_otel_enabled() { event!(Level::INFO, "Received concurrent requests"); } else { debug!("Received concurrent requests"); } } } #[cfg(test)] mod tests { use std::mem::size_of; use super::*; #[test] fn test_event_sizes() { assert_eq!(size_of::(), 0); assert_eq!(size_of::(), 16); assert_eq!(size_of::(), 32); } }