Files
agentic-pd-hybrid/third_party/sglang/sgl-model-gateway/src/observability/events.rs

91 lines
2.2 KiB
Rust

//! 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::<RequestReceivedEvent>(), 0);
assert_eq!(size_of::<RequestSentEvent>(), 16);
assert_eq!(size_of::<RequestPDSentEvent>(), 32);
}
}