statsig_rust/console_capture/
console_capture_handler.rs

1use std::collections::HashMap;
2use std::sync::Arc;
3
4use crate::console_capture::console_log_line_levels::StatsigLogLineLevel;
5use crate::event_logging::event_logger::EventLogger;
6use crate::event_logging::event_queue::queued_passthrough::EnqueuePassthroughOp;
7use crate::event_logging::statsig_event_internal::StatsigEventInternal;
8use crate::observability::console_capture_observer::ConsoleCaptureEvent;
9
10pub struct ConsoleCaptureHandler {
11    event_logger: Arc<EventLogger>,
12}
13
14impl ConsoleCaptureHandler {
15    pub fn new(event_logger: Arc<EventLogger>) -> Self {
16        Self { event_logger }
17    }
18
19    pub fn handle_console_capture_event(&self, event: ConsoleCaptureEvent) {
20        let log_level = StatsigLogLineLevel::from_string(&event.level);
21        let Some(log_level) = log_level else {
22            return;
23        };
24
25        let metadata = event.stack_trace.map(|stack_trace| {
26            let mut map = HashMap::new();
27            map.insert("trace".to_string(), stack_trace);
28            map
29        });
30
31        self.event_logger.enqueue(EnqueuePassthroughOp {
32            event: StatsigEventInternal::new_statsig_log_line_event(
33                event.user,
34                log_level,
35                Some(event.payload.join(" ")),
36                metadata,
37                Some(event.timestamp),
38            ),
39        });
40    }
41}