Skip to content

Commit cc331ad

Browse files
authored
Merge branch 'main' into pipeline-metrics-internal-log
2 parents 2154a16 + 4a405fd commit cc331ad

File tree

29 files changed

+213
-201
lines changed

29 files changed

+213
-201
lines changed

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ For a deeper discussion, see:
140140

141141
Currently, the Opentelemetry Rust SDK has two ways to handle errors. In the situation where errors are not allowed to return. One should call global error handler to process the errors. Otherwise, one should return the errors.
142142

143-
The Opentelemetry Rust SDK comes with an error type `opentelemetry::Error`. For different function, one error has been defined. All error returned by trace module MUST be wrapped in `opentelemetry::trace::TraceError`. All errors returned by metrics module MUST be wrapped in `opentelemetry::metrics::MetricsError`. All errors returned by logs module MUST be wrapped in `opentelemetry::logs::LogsError`.
143+
The Opentelemetry Rust SDK comes with an error type `opentelemetry::Error`. For different function, one error has been defined. All error returned by trace module MUST be wrapped in `opentelemetry::trace::TraceError`. All errors returned by metrics module MUST be wrapped in `opentelemetry::metrics::MetricError`. All errors returned by logs module MUST be wrapped in `opentelemetry::logs::LogsError`.
144144

145145
For users that want to implement their own exporters. It's RECOMMENDED to wrap all errors from the exporter into a crate-level error type, and implement `ExporterError` trait.
146146

opentelemetry-jaeger-propagator/src/propagator.rs

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
use opentelemetry::propagation::PropagationError;
21
use opentelemetry::{
3-
global::{self, Error},
2+
otel_warn,
43
propagation::{text_map_propagator::FieldIter, Extractor, Injector, TextMapPropagator},
5-
trace::{SpanContext, SpanId, TraceContextExt, TraceError, TraceFlags, TraceId, TraceState},
4+
trace::{SpanContext, SpanId, TraceContextExt, TraceFlags, TraceId, TraceState},
65
Context,
76
};
87
use std::borrow::Cow;
@@ -82,10 +81,11 @@ impl Propagator {
8281

8382
let parts = header_value.split_terminator(':').collect::<Vec<&str>>();
8483
if parts.len() != 4 {
85-
global::handle_error(Error::Propagation(PropagationError::extract(
86-
"invalid jaeger header format",
87-
"JaegerPropagator",
88-
)));
84+
otel_warn!(
85+
name: "JaegerPropagator.InvalidHeader",
86+
message = "Invalid jaeger header format",
87+
header_value = header_value.to_string(),
88+
);
8989
return None;
9090
}
9191

@@ -100,10 +100,11 @@ impl Propagator {
100100
Some(SpanContext::new(trace_id, span_id, flags, true, state))
101101
}
102102
_ => {
103-
global::handle_error(Error::Propagation(PropagationError::extract(
104-
"invalid jaeger header format",
105-
"JaegerPropagator",
106-
)));
103+
otel_warn!(
104+
name: "JaegerPropagator.InvalidHeader",
105+
message = "Invalid jaeger header format",
106+
header_value = header_value.to_string(),
107+
);
107108
None
108109
}
109110
}
@@ -171,7 +172,11 @@ impl Propagator {
171172
match TraceState::from_key_value(baggage_keys) {
172173
Ok(trace_state) => Ok(trace_state),
173174
Err(trace_state_err) => {
174-
global::handle_error(Error::Trace(TraceError::Other(Box::new(trace_state_err))));
175+
otel_warn!(
176+
name: "JaegerPropagator.InvalidTraceState",
177+
message = "Invalid trace state",
178+
reason = format!("{:?}", trace_state_err),
179+
);
175180
Err(()) //todo: assign an error type instead of using ()
176181
}
177182
}

opentelemetry-otlp/examples/basic-otlp-http/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use once_cell::sync::Lazy;
22
use opentelemetry::{
33
global,
4-
metrics::MetricsError,
4+
metrics::MetricError,
55
trace::{TraceContextExt, TraceError, Tracer},
66
InstrumentationScope, KeyValue,
77
};
@@ -65,7 +65,7 @@ fn init_tracer_provider() -> Result<sdktrace::TracerProvider, TraceError> {
6565
.build())
6666
}
6767

