Skip to content
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 31 additions & 22 deletions opentelemetry-sdk/src/trace/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
//! can be set for the default OpenTelemetry limits and Sampler.
use crate::trace::{span_limit::SpanLimits, IdGenerator, RandomIdGenerator, Sampler, ShouldSample};
use crate::Resource;
use opentelemetry::global::{handle_error, Error};
use opentelemetry::otel_warn;
use std::borrow::Cow;
use std::env;
use std::str::FromStr;
Expand Down Expand Up @@ -125,13 +125,14 @@
"always_on" => Box::new(Sampler::AlwaysOn),
"always_off" => Box::new(Sampler::AlwaysOff),
"traceidratio" => {
let ratio = sampler_arg.and_then(|r| r.parse::<f64>().ok());
let ratio = sampler_arg.as_ref().and_then(|r| r.parse::<f64>().ok());

Check warning on line 128 in opentelemetry-sdk/src/trace/config.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/config.rs#L128

Added line #L128 was not covered by tests
if let Some(r) = ratio {
Box::new(Sampler::TraceIdRatioBased(r))
} else {
handle_error(
Error::Other(String::from(
"Missing or invalid OTEL_TRACES_SAMPLER_ARG value. Falling back to default: 1.0"))
otel_warn!(

Check warning on line 132 in opentelemetry-sdk/src/trace/config.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/config.rs#L132

Added line #L132 was not covered by tests
name: "TracerProvider.Config.Sampler.InvalidArgument",
message = "OTEL_TRACES_SAMPLER is set to 'traceidratio' but OTEL_TRACES_SAMPLER_ARG environment variable is missing or invalid. OTEL_TRACES_SAMPLER_ARG must be a valid float between 0.0 and 1.0 representing the desired sampling probability (0.0 = no traces sampled, 1.0 = all traces sampled, 0.5 = 50% of traces sampled). Falling back to default ratio: 1.0 (100% sampling)",
otel_traces_sampler_arg = format!("{:?}", sampler_arg)

Check warning on line 135 in opentelemetry-sdk/src/trace/config.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/config.rs#L135

Added line #L135 was not covered by tests
);
Box::new(Sampler::TraceIdRatioBased(1.0))
}
Expand All @@ -143,43 +144,51 @@
Box::new(Sampler::ParentBased(Box::new(Sampler::AlwaysOff)))
}
"parentbased_traceidratio" => {
let ratio = sampler_arg.and_then(|r| r.parse::<f64>().ok());
let ratio = sampler_arg.as_ref().and_then(|r| r.parse::<f64>().ok());

Check warning on line 147 in opentelemetry-sdk/src/trace/config.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/config.rs#L147

Added line #L147 was not covered by tests
if let Some(r) = ratio {
Box::new(Sampler::ParentBased(Box::new(Sampler::TraceIdRatioBased(
r,
))))
} else {
handle_error(
Error::Other(String::from(
"Missing or invalid OTEL_TRACES_SAMPLER_ARG value. Falling back to default: 1.0"
)));
otel_warn!(

Check warning on line 153 in opentelemetry-sdk/src/trace/config.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/config.rs#L153

Added line #L153 was not covered by tests
name: "TracerProvider.Config.Sampler.InvalidArgument",
message = "OTEL_TRACES_SAMPLER is set to 'parentbased_traceidratio' but OTEL_TRACES_SAMPLER_ARG environment variable is missing or invalid. OTEL_TRACES_SAMPLER_ARG must be a valid float between 0.0 and 1.0 representing the desired sampling probability (0.0 = no traces sampled, 1.0 = all traces sampled, 0.5 = 50% of traces sampled). Falling back to default ratio: 1.0 (100% sampling)",
otel_traces_sampler_arg = format!("{:?}", sampler_arg)

Check warning on line 156 in opentelemetry-sdk/src/trace/config.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/config.rs#L156

Added line #L156 was not covered by tests
);
Box::new(Sampler::ParentBased(Box::new(Sampler::TraceIdRatioBased(
1.0,
))))
}
}
"parentbased_jaeger_remote" => {
handle_error(
Error::Other(String::from(
"Unimplemented parentbased_jaeger_remote sampler. Falling back to default: parentbased_always_on"
)));
otel_warn!(
name: "TracerProvider.Config.Sampler.Unsupported",
message = "OTEL_TRACES_SAMPLER is set to 'parentbased_jaeger_remote' which is not implemented in this SDK version. Using fallback sampler: ParentBased(AlwaysOn). Configure an alternative sampler using OTEL_TRACES_SAMPLER"
);

Check warning on line 167 in opentelemetry-sdk/src/trace/config.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/config.rs#L164-L167

Added lines #L164 - L167 were not covered by tests
Box::new(Sampler::ParentBased(Box::new(Sampler::AlwaysOn)))
}
"jaeger_remote" => {
handle_error(
Error::Other(String::from("Unimplemented jaeger_remote sampler. Falling back to default: parentbased_always_on")));
otel_warn!(
name: "TracerProvider.Config.Sampler.Unsupported",
message = "OTEL_TRACES_SAMPLER is set to 'jaeger_remote' which is implemented in this SDK version. Using fallback sampler: ParentBased(AlwaysOn). Configure an alternative sampler using OTEL_TRACES_SAMPLER"
);

Check warning on line 174 in opentelemetry-sdk/src/trace/config.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/config.rs#L171-L174

Added lines #L171 - L174 were not covered by tests
Box::new(Sampler::ParentBased(Box::new(Sampler::AlwaysOn)))
}
"xray" => {
handle_error(
Error::Other(String::from("Unimplemented xray sampler. Falling back to default: parentbased_always_on")));
otel_warn!(
name: "TracerProvider.Config.Sampler.Unsupported",
message = "OTEL_TRACES_SAMPLER is set to 'xray'. AWS X-Ray sampler is not implemented in this SDK version. Using fallback sampler: ParentBased(AlwaysOn). Configure an alternative sampler using OTEL_TRACES_SAMPLER"
);

Check warning on line 181 in opentelemetry-sdk/src/trace/config.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/config.rs#L178-L181

Added lines #L178 - L181 were not covered by tests
Box::new(Sampler::ParentBased(Box::new(Sampler::AlwaysOn)))
}
s => {
handle_error(
Error::Other(format!("Unrecognised OTEL_TRACES_SAMPLER value: {}. Falling back to default: parentbased_always_on",
s
)));
otel_warn!(

Check warning on line 185 in opentelemetry-sdk/src/trace/config.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/config.rs#L185

Added line #L185 was not covered by tests
name: "TracerProvider.Config.Sampler.InvalidSamplerType",
message = format!(
"Unrecognized sampler type '{}' in OTEL_TRACES_SAMPLER environment variable. Valid values are: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio. Using fallback sampler: ParentBased(AlwaysOn)",
s
),

Check warning on line 190 in opentelemetry-sdk/src/trace/config.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/config.rs#L187-L190

Added lines #L187 - L190 were not covered by tests
);
Box::new(Sampler::ParentBased(Box::new(Sampler::AlwaysOn)))
}
}
Expand Down
36 changes: 27 additions & 9 deletions opentelemetry-sdk/src/trace/span_processor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
stream::{self, FusedStream, FuturesUnordered},
StreamExt as _,
};
use opentelemetry::global;
use opentelemetry::{otel_debug, otel_error};
use opentelemetry::{
trace::{TraceError, TraceResult},
Context,
Expand Down Expand Up @@ -134,7 +134,11 @@
.and_then(|mut exporter| futures_executor::block_on(exporter.export(vec![span])));

if let Err(err) = result {
global::handle_error(err);
// TODO: check error type, and log `error` only if the error is user-actiobable, else log `debug`
otel_debug!(

Check warning on line 138 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L138

Added line #L138 was not covered by tests
name: "SimpleProcessor.OnEnd.Error",
reason = format!("{:?}", err)

Check warning on line 140 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L140

Added line #L140 was not covered by tests
);
}
}

