From f98e266399f8665ebacf6f8f8d3a197272983b1d Mon Sep 17 00:00:00 2001 From: Zhongyang Wu Date: Sat, 22 Oct 2022 21:37:37 -0700 Subject: [PATCH] feat(trace): add TelemetryResourceDetector --- opentelemetry-sdk/src/resource/mod.rs | 5 +++- opentelemetry-sdk/src/resource/telemetry.rs | 27 +++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 opentelemetry-sdk/src/resource/telemetry.rs diff --git a/opentelemetry-sdk/src/resource/mod.rs b/opentelemetry-sdk/src/resource/mod.rs index b443773059..b83450a559 100644 --- a/opentelemetry-sdk/src/resource/mod.rs +++ b/opentelemetry-sdk/src/resource/mod.rs @@ -18,14 +18,17 @@ //! - [`EnvResourceDetector`] - detect resource from environmental variables. //! - [`OsResourceDetector`] - detect OS from runtime. //! - [`ProcessResourceDetector`] - detect process information. +//! - [`TelemetryResourceDetector`] - detect telemetry SDK's information. mod env; mod os; mod process; +mod telemetry; pub use env::EnvResourceDetector; pub use env::SdkProvidedResourceDetector; pub use os::OsResourceDetector; pub use process::ProcessResourceDetector; +pub use telemetry::TelemetryResourceDetector; #[cfg(feature = "metrics")] use opentelemetry_api::attributes; @@ -242,7 +245,7 @@ impl<'a> IntoIterator for &'a Resource { /// ResourceDetector detects OpenTelemetry resource information /// /// Implementations of this trait can be passed to -/// the `Resource::from_detectors` function to generate a Resource from the merged information. +/// the [`Resource::from_detectors`] function to generate a Resource from the merged information. pub trait ResourceDetector { /// detect returns an initialized Resource based on gathered information. /// diff --git a/opentelemetry-sdk/src/resource/telemetry.rs b/opentelemetry-sdk/src/resource/telemetry.rs new file mode 100644 index 0000000000..d29db229bc --- /dev/null +++ b/opentelemetry-sdk/src/resource/telemetry.rs @@ -0,0 +1,27 @@ +use crate::resource::ResourceDetector; +use crate::Resource; +use opentelemetry_api::KeyValue; +use std::time::Duration; + +/// Detect the telemetry SDK information used to capture data recorded by the instrumentation libraries. +/// +/// It provides: +/// - The name of the telemetry SDK(`telemetry.sdk.name`). It will be `opentelemetry` for SDK provided by opentelemetry project. +/// - The language of the telemetry SDK(`telemetry.sdk.language`). It will be `rust` for this SDK. +/// - The version of the telemetry SDK(`telemetry.sdk.version`). It will be current `opentelemetry_sdk` crate version. +/// +/// Note that the `telemetry.auto.version` is not provided as of now. +/// +/// See [semantic conventions](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/resource/semantic_conventions/README.md#telemetry-sdk) for details. +#[derive(Debug)] +pub struct TelemetryResourceDetector; + +impl ResourceDetector for TelemetryResourceDetector { + fn detect(&self, _timeout: Duration) -> Resource { + Resource::new(vec![ + KeyValue::new("telemetry.sdk.name", "opentelemetry"), + KeyValue::new("telemetry.sdk.language", "rust"), + KeyValue::new("telemetry.sdk.version", env!("CARGO_PKG_VERSION")), + ]) + } +}