1use mz_ore::tracing::TracingHandle;
11use serde::{Deserialize, Serialize};
12use tracing::warn;
13
14use crate::{CloneableEnvFilter, SerializableDirective};
15
16#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
18pub struct TracingParameters {
19 pub log_filter: Option<CloneableEnvFilter>,
21 pub opentelemetry_filter: Option<CloneableEnvFilter>,
23 pub log_filter_defaults: Vec<SerializableDirective>,
25 pub opentelemetry_filter_defaults: Vec<SerializableDirective>,
27 pub sentry_filters: Vec<SerializableDirective>,
29}
30
31impl TracingParameters {
32 pub fn apply(&self, tracing_handle: &TracingHandle) {
33 if let Some(filter) = &self.log_filter {
34 if let Err(e) = tracing_handle.reload_stderr_log_filter(
35 filter.clone().into(),
36 self.log_filter_defaults
37 .iter()
38 .map(|d| d.clone().into())
39 .collect(),
40 ) {
41 warn!(
42 "unable to apply stderr log filter: {:?}. filter={}, defaults={:?}",
43 e, filter, self.log_filter_defaults
44 );
45 }
46 }
47 if let Some(filter) = &self.opentelemetry_filter {
48 if let Err(e) = tracing_handle.reload_opentelemetry_filter(
49 filter.clone().into(),
50 self.opentelemetry_filter_defaults
51 .iter()
52 .map(|d| d.clone().into())
53 .collect(),
54 ) {
55 warn!(
56 "unable to apply OpenTelemetry filter: {:?}. filter={}, defaults={:?}",
57 e, filter, self.opentelemetry_filter_defaults
58 );
59 }
60 }
61 if let Err(e) = tracing_handle.reload_sentry_directives(
62 self.sentry_filters
63 .iter()
64 .map(|d| d.clone().into())
65 .collect(),
66 ) {
67 warn!(
68 "unable to apply sentry directives: {:?}. directives={:?}",
69 e, self.sentry_filters
70 );
71 }
72 }
73
74 pub fn update(&mut self, other: Self) {
75 let Self {
76 log_filter,
77 opentelemetry_filter,
78 log_filter_defaults,
79 opentelemetry_filter_defaults,
80 sentry_filters,
81 } = self;
82
83 let Self {
84 log_filter: other_log_filter,
85 opentelemetry_filter: other_opentelemetry_filter,
86 log_filter_defaults: other_log_filter_defaults,
87 opentelemetry_filter_defaults: other_opentelemetry_filter_defaults,
88 sentry_filters: other_sentry_filters,
89 } = other;
90
91 if let Some(v) = other_log_filter {
92 *log_filter = Some(v);
93 }
94 if let Some(v) = other_opentelemetry_filter {
95 *opentelemetry_filter = Some(v);
96 }
97
98 *log_filter_defaults = other_log_filter_defaults;
99 *opentelemetry_filter_defaults = other_opentelemetry_filter_defaults;
100 *sentry_filters = other_sentry_filters;
101 }
102}