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