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

Refactor/metric exporters non plural #2255

Merged
Rate limit · GitHub

Whoa there!

You have triggered an abuse detection mechanism.

Please wait a few minutes before you try again;
in some cases this may take up to an hour.

Merged
Changes from all 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
2 changes: 1 addition & 1 deletion examples/metrics-advanced/src/main.rs
Original file line number Diff line number Diff line change
@@ -45,7 +45,7 @@ fn init_meter_provider() -> opentelemetry_sdk::metrics::SdkMeterProvider {
};

// Build exporter using Delta Temporality.
let exporter = opentelemetry_stdout::MetricsExporterBuilder::default()
let exporter = opentelemetry_stdout::MetricExporterBuilder::default()
.with_temporality(Temporality::Delta)
.build();

2 changes: 1 addition & 1 deletion examples/metrics-basic/src/main.rs
Original file line number Diff line number Diff line change
@@ -6,7 +6,7 @@ use std::error::Error;
use std::vec;

fn init_meter_provider() -> opentelemetry_sdk::metrics::SdkMeterProvider {
let exporter = opentelemetry_stdout::MetricsExporterBuilder::default()
let exporter = opentelemetry_stdout::MetricExporterBuilder::default()
// Build exporter using Delta Temporality (Defaults to Temporality::Cumulative)
// .with_temporality(data::Temporality::Delta)
.build();
4 changes: 2 additions & 2 deletions examples/self-diagnostics/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use opentelemetry::global::{self, set_error_handler, Error as OtelError};
use opentelemetry::KeyValue;
use opentelemetry_appender_tracing::layer;
use opentelemetry_otlp::{LogExporter, MetricsExporter, WithExportConfig};
use opentelemetry_otlp::{LogExporter, MetricExporter, WithExportConfig};
use opentelemetry_sdk::metrics::PeriodicReader;
use tracing_subscriber::filter::{EnvFilter, LevelFilter};
use tracing_subscriber::fmt;
@@ -109,7 +109,7 @@ fn init_logger_provider() -> opentelemetry_sdk::logs::LoggerProvider {
}

fn init_meter_provider() -> opentelemetry_sdk::metrics::SdkMeterProvider {
let exporter = MetricsExporter::builder()
let exporter = MetricExporter::builder()
.with_http()
.with_endpoint("http://localhost:4318/v1/metrics")
.build()
4 changes: 4 additions & 0 deletions opentelemetry-otlp/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -48,6 +48,10 @@ Released 2024-Sep-30
.build()?,
).build();
```
- **Renamed**
- ([#2255](https://github.com/open-telemetry/opentelemetry-rust/pull/2255)): de-pluralize Metric types.
- `MetricsExporter` -> `MetricExporter`
- `MetricsExporterBuilder` -> `MetricExporterBuilder`

## v0.25.0

4 changes: 2 additions & 2 deletions opentelemetry-otlp/examples/basic-otlp-http/src/main.rs
Original file line number Diff line number Diff line change
@@ -7,7 +7,7 @@ use opentelemetry::{
};
use opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge;
use opentelemetry_otlp::WithExportConfig;
use opentelemetry_otlp::{LogExporter, MetricsExporter, Protocol, SpanExporter};
use opentelemetry_otlp::{LogExporter, MetricExporter, Protocol, SpanExporter};
use opentelemetry_sdk::{
logs::LoggerProvider,
metrics::{PeriodicReader, SdkMeterProvider},
@@ -66,7 +66,7 @@ fn init_tracer_provider() -> Result<sdktrace::TracerProvider, TraceError> {
}

fn init_metrics() -> Result<opentelemetry_sdk::metrics::SdkMeterProvider, MetricError> {
let exporter = MetricsExporter::builder()
let exporter = MetricExporter::builder()
.with_http()
.with_protocol(Protocol::HttpBinary) //can be changed to `Protocol::HttpJson` to export in JSON format
.with_endpoint("http://localhost:4318/v1/metrics")
2 changes: 1 addition & 1 deletion opentelemetry-otlp/examples/basic-otlp/README.md
Original file line number Diff line number Diff line change
@@ -120,7 +120,7 @@ SpanEvent #0
### Metric

```text
2024-05-22T20:25:42.908Z info MetricsExporter {"kind": "exporter", "data_type": "metrics", "name": "logging", "resource metrics": 1, "metrics": 1, "data points": 1}
2024-05-22T20:25:42.908Z info MetricExporter {"kind": "exporter", "data_type": "metrics", "name": "logging", "resource metrics": 1, "metrics": 1, "data points": 1}
2024-05-22T20:25:42.908Z info ResourceMetrics #0
Resource SchemaURL:
Resource attributes:
4 changes: 2 additions & 2 deletions opentelemetry-otlp/examples/basic-otlp/src/main.rs
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@ use opentelemetry::trace::{TraceContextExt, TraceError, Tracer};
use opentelemetry::KeyValue;
use opentelemetry::{global, InstrumentationScope};
use opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge;
use opentelemetry_otlp::{LogExporter, MetricsExporter, SpanExporter, WithExportConfig};
use opentelemetry_otlp::{LogExporter, MetricExporter, SpanExporter, WithExportConfig};
use opentelemetry_sdk::logs::LoggerProvider;
use opentelemetry_sdk::metrics::{PeriodicReader, SdkMeterProvider};
use opentelemetry_sdk::trace::Config;
@@ -34,7 +34,7 @@ fn init_tracer_provider() -> Result<sdktrace::TracerProvider, TraceError> {
}

fn init_metrics() -> Result<opentelemetry_sdk::metrics::SdkMeterProvider, MetricError> {
let exporter = MetricsExporter::builder().with_tonic().build()?;
let exporter = MetricExporter::builder().with_tonic().build()?;

let reader = PeriodicReader::builder(exporter, runtime::Tokio).build();

6 changes: 3 additions & 3 deletions opentelemetry-otlp/src/exporter/http/mod.rs
Original file line number Diff line number Diff line change
@@ -83,7 +83,7 @@
///
/// // Create a metrics exporter you can use when configuring meter providers
/// # #[cfg(feature="metrics")]
/// let metrics_exporter = opentelemetry_otlp::MetricsExporter::builder()
/// let metrics_exporter = opentelemetry_otlp::MetricExporter::builder()
/// .with_http()
/// .with_temporality(Temporality::default())
/// .build()?;
@@ -221,7 +221,7 @@
pub fn build_metrics_exporter(
mut self,
temporality: opentelemetry_sdk::metrics::data::Temporality,
) -> opentelemetry::metrics::MetricResult<crate::MetricsExporter> {
) -> opentelemetry::metrics::MetricResult<crate::MetricExporter> {

Check warning on line 224 in opentelemetry-otlp/src/exporter/http/mod.rs

Codecov / codecov/patch

opentelemetry-otlp/src/exporter/http/mod.rs#L224

Added line #L224 was not covered by tests
use crate::{
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT, OTEL_EXPORTER_OTLP_METRICS_HEADERS,
OTEL_EXPORTER_OTLP_METRICS_TIMEOUT,
@@ -234,7 +234,7 @@
OTEL_EXPORTER_OTLP_METRICS_HEADERS,
)?;

Ok(crate::MetricsExporter::new(client, temporality))
Ok(crate::MetricExporter::new(client, temporality))

Check warning on line 237 in opentelemetry-otlp/src/exporter/http/mod.rs

Codecov / codecov/patch

opentelemetry-otlp/src/exporter/http/mod.rs#L237

Added line #L237 was not covered by tests
}
}

8 changes: 4 additions & 4 deletions opentelemetry-otlp/src/exporter/tonic/mod.rs
Original file line number Diff line number Diff line change
@@ -90,7 +90,7 @@
///
/// // Create a metric exporter you can use when configuring meter providers
/// # #[cfg(feature="metrics")]
/// let metric_exporter = opentelemetry_otlp::MetricsExporter::builder()
/// let metric_exporter = opentelemetry_otlp::MetricExporter::builder()
/// .with_tonic()
/// .with_temporality(Temporality::default())
/// .build()?;
@@ -274,8 +274,8 @@
pub(crate) fn build_metrics_exporter(
self,
temporality: opentelemetry_sdk::metrics::data::Temporality,
) -> opentelemetry::metrics::MetricResult<crate::MetricsExporter> {
use crate::MetricsExporter;
) -> opentelemetry::metrics::MetricResult<crate::MetricExporter> {

Check warning on line 277 in opentelemetry-otlp/src/exporter/tonic/mod.rs

Codecov / codecov/patch

opentelemetry-otlp/src/exporter/tonic/mod.rs#L277

Added line #L277 was not covered by tests
use crate::MetricExporter;
use metrics::TonicMetricsClient;

let (channel, interceptor, compression) = self.build_channel(
@@ -287,7 +287,7 @@

let client = TonicMetricsClient::new(channel, interceptor, compression);

Ok(MetricsExporter::new(client, temporality))
Ok(MetricExporter::new(client, temporality))

Check warning on line 290 in opentelemetry-otlp/src/exporter/tonic/mod.rs

Codecov / codecov/patch

opentelemetry-otlp/src/exporter/tonic/mod.rs#L290

Added line #L290 was not covered by tests
}

/// Build a new tonic span exporter
8 changes: 4 additions & 4 deletions opentelemetry-otlp/src/lib.rs
Original file line number Diff line number Diff line change
@@ -25,7 +25,7 @@
//! telemetry.
//!
//! You will have to build a OTLP exporter first. Create the correct exporter based on the signal
//! you are looking to export `SpanExporter::builder()`, `MetricsExporter::builder()`,
//! you are looking to export `SpanExporter::builder()`, `MetricExporter::builder()`,
//! `LogExporter::builder()` respectively for traces, metrics, and logs.
//!
//! Once you have the exporter, you can create your `Provider` by starting with `TracerProvider::builder()`,
@@ -124,7 +124,7 @@
//!
//! Generally there are two parts of configuration. One is the exporter, the other is the provider.
//! Users can configure the exporter using [SpanExporter::builder()] for traces,
//! and [MetricsExporter::builder()] + [opentelemetry_sdk::metrics::PeriodicReader::builder()] for metrics.
//! and [MetricExporter::builder()] + [opentelemetry_sdk::metrics::PeriodicReader::builder()] for metrics.
//! Once you have an exporter, you can add it to either a [opentelemetry_sdk::trace::TracerProvider::builder()] for traces,
//! or [opentelemetry_sdk::metrics::SdkMeterProvider::builder()] for metrics.
//!
@@ -171,7 +171,7 @@
//!
//! # #[cfg(all(feature = "metrics", feature = "grpc-tonic"))]
//! # {
//! let exporter = opentelemetry_otlp::MetricsExporter::builder()
//! let exporter = opentelemetry_otlp::MetricExporter::builder()
//! .with_tonic()
//! .with_endpoint("http://localhost:4318/v1/metrics")
//! .with_protocol(Protocol::Grpc)
@@ -240,7 +240,7 @@ pub use crate::span::{
#[cfg(feature = "metrics")]
#[cfg(any(feature = "http-proto", feature = "http-json", feature = "grpc-tonic"))]
pub use crate::metric::{
MetricsExporter, OTEL_EXPORTER_OTLP_METRICS_COMPRESSION, OTEL_EXPORTER_OTLP_METRICS_ENDPOINT,
MetricExporter, OTEL_EXPORTER_OTLP_METRICS_COMPRESSION, OTEL_EXPORTER_OTLP_METRICS_ENDPOINT,
OTEL_EXPORTER_OTLP_METRICS_HEADERS, OTEL_EXPORTER_OTLP_METRICS_TIMEOUT,
};

60 changes: 30 additions & 30 deletions opentelemetry-otlp/src/metric.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//! OTEL metric exporter
//!
//! Defines a [MetricsExporter] to send metric data to backend via OTLP protocol.
//! Defines a [MetricExporter] to send metric data to backend via OTLP protocol.
//!

#[cfg(any(feature = "http-proto", feature = "http-json", feature = "grpc-tonic"))]
@@ -20,7 +20,7 @@

use opentelemetry_sdk::metrics::{
data::{ResourceMetrics, Temporality},
exporter::PushMetricsExporter,
exporter::PushMetricExporter,
};
use std::fmt::{Debug, Formatter};

@@ -39,81 +39,81 @@
pub const OTEL_EXPORTER_OTLP_METRICS_HEADERS: &str = "OTEL_EXPORTER_OTLP_METRICS_HEADERS";

#[derive(Debug, Default, Clone)]
pub struct MetricsExporterBuilder<C> {
pub struct MetricExporterBuilder<C> {
client: C,
temporality: Temporality,
}

impl MetricsExporterBuilder<NoExporterBuilderSet> {
impl MetricExporterBuilder<NoExporterBuilderSet> {
pub fn new() -> Self {
MetricsExporterBuilder::default()
MetricExporterBuilder::default()

Check warning on line 49 in opentelemetry-otlp/src/metric.rs

Codecov / codecov/patch

opentelemetry-otlp/src/metric.rs#L49

Added line #L49 was not covered by tests
}
}

impl<C> MetricsExporterBuilder<C> {
impl<C> MetricExporterBuilder<C> {
#[cfg(feature = "grpc-tonic")]
pub fn with_tonic(self) -> MetricsExporterBuilder<TonicExporterBuilderSet> {
MetricsExporterBuilder {
pub fn with_tonic(self) -> MetricExporterBuilder<TonicExporterBuilderSet> {
MetricExporterBuilder {

Check warning on line 56 in opentelemetry-otlp/src/metric.rs

Codecov / codecov/patch

opentelemetry-otlp/src/metric.rs#L55-L56

Added lines #L55 - L56 were not covered by tests
client: TonicExporterBuilderSet(TonicExporterBuilder::default()),
temporality: self.temporality,
}
}

#[cfg(any(feature = "http-proto", feature = "http-json"))]
pub fn with_http(self) -> MetricsExporterBuilder<HttpExporterBuilderSet> {
MetricsExporterBuilder {
pub fn with_http(self) -> MetricExporterBuilder<HttpExporterBuilderSet> {
MetricExporterBuilder {

Check warning on line 64 in opentelemetry-otlp/src/metric.rs

Codecov / codecov/patch

opentelemetry-otlp/src/metric.rs#L63-L64

Added lines #L63 - L64 were not covered by tests
client: HttpExporterBuilderSet(HttpExporterBuilder::default()),
temporality: self.temporality,
}
}

pub fn with_temporality(self, temporality: Temporality) -> MetricsExporterBuilder<C> {
MetricsExporterBuilder {
pub fn with_temporality(self, temporality: Temporality) -> MetricExporterBuilder<C> {
MetricExporterBuilder {

Check warning on line 71 in opentelemetry-otlp/src/metric.rs

Codecov / codecov/patch

opentelemetry-otlp/src/metric.rs#L70-L71

Added lines #L70 - L71 were not covered by tests
client: self.client,
temporality,
}
}
}

#[cfg(feature = "grpc-tonic")]
impl MetricsExporterBuilder<TonicExporterBuilderSet> {
pub fn build(self) -> MetricResult<MetricsExporter> {
impl MetricExporterBuilder<TonicExporterBuilderSet> {
pub fn build(self) -> MetricResult<MetricExporter> {

Check warning on line 80 in opentelemetry-otlp/src/metric.rs

Codecov / codecov/patch

opentelemetry-otlp/src/metric.rs#L80

Added line #L80 was not covered by tests
let exporter = self.client.0.build_metrics_exporter(self.temporality)?;
Ok(exporter)
}
}

#[cfg(any(feature = "http-proto", feature = "http-json"))]
impl MetricsExporterBuilder<HttpExporterBuilderSet> {
pub fn build(self) -> MetricResult<MetricsExporter> {
impl MetricExporterBuilder<HttpExporterBuilderSet> {
pub fn build(self) -> MetricResult<MetricExporter> {

Check warning on line 88 in opentelemetry-otlp/src/metric.rs

Codecov / codecov/patch

opentelemetry-otlp/src/metric.rs#L88

Added line #L88 was not covered by tests
let exporter = self.client.0.build_metrics_exporter(self.temporality)?;
Ok(exporter)
}
}

#[cfg(feature = "grpc-tonic")]
impl HasExportConfig for MetricsExporterBuilder<TonicExporterBuilderSet> {
impl HasExportConfig for MetricExporterBuilder<TonicExporterBuilderSet> {
fn export_config(&mut self) -> &mut crate::ExportConfig {
&mut self.client.0.exporter_config
}
}

#[cfg(any(feature = "http-proto", feature = "http-json"))]
impl HasExportConfig for MetricsExporterBuilder<HttpExporterBuilderSet> {
impl HasExportConfig for MetricExporterBuilder<HttpExporterBuilderSet> {
fn export_config(&mut self) -> &mut crate::ExportConfig {
&mut self.client.0.exporter_config
}
}

#[cfg(feature = "grpc-tonic")]
impl HasTonicConfig for MetricsExporterBuilder<TonicExporterBuilderSet> {
impl HasTonicConfig for MetricExporterBuilder<TonicExporterBuilderSet> {
fn tonic_config(&mut self) -> &mut crate::TonicConfig {
&mut self.client.0.tonic_config
}
}

#[cfg(any(feature = "http-proto", feature = "http-json"))]
impl HasHttpConfig for MetricsExporterBuilder<HttpExporterBuilderSet> {
impl HasHttpConfig for MetricExporterBuilder<HttpExporterBuilderSet> {
fn http_client_config(&mut self) -> &mut crate::exporter::http::HttpConfig {
&mut self.client.0.http_config
}
@@ -127,19 +127,19 @@
}

/// Export metrics in OTEL format.
pub struct MetricsExporter {
pub struct MetricExporter {
client: Box<dyn MetricsClient>,
temporality: Temporality,
}

impl Debug for MetricsExporter {
impl Debug for MetricExporter {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
f.debug_struct("MetricsExporter").finish()
f.debug_struct("MetricExporter").finish()

Check warning on line 137 in opentelemetry-otlp/src/metric.rs

Codecov / codecov/patch

opentelemetry-otlp/src/metric.rs#L137

Added line #L137 was not covered by tests
}
}

#[async_trait]
impl PushMetricsExporter for MetricsExporter {
impl PushMetricExporter for MetricExporter {
async fn export(&self, metrics: &mut ResourceMetrics) -> MetricResult<()> {
self.client.export(metrics).await
}
@@ -158,15 +158,15 @@
}
}

impl MetricsExporter {
/// Obtain a builder to configure a [MetricsExporter].
pub fn builder() -> MetricsExporterBuilder<NoExporterBuilderSet> {
MetricsExporterBuilder::default()
impl MetricExporter {
/// Obtain a builder to configure a [MetricExporter].
pub fn builder() -> MetricExporterBuilder<NoExporterBuilderSet> {
MetricExporterBuilder::default()

Check warning on line 164 in opentelemetry-otlp/src/metric.rs

Codecov / codecov/patch

opentelemetry-otlp/src/metric.rs#L163-L164

Added lines #L163 - L164 were not covered by tests
}

/// Create a new metrics exporter
pub fn new(client: impl MetricsClient, temporality: Temporality) -> MetricsExporter {
MetricsExporter {
pub fn new(client: impl MetricsClient, temporality: Temporality) -> MetricExporter {
MetricExporter {

Check warning on line 169 in opentelemetry-otlp/src/metric.rs

Codecov / codecov/patch

opentelemetry-otlp/src/metric.rs#L168-L169

Added lines #L168 - L169 were not covered by tests
client: Box::new(client),
temporality,
}
30 changes: 17 additions & 13 deletions opentelemetry-sdk/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -5,20 +5,24 @@
- Bump MSRV to 1.70 [#2179](https://github.com/open-telemetry/opentelemetry-rust/pull/2179)
- Implement `LogRecord::set_trace_context` for `LogRecord`. Respect any trace context set on a `LogRecord` when emitting through a `Logger`.
- Improved `LoggerProvider` shutdown handling to prevent redundant shutdown calls when `drop` is invoked. [#2195](https://github.com/open-telemetry/opentelemetry-rust/pull/2195)
- **BREAKING**: [#2217](https://github.com/open-telemetry/opentelemetry-rust/pull/2217)
- **Replaced**: Removed `{Delta,Cumulative}TemporalitySelector::new()` in favor of directly using `Temporality` enum to simplify the configuration of MetricsExporterBuilder with different temporalities.
- When creating new metric instruments, SDK would return a no-op instrument if the validation fails. [#2166](https://github.com/open-telemetry/opentelemetry-rust/pull/2166)
- **Breaking change for Metrics users:** The `init` method used to create instruments has been renamed to `build`.

Before:
```rust
let counter = meter.u64_counter("my_counter").init();
```

Now:
```rust
let counter = meter.u64_counter("my_counter").build();
```
- **BREAKING for Metrics users**:
- **Replaced**
- ([#2217](https://github.com/open-telemetry/opentelemetry-rust/pull/2217)): Removed `{Delta,Cumulative}TemporalitySelector::new()` in favor of directly using `Temporality` enum to simplify the configuration of MetricsExporterBuilder with different temporalities.
- **Renamed**
- ([#2232](https://github.com/open-telemetry/opentelemetry-rust/pull/2232)): The `init` method used to create instruments has been renamed to `build`.
Before:
```rust
let counter = meter.u64_counter("my_counter").init();
```
Now:
```rust
let counter = meter.u64_counter("my_counter").build();
```
- ([#2255](https://github.com/open-telemetry/opentelemetry-rust/pull/2255)): de-pluralize Metric types.
- `PushMetricsExporter` -> `PushMetricExporter`
- `InMemoryMetricsExporter` -> `InMemoryMetricExporter`
- `InMemoryMetricsExporterBuilder` -> `InMemoryMetricExporterBuilder`
- **BREAKING**: [#2220](https://github.com/open-telemetry/opentelemetry-rust/pull/2220)
- Removed `InstrumentationLibrary` re-export and its `Scope` alias, use `opentelemetry::InstrumentationLibrary` instead.
- Unified builders across signals
Rate limit · GitHub

Whoa there!

You have triggered an abuse detection mechanism.

Please wait a few minutes before you try again;
in some cases this may take up to an hour.

Rate limit · GitHub

Whoa there!

You have triggered an abuse detection mechanism.

Please wait a few minutes before you try again;
in some cases this may take up to an hour.