Skip to main content

micromegas_tracing/event/
sink.rs

1use std::{fmt, sync::Arc};
2
3#[cfg(not(target_arch = "wasm32"))]
4use crate::images::{ImageBlock, ImageStream};
5use crate::{
6    logs::{LogBlock, LogMetadata, LogStream},
7    metrics::{MetricsBlock, MetricsStream},
8    prelude::*,
9    property_set::Property,
10    spans::{ThreadBlock, ThreadStream},
11};
12
13pub type BoxedEventSink = Box<dyn EventSink>;
14
15/// interface needed by the dispatch module to send out telemetry
16pub trait EventSink: Send + Sync {
17    fn on_startup(&self, process_info: Arc<ProcessInfo>);
18    fn on_shutdown(&self);
19
20    fn on_log_enabled(&self, metadata: &LogMetadata) -> bool;
21    fn on_log(
22        &self,
23        desc: &LogMetadata,
24        properties: &[Property],
25        time: i64,
26        args: fmt::Arguments<'_>,
27    );
28    fn on_init_log_stream(&self, log_stream: &LogStream);
29    fn on_process_log_block(&self, log_block: Arc<LogBlock>);
30
31    fn on_init_metrics_stream(&self, metrics_stream: &MetricsStream);
32    fn on_process_metrics_block(&self, metrics_block: Arc<MetricsBlock>);
33
34    fn on_init_thread_stream(&self, thread_stream: &ThreadStream);
35    fn on_process_thread_block(&self, thread_block: Arc<ThreadBlock>);
36
37    fn is_busy(&self) -> bool; // sink is busy writing to disk or network, avoid extra flushing
38
39    #[cfg(not(target_arch = "wasm32"))]
40    fn on_init_image_stream(&self, _stream: &ImageStream) {}
41    #[cfg(not(target_arch = "wasm32"))]
42    fn on_process_image_block(&self, _block: Arc<ImageBlock>) {}
43}
44
45/// for tests where the data can be dropped
46pub struct NullEventSink {}
47
48impl EventSink for NullEventSink {
49    fn on_startup(&self, _: Arc<ProcessInfo>) {}
50    fn on_shutdown(&self) {}
51
52    fn on_log_enabled(&self, _: &LogMetadata) -> bool {
53        false
54    }
55    fn on_log(
56        &self,
57        _desc: &LogMetadata,
58        _properties: &[Property],
59        _time: i64,
60        _args: fmt::Arguments<'_>,
61    ) {
62    }
63    fn on_init_log_stream(&self, _: &LogStream) {}
64    fn on_process_log_block(&self, _: Arc<LogBlock>) {}
65
66    fn on_init_metrics_stream(&self, _: &MetricsStream) {}
67    fn on_process_metrics_block(&self, _: Arc<MetricsBlock>) {}
68
69    fn on_init_thread_stream(&self, _: &ThreadStream) {}
70    fn on_process_thread_block(&self, _: Arc<ThreadBlock>) {}
71
72    fn is_busy(&self) -> bool {
73        false
74    }
75}