From 9b2f8037d47f2c7017ed6e9dd58be6a0f93a3f40 Mon Sep 17 00:00:00 2001 From: Cijo Thomas Date: Tue, 30 Apr 2024 19:19:51 -0700 Subject: [PATCH 1/4] Minor cleanups to Metrics API docs --- opentelemetry/src/global/metrics.rs | 10 +++++----- opentelemetry/src/global/mod.rs | 21 +++++++++++++++------ 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/opentelemetry/src/global/metrics.rs b/opentelemetry/src/global/metrics.rs index 24d293f154..90b99048b1 100644 --- a/opentelemetry/src/global/metrics.rs +++ b/opentelemetry/src/global/metrics.rs @@ -7,7 +7,7 @@ use std::{ sync::{Arc, RwLock}, }; -/// The global `Meter` provider singleton. +/// The global `MeterProvider` singleton. static GLOBAL_METER_PROVIDER: Lazy> = Lazy::new(|| { RwLock::new(GlobalMeterProvider::new( metrics::noop::NoopMeterProvider::new(), @@ -19,7 +19,7 @@ static GLOBAL_METER_PROVIDER: Lazy> = Lazy::new(|| { pub trait ObjectSafeMeterProvider { /// Creates a versioned named meter instance that is a trait object through the underlying /// [MeterProvider]. - fn versioned_meter_cow( + fn versioned_meter( &self, name: Cow<'static, str>, version: Option>, @@ -33,7 +33,7 @@ where P: MeterProvider, { /// Return a versioned boxed tracer - fn versioned_meter_cow( + fn versioned_meter( &self, name: Cow<'static, str>, version: Option>, @@ -65,7 +65,7 @@ impl MeterProvider for GlobalMeterProvider { schema_url: Option>>, attributes: Option>, ) -> Meter { - self.provider.versioned_meter_cow( + self.provider.versioned_meter( name.into(), version.map(Into::into), schema_url.map(Into::into), @@ -111,7 +111,7 @@ pub fn meter_provider() -> GlobalMeterProvider { /// /// If the name is an empty string, the provider will use a default name. /// -/// This is a more convenient way of expressing `global::meter_provider().versioned_meter(name, None, None, None)`. +/// This is a more convenient way of expressing `global::meter_provider().meter(name)`. pub fn meter(name: impl Into>) -> Meter { meter_provider().meter(name.into()) } diff --git a/opentelemetry/src/global/mod.rs b/opentelemetry/src/global/mod.rs index 25910c77d3..ee0d07ffea 100644 --- a/opentelemetry/src/global/mod.rs +++ b/opentelemetry/src/global/mod.rs @@ -83,8 +83,8 @@ //! //! ### Usage in Applications //! -//! Applications configure their meter either by installing a metrics pipeline, -//! or calling [`set_meter_provider`]. +//! Applications configure their meter by configuring a meter provider, +//! and calling [`set_meter_provider`] to set it as global meter provider. //! //! ``` //! # #[cfg(feature="metrics")] @@ -93,6 +93,8 @@ //! use opentelemetry::{global, KeyValue}; //! //! fn init_meter() { +//! // Swap this no-op provider with an actual metrics provider, +//! // exporting to stdout, otlp, prometheus, etc. //! let provider = NoopMeterProvider::new(); //! //! // Configure the global `MeterProvider` singleton when your app starts @@ -101,17 +103,22 @@ //! } //! //! fn do_something_instrumented() { -//! // Then you can get a named tracer instance anywhere in your codebase. +//! // You can get a named meter instance anywhere in your codebase. //! let meter = global::meter("my-component"); +//! // It is recommended to reuse the same counter instance for the +//! // lifetime of the application //! let counter = meter.u64_counter("my_counter").init(); //! -//! // record metrics +//! // record measurements //! counter.add(1, &[KeyValue::new("mykey", "myvalue")]); //! } //! //! // in main or other app start //! init_meter(); //! do_something_instrumented(); +//! // Shutdown ensures any metrics still in memory are given to exporters +//! // before the program exits. +//! shutdown_meter_provider(); //! # } //! ``` //! @@ -122,13 +129,15 @@ //! # { //! use opentelemetry::{global, KeyValue}; //! -//! pub fn my_traced_library_function() { +//! pub fn my_instrumented_library_function() { //! // End users of your library will configure their global meter provider //! // so you can use the global meter without any setup //! let meter = global::meter("my-library-name"); +//! // It is recommended to reuse the same counter instance for the +//! // lifetime of the application //! let counter = meter.u64_counter("my_counter").init(); //! -//! // record metrics +//! // record measurements //! counter.add(1, &[KeyValue::new("mykey", "myvalue")]); //! } //! # } From 8b9ca2a4e65cd43cf267de1b15a0c927a82a6290 Mon Sep 17 00:00:00 2001 From: Cijo Thomas Date: Tue, 30 Apr 2024 19:26:36 -0700 Subject: [PATCH 2/4] rename back --- opentelemetry/src/global/metrics.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/opentelemetry/src/global/metrics.rs b/opentelemetry/src/global/metrics.rs index 90b99048b1..11c21805f3 100644 --- a/opentelemetry/src/global/metrics.rs +++ b/opentelemetry/src/global/metrics.rs @@ -19,7 +19,7 @@ static GLOBAL_METER_PROVIDER: Lazy> = Lazy::new(|| { pub trait ObjectSafeMeterProvider { /// Creates a versioned named meter instance that is a trait object through the underlying /// [MeterProvider]. - fn versioned_meter( + fn versioned_meter_cow( &self, name: Cow<'static, str>, version: Option>, @@ -33,7 +33,7 @@ where P: MeterProvider, { /// Return a versioned boxed tracer - fn versioned_meter( + fn versioned_meter_cow( &self, name: Cow<'static, str>, version: Option>, @@ -65,7 +65,7 @@ impl MeterProvider for GlobalMeterProvider { schema_url: Option>>, attributes: Option>, ) -> Meter { - self.provider.versioned_meter( + self.provider.versioned_meter_cow( name.into(), version.map(Into::into), schema_url.map(Into::into), From 95b1c521eee061494644d64b6f10d4b1822e9285 Mon Sep 17 00:00:00 2001 From: Cijo Thomas Date: Tue, 30 Apr 2024 19:34:58 -0700 Subject: [PATCH 3/4] fix global --- opentelemetry/src/global/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry/src/global/mod.rs b/opentelemetry/src/global/mod.rs index ee0d07ffea..592d31bb83 100644 --- a/opentelemetry/src/global/mod.rs +++ b/opentelemetry/src/global/mod.rs @@ -118,7 +118,7 @@ //! do_something_instrumented(); //! // Shutdown ensures any metrics still in memory are given to exporters //! // before the program exits. -//! shutdown_meter_provider(); +//! global::shutdown_meter_provider(); //! # } //! ``` //! From 13468c4424fdf1913eac5de7b565ef43029ce32e Mon Sep 17 00:00:00 2001 From: Cijo Thomas Date: Tue, 30 Apr 2024 21:09:19 -0700 Subject: [PATCH 4/4] Update opentelemetry/src/global/mod.rs Co-authored-by: Lalit Kumar Bhasin --- opentelemetry/src/global/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry/src/global/mod.rs b/opentelemetry/src/global/mod.rs index 592d31bb83..aef0190072 100644 --- a/opentelemetry/src/global/mod.rs +++ b/opentelemetry/src/global/mod.rs @@ -93,7 +93,7 @@ //! use opentelemetry::{global, KeyValue}; //! //! fn init_meter() { -//! // Swap this no-op provider with an actual metrics provider, +//! // Swap this no-op provider with an actual meter provider, //! // exporting to stdout, otlp, prometheus, etc. //! let provider = NoopMeterProvider::new(); //!