@@ -11,17 +11,14 @@ use super::{
11
11
} ;
12
12
use crate :: { abstractions:: dbg_panic, telemetry:: metrics:: DEFAULT_S_BUCKETS } ;
13
13
use opentelemetry:: {
14
- self , Key , KeyValue , Value , global ,
14
+ self , Key , KeyValue , Value ,
15
15
metrics:: { Meter , MeterProvider as MeterProviderT } ,
16
16
} ;
17
- use opentelemetry_otlp:: WithExportConfig ;
17
+ use opentelemetry_otlp:: { WithExportConfig , WithHttpConfig , WithTonicConfig } ;
18
18
use opentelemetry_sdk:: {
19
- Resource ,
20
19
metrics:: {
21
- Aggregation , Instrument , InstrumentKind , MeterProviderBuilder , PeriodicReader ,
22
- SdkMeterProvider , View , data:: Temporality , new_view, reader:: TemporalitySelector ,
23
- } ,
24
- runtime,
20
+ new_view, Temporality , Aggregation , Instrument , InstrumentKind , MeterProviderBuilder , MetricError , PeriodicReader , SdkMeterProvider , View
21
+ } , runtime, Resource
25
22
} ;
26
23
use std:: { collections:: HashMap , net:: SocketAddr , sync:: Arc , time:: Duration } ;
27
24
use temporal_sdk_core_api:: telemetry:: {
@@ -35,10 +32,13 @@ use temporal_sdk_core_api::telemetry::{
35
32
use tokio:: task:: AbortHandle ;
36
33
use tonic:: { metadata:: MetadataMap , transport:: ClientTlsConfig } ;
37
34
35
+ /// A specialized `Result` type for metric operations.
36
+ type Result < T > = std:: result:: Result < T , MetricError > ;
37
+
38
38
fn histo_view (
39
39
metric_name : & ' static str ,
40
40
use_seconds : bool ,
41
- ) -> opentelemetry :: metrics :: Result < Box < dyn View > > {
41
+ ) -> Result < Box < dyn View > > {
42
42
let buckets = default_buckets_for ( metric_name, use_seconds) ;
43
43
new_view (
44
44
Instrument :: new ( ) . name ( format ! ( "*{metric_name}" ) ) ,
@@ -56,7 +56,7 @@ pub(super) fn augment_meter_provider_with_defaults(
56
56
global_tags : & HashMap < String , String > ,
57
57
use_seconds : bool ,
58
58
bucket_overrides : HistogramBucketOverrides ,
59
- ) -> opentelemetry :: metrics :: Result < MeterProviderBuilder > {
59
+ ) -> Result < MeterProviderBuilder > {
60
60
for ( name, buckets) in bucket_overrides. overrides {
61
61
mpb = mpb. with_view ( new_view (
62
62
Instrument :: new ( ) . name ( format ! ( "*{name}" ) ) ,
@@ -117,29 +117,27 @@ pub(super) fn augment_meter_provider_with_defaults(
117
117
/// Create an OTel meter that can be used as a [CoreMeter] to export metrics over OTLP.
118
118
pub fn build_otlp_metric_exporter (
119
119
opts : OtelCollectorOptions ,
120
- ) -> Result < CoreOtelMeter , anyhow:: Error > {
121
- global:: set_error_handler ( |err| {
122
- tracing:: error!( "{}" , err) ;
123
- } ) ?;
120
+ ) -> std:: result:: Result < CoreOtelMeter , anyhow:: Error > {
124
121
let exporter = match opts. protocol {
125
122
OtlpProtocol :: Grpc => {
126
- let mut exporter = opentelemetry_otlp:: TonicExporterBuilder :: default ( )
123
+ let mut exporter = opentelemetry_otlp:: MetricExporter :: builder ( )
124
+ . with_tonic ( )
127
125
. with_endpoint ( opts. url . to_string ( ) ) ;
128
126
if opts. url . scheme ( ) == "https" || opts. url . scheme ( ) == "grpcs" {
129
127
exporter = exporter. with_tls_config ( ClientTlsConfig :: new ( ) . with_native_roots ( ) ) ;
130
128
}
131
129
exporter
132
130
. with_metadata ( MetadataMap :: from_headers ( ( & opts. headers ) . try_into ( ) ?) )
133
- . build_metrics_exporter ( Box :: new ( metric_temporality_to_selector (
131
+ . with_temporality ( metric_temporality_to_temporality (
134
132
opts. metric_temporality ,
135
- ) ) ) ?
133
+ ) ) . build ( ) ?
136
134
}
137
135
OtlpProtocol :: Http => opentelemetry_otlp:: HttpExporterBuilder :: default ( )
138
136
. with_endpoint ( opts. url . to_string ( ) )
139
137
. with_headers ( opts. headers )
140
- . build_metrics_exporter ( Box :: new ( metric_temporality_to_selector (
138
+ . build_metrics_exporter ( metric_temporality_to_temporality (
141
139
opts. metric_temporality ,
142
- ) ) ) ?,
140
+ ) ) ?,
143
141
} ;
144
142
let reader = PeriodicReader :: builder ( exporter, runtime:: Tokio )
145
143
. with_interval ( opts. metric_periodicity )
@@ -170,7 +168,7 @@ pub struct StartedPromServer {
170
168
/// Requires a Tokio runtime to exist, and will block briefly while binding the server endpoint.
171
169
pub fn start_prometheus_metric_exporter (
172
170
opts : PrometheusExporterOptions ,
173
- ) -> Result < StartedPromServer , anyhow:: Error > {
171
+ ) -> std :: result :: Result < StartedPromServer , anyhow:: Error > {
174
172
let ( srv, exporter) = PromServer :: new ( & opts) ?;
175
173
let meter_provider = augment_meter_provider_with_defaults (
176
174
MeterProviderBuilder :: default ( ) . with_reader ( exporter) ,
@@ -228,7 +226,7 @@ impl CoreMeter for CoreOtelMeter {
228
226
. u64_counter ( params. name )
229
227
. with_unit ( params. unit )
230
228
. with_description ( params. description )
231
- . init ( ) ,
229
+ . build ( ) ,
232
230
)
233
231
}
234
232
@@ -238,7 +236,7 @@ impl CoreMeter for CoreOtelMeter {
238
236
. u64_histogram ( params. name )
239
237
. with_unit ( params. unit )
240
238
. with_description ( params. description )
241
- . init ( ) ,
239
+ . build ( ) ,
242
240
)
243
241
}
244
242
@@ -248,7 +246,7 @@ impl CoreMeter for CoreOtelMeter {
248
246
. f64_histogram ( params. name )
249
247
. with_unit ( params. unit )
250
248
. with_description ( params. description )
251
- . init ( ) ,
249
+ . build ( ) ,
252
250
)
253
251
}
254
252
@@ -268,7 +266,7 @@ impl CoreMeter for CoreOtelMeter {
268
266
. u64_gauge ( params. name )
269
267
. with_unit ( params. unit )
270
268
. with_description ( params. description )
271
- . init ( ) ,
269
+ . build ( ) ,
272
270
)
273
271
}
274
272
@@ -278,7 +276,7 @@ impl CoreMeter for CoreOtelMeter {
278
276
. f64_gauge ( params. name )
279
277
. with_unit ( params. unit )
280
278
. with_description ( params. description )
281
- . init ( ) ,
279
+ . build ( ) ,
282
280
)
283
281
}
284
282
}
@@ -325,19 +323,10 @@ fn default_resource(override_values: &HashMap<String, String>) -> Resource {
325
323
. merge ( & Resource :: new ( override_kvs) )
326
324
}
327
325
328
- #[ derive( Clone ) ]
329
- struct ConstantTemporality ( Temporality ) ;
330
-
331
- impl TemporalitySelector for ConstantTemporality {
332
- fn temporality ( & self , _: InstrumentKind ) -> Temporality {
333
- self . 0
334
- }
335
- }
336
-
337
- fn metric_temporality_to_selector ( t : MetricTemporality ) -> impl TemporalitySelector + Clone {
326
+ fn metric_temporality_to_temporality ( t : MetricTemporality ) -> Temporality {
338
327
match t {
339
- MetricTemporality :: Cumulative => ConstantTemporality ( Temporality :: Cumulative ) ,
340
- MetricTemporality :: Delta => ConstantTemporality ( Temporality :: Delta ) ,
328
+ MetricTemporality :: Cumulative => Temporality :: Cumulative ,
329
+ MetricTemporality :: Delta => Temporality :: Delta ,
341
330
}
342
331
}
343
332
0 commit comments