Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move 3rd party propagators and merge exporter into sdk::export #375

Merged
merged 11 commits into from Dec 7, 2020
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Expand Up @@ -52,7 +52,7 @@ jobs:
override: true
- name: Run tests
run: cargo --version &&
cargo test --verbose --manifest-path=opentelemetry/Cargo.toml --features trace,metrics,serialize,tokio,serde,http,tonic,reqwest &&
cargo test --verbose --manifest-path=opentelemetry/Cargo.toml --features trace,metrics,serialize,tokio,serde,http,tonic,reqwest,testing &&
cargo test --manifest-path=opentelemetry-jaeger/Cargo.toml &&
cargo test --manifest-path=opentelemetry-zipkin/Cargo.toml
meta:
Expand Down
4 changes: 4 additions & 0 deletions CONTRIBUTING.md
Expand Up @@ -129,3 +129,7 @@ See the [code owners](CODEOWNERS) file.

See the [community membership document in OpenTelemetry community
repo](https://github.com/open-telemetry/community/blob/master/community-membership.md).

## FAQ
### Where should I put third party propagators/exporters, contrib or standalone crates?
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wanted to clarify the problem that where to put the stuff here. Please let me know if the below descriptions makes sense. @jtescher

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems good 👍

As of now, the specification classify the propagators into three categories: Fully opened standards, platform-specific standards, proprietary headers. The conclusion is only the fully opened standards should live in SDK packages/repos. So here, only fully opened standards should live as independent crate. For more detail and discussion, see [this pr](https://github.com/open-telemetry/opentelemetry-specification/pull/1144).
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -33,7 +33,7 @@ observability tools.
## Getting Started

```rust
use opentelemetry::{exporter::trace::stdout, trace::Tracer};
use opentelemetry::{sdk::export::trace::stdout, trace::Tracer};

fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
// Create a new instrumentation pipeline
Expand Down
2 changes: 1 addition & 1 deletion examples/aws-xray/Cargo.toml
Expand Up @@ -17,4 +17,4 @@ path = "src/client.rs"
hyper = "0.13"
tokio = { version = "0.2", features = ["full"] }
opentelemetry = { path = "../../opentelemetry", features = ["http"] }
opentelemetry-contrib = { path = "../../opentelemetry-contrib" }
opentelemetry-contrib = { path = "../../opentelemetry-contrib", features = ["aws-xray"] }
5 changes: 3 additions & 2 deletions examples/aws-xray/src/client.rs
@@ -1,11 +1,12 @@
use hyper::{body::Body, Client};
use opentelemetry::{
exporter::trace::stdout,
global,
sdk::{propagation::XrayPropagator, trace as sdktrace},
sdk::export::trace::stdout,
sdk::trace as sdktrace,
trace::{TraceContextExt, Tracer},
Context, KeyValue,
};
use opentelemetry_contrib::trace::propagator::XrayPropagator;

fn init_tracer() -> (sdktrace::Tracer, stdout::Uninstall) {
global::set_text_map_propagator(XrayPropagator::new());
Expand Down
5 changes: 3 additions & 2 deletions examples/aws-xray/src/server.rs
@@ -1,11 +1,12 @@
use hyper::service::{make_service_fn, service_fn};
use hyper::{Body, Request, Response, Server};
use opentelemetry::{
exporter::trace::stdout,
global,
sdk::{propagation::XrayPropagator, trace as sdktrace},
sdk::export::trace::stdout,
sdk::trace as sdktrace,
trace::{Span, Tracer},
};
use opentelemetry_contrib::trace::propagator::XrayPropagator;
use std::{convert::Infallible, net::SocketAddr};

async fn handle(req: Request<Body>) -> Result<Response<Body>, Infallible> {
Expand Down
3 changes: 1 addition & 2 deletions examples/basic-otlp/src/main.rs
@@ -1,5 +1,4 @@
use futures::stream::{Stream, StreamExt};
use opentelemetry::exporter;
use opentelemetry::sdk::metrics::PushController;
use opentelemetry::trace::TraceError;
use opentelemetry::{
Expand All @@ -22,7 +21,7 @@ fn delayed_interval(duration: Duration) -> impl Stream<Item = tokio::time::Insta
}

fn init_meter() -> metrics::Result<PushController> {
exporter::metrics::stdout(tokio::spawn, delayed_interval)
opentelemetry::sdk::export::metrics::stdout(tokio::spawn, delayed_interval)
.with_quantiles(vec![0.5, 0.9, 0.99])
.with_formatter(|batch| {
serde_json::to_value(batch)
Expand Down
3 changes: 1 addition & 2 deletions examples/basic/src/main.rs
@@ -1,5 +1,4 @@
use futures::stream::{Stream, StreamExt};
use opentelemetry::exporter;
use opentelemetry::global;
use opentelemetry::sdk::{metrics::PushController, trace as sdktrace};
use opentelemetry::trace::TraceError;
Expand Down Expand Up @@ -28,7 +27,7 @@ fn delayed_interval(duration: Duration) -> impl Stream<Item = tokio::time::Insta
}

fn init_meter() -> metrics::Result<PushController> {
exporter::metrics::stdout(tokio::spawn, delayed_interval)
opentelemetry::sdk::export::metrics::stdout(tokio::spawn, delayed_interval)
.with_quantiles(vec![0.5, 0.9, 0.99])
.with_formatter(|batch| {
serde_json::to_value(batch)
Expand Down
2 changes: 1 addition & 1 deletion examples/http/src/client.rs
@@ -1,6 +1,6 @@
use hyper::{body::Body, Client};
use opentelemetry::exporter::trace::stdout;
use opentelemetry::global;
use opentelemetry::sdk::export::trace::stdout;
use opentelemetry::sdk::{
propagation::TraceContextPropagator,
trace::{Config, Sampler},
Expand Down
2 changes: 1 addition & 1 deletion examples/http/src/server.rs
@@ -1,8 +1,8 @@
use hyper::service::{make_service_fn, service_fn};
use hyper::{Body, Request, Response, Server};
use opentelemetry::{
exporter::trace::stdout,
global,
sdk::export::trace::stdout,
sdk::{
propagation::TraceContextPropagator,
trace::{Config, Sampler},
Expand Down
2 changes: 1 addition & 1 deletion examples/stdout.rs
@@ -1,5 +1,5 @@
use opentelemetry::{
exporter::trace::stdout,
sdk::export::trace::stdout,
sdk::trace::{self, Sampler},
trace::Tracer,
};
Expand Down
2 changes: 2 additions & 0 deletions opentelemetry-contrib/Cargo.toml
Expand Up @@ -26,6 +26,7 @@ datadog = ["indexmap", "rmp", "async-trait", "thiserror"]
reqwest-blocking-client = ["reqwest/blocking", "opentelemetry/reqwest"]
reqwest-client = ["reqwest", "opentelemetry/reqwest"]
surf-client = ["surf", "opentelemetry/surf"]
aws-xray = []

[dependencies]
async-trait = { version = "0.1", optional = true }
Expand All @@ -42,3 +43,4 @@ thiserror = { version = "1.0", optional = true }
[dev-dependencies]
base64 = "0.13"
isahc = "0.9"
opentelemetry = { path = "../opentelemetry", features = ["trace", "http", "testing"] }
8 changes: 4 additions & 4 deletions opentelemetry-contrib/src/trace/exporter/datadog/mod.rs
Expand Up @@ -72,8 +72,8 @@
//! ```no_run
//! use opentelemetry::{KeyValue, trace::Tracer};
//! use opentelemetry::sdk::{trace::{self, IdGenerator, Sampler}, Resource};
//! use opentelemetry::exporter::trace::ExportResult;
//! use opentelemetry::exporter::trace::HttpClient;
//! use opentelemetry::sdk::export::trace::ExportResult;
//! use opentelemetry::sdk::export::trace::HttpClient;
//! use opentelemetry_contrib::trace::exporter::datadog::{new_pipeline, ApiVersion};
//! use async_trait::async_trait;
//! use opentelemetry_contrib::trace::exporter::datadog::Error;
Expand Down Expand Up @@ -127,8 +127,8 @@ pub use model::Error;

use async_trait::async_trait;
use http::{Method, Request, Uri};
use opentelemetry::exporter::trace;
use opentelemetry::exporter::trace::{HttpClient, SpanData};
use opentelemetry::sdk::export::trace;
use opentelemetry::sdk::export::trace::{HttpClient, SpanData};
use opentelemetry::trace::TraceError;
use opentelemetry::{global, sdk, trace::TracerProvider};

Expand Down
@@ -1,4 +1,4 @@
use opentelemetry::exporter::{trace, ExportError};
use opentelemetry::sdk::export::{trace, ExportError};

mod v03;
mod v05;
Expand Down
@@ -1,5 +1,5 @@
use crate::trace::exporter::datadog::model::Error;
use opentelemetry::exporter::trace;
use opentelemetry::sdk::export::trace;
use opentelemetry::{Key, Value};
use std::time::SystemTime;

Expand Down
4 changes: 2 additions & 2 deletions opentelemetry-contrib/src/trace/exporter/datadog/model/v05.rs
@@ -1,6 +1,6 @@
use crate::trace::exporter::datadog::intern::StringInterner;
use crate::trace::exporter::datadog::model::Error;
use opentelemetry::exporter::trace;
use crate::trace::exporter::datadog::Error;
use opentelemetry::sdk::export::trace;
use opentelemetry::{Key, Value};
use std::time::SystemTime;

Expand Down
@@ -1,4 +1,4 @@
use crate::{
use opentelemetry::{
propagation::{text_map_propagator::FieldIter, Extractor, Injector, TextMapPropagator},
trace::{
SpanContext, SpanId, TraceContextExt, TraceId, TraceState, TRACE_FLAG_DEFERRED,
Expand Down Expand Up @@ -32,7 +32,7 @@ lazy_static::lazy_static! {
///
/// ```
/// use opentelemetry::global;
/// use opentelemetry::sdk::propagation::XrayPropagator;
/// use opentelemetry_contrib::trace::propagator::XrayPropagator;
///
/// global::set_text_map_propagator(XrayPropagator::default());
/// ```
Expand Down Expand Up @@ -236,8 +236,8 @@ fn title_case(s: &str) -> String {
#[cfg(test)]
mod tests {
use super::*;
use crate::testing::trace::TestSpan;
use crate::trace::TraceState;
use opentelemetry::testing::trace::TestSpan;
use opentelemetry::trace::TraceState;
use std::collections::HashMap;
use std::str::FromStr;

Expand Down
10 changes: 10 additions & 0 deletions opentelemetry-contrib/src/trace/propagator/mod.rs
Expand Up @@ -6,4 +6,14 @@
//! Currently, the following propagators are supported:
//!
//! * `binary_propagator`, propagating trace context in the binary format.
//! * `XrayPropagator`, propagating via AWS XRay protocol.
//! * `B3Propagator`, propagating via B3 protocol and headers.
jtescher marked this conversation as resolved.
Show resolved Hide resolved
//! * `JaegerPropagator`, propagating via Jaeger protocol and headers.
//!
//! This module also provides relative types for those propagators.
#[cfg(feature = "aws-xray")]
mod aws;
pub mod binary;

#[cfg(feature = "aws-xray")]
pub use aws::XrayPropagator;
4 changes: 4 additions & 0 deletions opentelemetry-jaeger/Cargo.toml
Expand Up @@ -34,6 +34,10 @@ tokio = { version = "0.2", features = ["udp", "sync"], optional = true }
wasm-bindgen = { version = "0.2", optional = true }
wasm-bindgen-futures = { version = "0.4.18", optional = true }
thiserror = "1.0"
lazy_static = "1.4"

[dev-dependencies]
opentelemetry = { version = "0.10", default-features = false, features = ["trace", "testing"], path = "../opentelemetry" }

[dependencies.web-sys]
version = "0.3.4"
Expand Down
8 changes: 7 additions & 1 deletion opentelemetry-jaeger/README.md
Expand Up @@ -4,7 +4,7 @@

# OpenTelemetry Jaeger

[`Jaeger`] integration for applications instrumented with [`OpenTelemetry`].
[`Jaeger`] integration for applications instrumented with [`OpenTelemetry`]. This includes a jaeger exporter and a jaeger propagator.

[![Crates.io: opentelemetry-jaeger](https://img.shields.io/crates/v/opentelemetry-jaeger.svg)](https://crates.io/crates/opentelemetry-jaeger)
[![Documentation](https://docs.rs/opentelemetry-jaeger/badge.svg)](https://docs.rs/opentelemetry-jaeger)
Expand Down Expand Up @@ -43,8 +43,10 @@ exporting telemetry:

```rust
use opentelemetry::tracer;
use opentelemetry::global;

fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
global::set_text_map_propagator(opentelemetry_jaeger::Propagator::new());
let (tracer, _uninstall) = opentelemetry_jaeger::new_pipeline().install()?;

tracer.in_span("doing_work", |cx| {
Expand Down Expand Up @@ -84,8 +86,10 @@ in the [jaeger variables spec].

```rust
use opentelemetry::tracer;
use opentelemetry::global;

fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
global::set_text_map_propagator(opentelemetry_jaeger::Propagator::new());
// export OTEL_SERVICE_NAME=my-service-name
let (tracer, _uninstall) = opentelemetry_jaeger::new_pipeline().from_env().install()?;

Expand Down Expand Up @@ -142,8 +146,10 @@ Example showing how to override all configuration options. See the
```rust
use opentelemetry::{KeyValue, Tracer};
use opentelemetry::sdk::{trace, IdGenerator, Resource, Sampler};
use opentelemetry::global;

fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
global::set_text_map_propagator(opentelemetry_jaeger::Propagator::new());
let (tracer, _uninstall) = opentelemetry_jaeger::new_pipeline()
.from_env()
.with_agent_endpoint("localhost:6831")
Expand Down
@@ -1,9 +1,9 @@
//! # UDP Jaeger Agent Client
use crate::thrift::{
use crate::exporter::thrift::{
agent::{self, TAgentSyncClient},
jaeger,
};
use crate::transport::{TBufferChannel, TNoopChannel};
use crate::exporter::transport::{TBufferChannel, TNoopChannel};
use std::fmt;
use std::net::{ToSocketAddrs, UdpSocket};
use thrift::{
Expand Down
Expand Up @@ -23,7 +23,7 @@ struct WasmHttpClient {
#[cfg(feature = "collector_client")]
mod collector_client {
use super::*;
use crate::thrift::jaeger;
use crate::exporter::thrift::jaeger;
use http::{Request, Uri};
use isahc::{
auth::{Authentication, Credentials},
Expand Down Expand Up @@ -106,7 +106,7 @@ mod collector_client {
#[cfg(all(feature = "wasm_collector_client", not(feature = "collector_client")))]
mod wasm_collector_client {
use super::*;
use crate::thrift::jaeger;
use crate::exporter::thrift::jaeger;
use futures_util::future;
use http::Uri;
use js_sys::Uint8Array;
Expand Down