@@ -40,23 +40,23 @@ impl OtelConfig {
40
40
self . logs_endpoint . clone ( ) . unwrap_or_else ( || {
41
41
self . observability_endpoint
42
42
. clone ( )
43
- . unwrap_or_else ( || self . default_endpoint ( ) . to_string ( ) )
43
+ . unwrap_or_else ( || self . default_endpoint ( OtelSignal :: Logs ) )
44
44
} )
45
45
}
46
46
47
47
pub fn metrics_endpoint ( & self ) -> String {
48
48
self . metrics_endpoint . clone ( ) . unwrap_or_else ( || {
49
49
self . observability_endpoint
50
50
. clone ( )
51
- . unwrap_or_else ( || self . default_endpoint ( ) . to_string ( ) )
51
+ . unwrap_or_else ( || self . default_endpoint ( OtelSignal :: Metrics ) )
52
52
} )
53
53
}
54
54
55
55
pub fn traces_endpoint ( & self ) -> String {
56
56
self . traces_endpoint . clone ( ) . unwrap_or_else ( || {
57
57
self . observability_endpoint
58
58
. clone ( )
59
- . unwrap_or_else ( || self . default_endpoint ( ) . to_string ( ) )
59
+ . unwrap_or_else ( || self . default_endpoint ( OtelSignal :: Traces ) )
60
60
} )
61
61
}
62
62
@@ -72,10 +72,20 @@ impl OtelConfig {
72
72
self . enable_traces . unwrap_or ( self . enable_observability )
73
73
}
74
74
75
- fn default_endpoint ( & self ) -> & str {
75
+ fn default_endpoint ( & self , signal : OtelSignal ) -> String {
76
76
match self . protocol {
77
- OtelProtocol :: Grpc => OTEL_EXPORTER_OTLP_GRPC_ENDPOINT_DEFAULT ,
78
- OtelProtocol :: Http => OTEL_EXPORTER_OTLP_HTTP_ENDPOINT_DEFAULT ,
77
+ // gRPC endpoint does not include any signal specific path components.
78
+ OtelProtocol :: Grpc => OTEL_EXPORTER_OTLP_GRPC_ENDPOINT_DEFAULT . to_string ( ) ,
79
+ // http endpoint includes a signal-specific path component.
80
+ OtelProtocol :: Http => match signal {
81
+ OtelSignal :: Traces => {
82
+ format ! ( "{}/v1/traces" , OTEL_EXPORTER_OTLP_HTTP_ENDPOINT_DEFAULT )
83
+ }
84
+ OtelSignal :: Metrics => {
85
+ format ! ( "{}/v1/metrics" , OTEL_EXPORTER_OTLP_HTTP_ENDPOINT_DEFAULT )
86
+ }
87
+ OtelSignal :: Logs => format ! ( "{}/v1/logs" , OTEL_EXPORTER_OTLP_HTTP_ENDPOINT_DEFAULT ) ,
88
+ } ,
79
89
}
80
90
}
81
91
}
@@ -86,6 +96,13 @@ pub enum OtelProtocol {
86
96
Http ,
87
97
}
88
98
99
+ // Represents https://opentelemetry.io/docs/concepts/signals/
100
+ enum OtelSignal {
101
+ Traces ,
102
+ Metrics ,
103
+ Logs ,
104
+ }
105
+
89
106
impl Default for OtelProtocol {
90
107
fn default ( ) -> Self {
91
108
Self :: Http
0 commit comments