spring_opentelemetry/
trace.rs1mod grpc;
2mod http;
3
4pub use crate::trace::grpc::GrpcLayer;
5pub use crate::trace::http::HttpLayer;
6
7use std::env::VarError;
8
9#[derive(Clone, Copy, Debug)]
11enum SpanKind {
12 Client,
14 Server,
16}
17
18impl SpanKind {
19 fn capture_request_headers(&self) -> Vec<String> {
21 let var = match self {
22 Self::Client => "OTEL_INSTRUMENTATION_HTTP_CLIENT_CAPTURE_REQUEST_HEADERS",
23 Self::Server => "OTEL_INSTRUMENTATION_HTTP_SERVER_CAPTURE_REQUEST_HEADERS",
24 };
25 Self::split_env_headers_value(var)
26 }
27
28 fn capture_response_headers(&self) -> Vec<String> {
30 let var = match self {
31 Self::Client => "OTEL_INSTRUMENTATION_HTTP_CLIENT_CAPTURE_RESPONSE_HEADERS",
32 Self::Server => "OTEL_INSTRUMENTATION_HTTP_SERVER_CAPTURE_RESPONSE_HEADERS",
33 };
34 Self::split_env_headers_value(var)
35 }
36
37 #[inline]
38 fn split_env_headers_value(var: &str) -> Vec<String> {
39 match std::env::var(var) {
40 Ok(headers) => headers
41 .split(",")
42 .map(|s| s.trim().to_lowercase())
43 .collect(),
44 Err(e) => {
45 if let VarError::NotUnicode(value) = e {
46 tracing::warn!("{var} contains invalid unicode data:{value:?}")
47 }
48 vec![]
49 }
50 }
51 }
52}