Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
TommyCpp committed Mar 18, 2024
1 parent a7a47a7 commit 7c9e88e
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 46 deletions.
1 change: 1 addition & 0 deletions examples/tracing-jaeger/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ publish = false
opentelemetry = { path = "../../opentelemetry" }
opentelemetry_sdk = { path = "../../opentelemetry-sdk", features = ["rt-tokio"] }
opentelemetry-otlp = { path = "../../opentelemetry-otlp", features = ["tonic"] }
opentelemetry-stdout = { path = "../../opentelemetry-stdout", features = ["trace"] }
tokio = { workspace = true, features = ["full"] }
31 changes: 8 additions & 23 deletions examples/tracing-jaeger/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,35 +1,20 @@
use opentelemetry::global::shutdown_tracer_provider;
use opentelemetry::trace::TracerProvider;
use opentelemetry::{
global,
trace::{TraceContextExt, TraceError, Tracer},
trace::{TraceContextExt, Tracer},
KeyValue,
};
use opentelemetry_otlp::WithExportConfig;
use opentelemetry_sdk::{runtime, trace as sdktrace, Resource};
use std::error::Error;

fn init_tracer() -> Result<opentelemetry_sdk::trace::Tracer, TraceError> {
opentelemetry_otlp::new_pipeline()
.tracing()
.with_exporter(
opentelemetry_otlp::new_exporter()
.tonic()
.with_endpoint("http://localhost:4317"),
)
.with_trace_config(
sdktrace::config().with_resource(Resource::new(vec![KeyValue::new(
"service.name",
"tracing-jaeger",
)])),
)
.install_batch(runtime::Tokio)
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
let _tracer = init_tracer().expect("Failed to initialize tracer.");
let provider = opentelemetry_sdk::trace::TracerProvider::builder()
.with_simple_exporter(opentelemetry_stdout::SpanExporter::default())
.build();

let tracer = provider.tracer("tracing-jaeger");

let tracer = global::tracer("tracing-jaeger");
tracer.in_span("main-operation", |cx| {
let span = cx.span();
span.set_attribute(KeyValue::new("my-attribute", "my-value"));
Expand All @@ -43,6 +28,6 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
});
});

shutdown_tracer_provider();
let _ = tracer.start("Test");
Ok(())
}
2 changes: 1 addition & 1 deletion opentelemetry-sdk/src/trace/provider.rs
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ impl opentelemetry::trace::TracerProvider for TracerProvider {
}

fn library_tracer(&self, library: Arc<InstrumentationLibrary>) -> Self::Tracer {
Tracer::new(library, Arc::downgrade(&self.inner))
Tracer::new(library, self.clone())
}
}

Expand Down
8 changes: 2 additions & 6 deletions opentelemetry-sdk/src/trace/span.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ impl Span {
/// overhead.
pub fn exported_data(&self) -> Option<crate::export::trace::SpanData> {
let (span_context, tracer) = (self.span_context.clone(), &self.tracer);
let resource = self.tracer.provider()?.config().resource.clone();
let resource = self.tracer.provider().config().resource.clone();

self.data
.as_ref()
Expand Down Expand Up @@ -184,11 +184,7 @@ impl Span {
None => return,
};

// skip if provider has been shut down
let provider = match self.tracer.provider() {
Some(provider) => provider,
None => return,
};
let provider = self.tracer.provider();

// ensure end time is set via explicit end or implicitly on drop
if let Some(timestamp) = timestamp {
Expand Down
22 changes: 6 additions & 16 deletions opentelemetry-sdk/src/trace/tracer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
//! Docs: <https://github.com/open-telemetry/opentelemetry-specification/blob/v1.3.0/specification/trace/api.md#tracer>
use crate::{
trace::{
provider::{TracerProvider, TracerProviderInner},
provider::TracerProvider,
span::{Span, SpanData},
SpanLimits, SpanLinks,
},
Expand All @@ -20,15 +20,15 @@ use opentelemetry::{
Context, KeyValue,
};
use std::fmt;
use std::sync::{Arc, Weak};
use std::sync::Arc;

use super::SpanEvents;

/// `Tracer` implementation to create and manage spans
#[derive(Clone)]
pub struct Tracer {
instrumentation_lib: Arc<InstrumentationLibrary>,
provider: Weak<TracerProviderInner>,
provider: TracerProvider,
}

impl fmt::Debug for Tracer {
Expand All @@ -46,7 +46,7 @@ impl Tracer {
/// Create a new tracer (used internally by `TracerProvider`s).
pub(crate) fn new(
instrumentation_lib: Arc<InstrumentationLibrary>,
provider: Weak<TracerProviderInner>,
provider: TracerProvider,
) -> Self {
Tracer {
instrumentation_lib,
Expand All @@ -55,8 +55,8 @@ impl Tracer {
}

/// TracerProvider associated with this tracer.
pub fn provider(&self) -> Option<TracerProvider> {
self.provider.upgrade().map(TracerProvider::new)
pub fn provider(&self) -> TracerProvider {
self.provider.clone()
}

/// Instrumentation library information of this tracer.
Expand Down Expand Up @@ -175,16 +175,6 @@ impl opentelemetry::trace::Tracer for Tracer {
/// spans in the trace.
fn build_with_context(&self, mut builder: SpanBuilder, parent_cx: &Context) -> Self::Span {
let provider = self.provider();
if provider.is_none() {
return Span::new(
SpanContext::empty_context(),
None,
self.clone(),
SpanLimits::default(),
);
}

let provider = provider.unwrap();
let config = provider.config();
let span_id = builder
.span_id
Expand Down

0 comments on commit 7c9e88e

Please sign in to comment.