68-
fn init_metrics() -> Result<opentelemetry_sdk::metrics::SdkMeterProvider, MetricsError> {
68+
fn init_metrics() -> Result<opentelemetry_sdk::metrics::SdkMeterProvider, MetricError> {
6969
let exporter = MetricsExporter::builder()
7070
.with_http()
7171
.with_protocol(Protocol::HttpBinary) //can be changed to `Protocol::HttpJson` to export in JSON format

opentelemetry-otlp/examples/basic-otlp/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use once_cell::sync::Lazy;
22
use opentelemetry::logs::LogError;
3-
use opentelemetry::metrics::MetricsError;
3+
use opentelemetry::metrics::MetricError;
44
use opentelemetry::trace::{TraceContextExt, TraceError, Tracer};
55
use opentelemetry::KeyValue;
66
use opentelemetry::{global, InstrumentationScope};
@@ -33,7 +33,7 @@ fn init_tracer_provider() -> Result<sdktrace::TracerProvider, TraceError> {
3333
.build())
3434
}
3535

36-
fn init_metrics() -> Result<opentelemetry_sdk::metrics::SdkMeterProvider, MetricsError> {
36+
fn init_metrics() -> Result<opentelemetry_sdk::metrics::SdkMeterProvider, MetricError> {
3737
let exporter = MetricsExporter::builder().with_tonic().build()?;
3838

3939
let reader = PeriodicReader::builder(exporter, runtime::Tokio).build();

opentelemetry-otlp/src/exporter/http/metrics.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::sync::Arc;
22

33
use async_trait::async_trait;
44
use http::{header::CONTENT_TYPE, Method};
5-
use opentelemetry::metrics::{MetricsError, Result};
5+
use opentelemetry::metrics::{MetricError, MetricResult};
66
use opentelemetry_sdk::metrics::data::ResourceMetrics;
77

88
use crate::{metric::MetricsClient, Error};
@@ -11,14 +11,14 @@ use super::OtlpHttpClient;
1111

1212
#[async_trait]
1313
impl MetricsClient for OtlpHttpClient {
14-
async fn export(&self, metrics: &mut ResourceMetrics) -> Result<()> {
14+
async fn export(&self, metrics: &mut ResourceMetrics) -> MetricResult<()> {
1515
let client = self
1616
.client
1717
.lock()
1818
.map_err(Into::into)
1919
.and_then(|g| match &*g {
2020
Some(client) => Ok(Arc::clone(client)),
21-
_ => Err(MetricsError::Other("exporter is already shut down".into())),
21+
_ => Err(MetricError::Other("exporter is already shut down".into())),
2222
})?;
2323

2424
let (body, content_type) = self.build_metrics_export_body(metrics)?;
@@ -36,12 +36,12 @@ impl MetricsClient for OtlpHttpClient {
3636
client
3737
.send(request)
3838
.await
39-
.map_err(|e| MetricsError::ExportErr(Box::new(Error::RequestFailed(e))))?;
39+
.map_err(|e| MetricError::ExportErr(Box::new(Error::RequestFailed(e))))?;
4040

4141
Ok(())
4242
}
4343

44-
fn shutdown(&self) -> Result<()> {
44+
fn shutdown(&self) -> MetricResult<()> {
4545
let _ = self.client.lock()?.take();
4646

4747
Ok(())

opentelemetry-otlp/src/exporter/http/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ impl HttpExporterBuilder {
221221
pub fn build_metrics_exporter(
222222
mut self,
223223
temporality: opentelemetry_sdk::metrics::data::Temporality,
224-
) -> opentelemetry::metrics::Result<crate::MetricsExporter> {
224+
) -> opentelemetry::metrics::MetricResult<crate::MetricsExporter> {
225225
use crate::{
226226
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT, OTEL_EXPORTER_OTLP_METRICS_HEADERS,
227227
OTEL_EXPORTER_OTLP_METRICS_TIMEOUT,
@@ -311,7 +311,7 @@ impl OtlpHttpClient {
311311
fn build_metrics_export_body(
312312
&self,
313313
metrics: &mut opentelemetry_sdk::metrics::data::ResourceMetrics,
314-
) -> opentelemetry::metrics::Result<(Vec<u8>, &'static str)> {
314+
) -> opentelemetry::metrics::MetricResult<(Vec<u8>, &'static str)> {
315315
use opentelemetry_proto::tonic::collector::metrics::v1::ExportMetricsServiceRequest;
316316

317317
let req: ExportMetricsServiceRequest = (&*metrics).into();
@@ -320,7 +320,7 @@ impl OtlpHttpClient {
320320
#[cfg(feature = "http-json")]
321321
Protocol::HttpJson => match serde_json::to_string_pretty(&req) {
322322
Ok(json) => Ok((json.into(), "application/json")),
323-
Err(e) => Err(opentelemetry::metrics::MetricsError::Other(e.to_string())),
323+
Err(e) => Err(opentelemetry::metrics::MetricError::Other(e.to_string())),
324324
},
325325
_ => Ok((req.encode_to_vec(), "application/x-protobuf")),
326326
}

opentelemetry-otlp/src/exporter/tonic/metrics.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use core::fmt;
22
use std::sync::Mutex;
33

44
use async_trait::async_trait;
5-
use opentelemetry::metrics::{MetricsError, Result};
5+
use opentelemetry::metrics::{MetricError, MetricResult};
66
use opentelemetry_proto::tonic::collector::metrics::v1::{
77
metrics_service_client::MetricsServiceClient, ExportMetricsServiceRequest,
88
};
@@ -51,7 +51,7 @@ impl TonicMetricsClient {
5151

5252
#[async_trait]
5353
impl MetricsClient for TonicMetricsClient {
54-
async fn export(&self, metrics: &mut ResourceMetrics) -> Result<()> {
54+
async fn export(&self, metrics: &mut ResourceMetrics) -> MetricResult<()> {
5555
let (mut client, metadata, extensions) =
5656
self.inner
5757
.lock()
@@ -62,14 +62,14 @@ impl MetricsClient for TonicMetricsClient {
6262
.interceptor
6363
.call(Request::new(()))
6464
.map_err(|e| {
65-
MetricsError::Other(format!(
65+
MetricError::Other(format!(
6666
"unexpected status while exporting {e:?}"
6767
))
6868
})?
6969
.into_parts();
7070
Ok((inner.client.clone(), m, e))
7171
}
72-
None => Err(MetricsError::Other("exporter is already shut down".into())),
72+
None => Err(MetricError::Other("exporter is already shut down".into())),
7373
})?;
7474

7575
client
@@ -84,7 +84,7 @@ impl MetricsClient for TonicMetricsClient {
8484
Ok(())
8585
}
8686

87-
fn shutdown(&self) -> Result<()> {
87+
fn shutdown(&self) -> MetricResult<()> {
8888
let _ = self.inner.lock()?.take();
8989

9090
Ok(())

opentelemetry-otlp/src/exporter/tonic/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ impl TonicExporterBuilder {
274274
pub(crate) fn build_metrics_exporter(
275275
self,
276276
temporality: opentelemetry_sdk::metrics::data::Temporality,
277-
) -> opentelemetry::metrics::Result<crate::MetricsExporter> {
277+
) -> opentelemetry::metrics::MetricResult<crate::MetricsExporter> {
278278
use crate::MetricsExporter;
279279
use metrics::TonicMetricsClient;
280280

opentelemetry-otlp/src/metric.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use crate::NoExporterBuilderSet;
1616

1717
use async_trait::async_trait;
1818
use core::fmt;
19-
use opentelemetry::metrics::Result;
19+
use opentelemetry::metrics::MetricResult;
2020

2121
use opentelemetry_sdk::metrics::{
2222
data::{ResourceMetrics, Temporality},
@@ -77,15 +77,15 @@ impl<C> MetricsExporterBuilder<C> {
7777

7878
#[cfg(feature = "grpc-tonic")]
7979
impl MetricsExporterBuilder<TonicExporterBuilderSet> {
80-
pub fn build(self) -> Result<MetricsExporter> {
80+
pub fn build(self) -> MetricResult<MetricsExporter> {
8181
let exporter = self.client.0.build_metrics_exporter(self.temporality)?;
8282
Ok(exporter)
8383
}
8484
}
8585

8686
#[cfg(any(feature = "http-proto", feature = "http-json"))]
8787
impl MetricsExporterBuilder<HttpExporterBuilderSet> {
88-
pub fn build(self) -> Result<MetricsExporter> {
88+
pub fn build(self) -> MetricResult<MetricsExporter> {
8989
let exporter = self.client.0.build_metrics_exporter(self.temporality)?;
9090
Ok(exporter)
9191
}
@@ -122,8 +122,8 @@ impl HasHttpConfig for MetricsExporterBuilder<HttpExporterBuilderSet> {
122122
/// An interface for OTLP metrics clients
123123
#[async_trait]
124124
pub trait MetricsClient: fmt::Debug + Send + Sync + 'static {
125-
async fn export(&self, metrics: &mut ResourceMetrics) -> Result<()>;
126-
fn shutdown(&self) -> Result<()>;
125+
async fn export(&self, metrics: &mut ResourceMetrics) -> MetricResult<()>;
126+
fn shutdown(&self) -> MetricResult<()>;
127127
}
128128

129129
/// Export metrics in OTEL format.
@@ -140,16 +140,16 @@ impl Debug for MetricsExporter {
140140

141141
#[async_trait]
142142
impl PushMetricsExporter for MetricsExporter {
143-
async fn export(&self, metrics: &mut ResourceMetrics) -> Result<()> {
143+
async fn export(&self, metrics: &mut ResourceMetrics) -> MetricResult<()> {
144144
self.client.export(metrics).await
145145
}
146146

147-
async fn force_flush(&self) -> Result<()> {
147+
async fn force_flush(&self) -> MetricResult<()> {
148148
// this component is stateless
149149
Ok(())
150150
}
151151

152-
fn shutdown(&self) -> Result<()> {
152+
fn shutdown(&self) -> MetricResult<()> {
153153
self.client.shutdown()
154154
}
155155

opentelemetry-proto/src/transform/metrics.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ pub mod tonic {
88
use std::any::Any;
99
use std::fmt;
1010

11-
use opentelemetry::{global, metrics::MetricsError, Key, Value};
11+
use opentelemetry::{otel_debug, Key, Value};
1212
use opentelemetry_sdk::metrics::data::{
1313
self, Exemplar as SdkExemplar, ExponentialHistogram as SdkExponentialHistogram,
1414
Gauge as SdkGauge, Histogram as SdkHistogram, Metric as SdkMetric,
@@ -97,10 +97,12 @@ pub mod tonic {
9797
Temporality::Cumulative => AggregationTemporality::Cumulative,
9898
Temporality::Delta => AggregationTemporality::Delta,
9999
other => {
100-
opentelemetry::global::handle_error(MetricsError::Other(format!(
101-
"Unknown temporality {:?}, using default instead.",
102-
other
103-
)));
100+
otel_debug!(
101+
name: "AggregationTemporality::Unknown",
102+
message = "Unknown temporality,using default instead.",
103+
unknown_temporality = format!("{:?}", other),
104+
default_temporality = format!("{:?}", Temporality::Cumulative)
105+
);
104106
AggregationTemporality::Cumulative
105107
}
106108
}
@@ -184,7 +186,11 @@ pub mod tonic {
184186
} else if let Some(gauge) = data.downcast_ref::<SdkGauge<f64>>() {
185187
Ok(TonicMetricData::Gauge(gauge.into()))
186188
} else {
187-
global::handle_error(MetricsError::Other("unknown aggregator".into()));
189+
otel_debug!(
190+
name: "TonicMetricData::UnknownAggregator",
191+
message= "Unknown aggregator type",
192+
unknown_type= format!("{:?}", data),
193+
);
188194
Err(())
189195
}
190196
}

0 commit comments

Comments
 (0)