Expand Down Expand Up @@ -246,7 +250,10 @@
let result = self.message_sender.try_send(BatchMessage::ExportSpan(span));

if let Err(err) = result {
global::handle_error(TraceError::Other(err.into()));
otel_debug!(

Check warning on line 253 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L253

Added line #L253 was not covered by tests
name: "BatchSpanProcessor.Export.SendResultError",
reason = format!("{:?}", TraceError::Other(err.into()))

Check warning on line 255 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L255

Added line #L255 was not covered by tests
);
}
}

Expand Down Expand Up @@ -313,14 +320,22 @@
let result = export_task.await;

if let Some(channel) = res_channel {
// If a response channel is provided, attempt to send the export result through it.
if let Err(result) = channel.send(result) {
global::handle_error(TraceError::from(format!(
"failed to send flush result: {:?}",
result
)));
otel_debug!(

Check warning on line 325 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L325

Added line #L325 was not covered by tests
name: "BatchSpanProcessor.Flush.SendResultError",
reason = format!("{:?}", result)

Check warning on line 327 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L327

Added line #L327 was not covered by tests
);
}
} else if let Err(err) = result {
global::handle_error(err);
// If no channel is provided and the export operation encountered an error,
// log the error directly here.
// TODO: Consider returning the status instead of logging it.
otel_error!(

Check warning on line 334 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L334

Added line #L334 was not covered by tests
name: "BatchSpanProcessor.Flush.ExportError",
reason = format!("{:?}", err),

Check warning on line 336 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L336

Added line #L336 was not covered by tests
message = "Failed during the export process"
);
}

Ok(())
Expand Down Expand Up @@ -354,7 +369,10 @@
let export_task = self.export();
let task = async move {
if let Err(err) = export_task.await {
global::handle_error(err);
otel_error!(

Check warning on line 372 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L372

Added line #L372 was not covered by tests
name: "BatchSpanProcessor.Export.Error",
reason = format!("{}", err)

Check warning on line 374 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L374

Added line #L374 was not covered by tests
);
}

Ok(())
Expand Down
Loading