diff --git a/CHANGELOG.md b/CHANGELOG.md index d43389891c4..c98bb873ce5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased](https://github.com/open-telemetry/opentelemetry-python/compare/v1.11.1-0.30b1...HEAD) +- Add variadic arguments to metric exporter/reader interfaces + ([#2654](https://github.com/open-telemetry/opentelemetry-python/pull/2654)) - Move Metrics API behind internal package ([#2651](https://github.com/open-telemetry/opentelemetry-python/pull/2651)) diff --git a/exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/_metric_exporter/__init__.py b/exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/_metric_exporter/__init__.py index 1ad5cc4d808..c40ff1ddd21 100644 --- a/exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/_metric_exporter/__init__.py +++ b/exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/_metric_exporter/__init__.py @@ -168,8 +168,10 @@ def _translate_data( ) ) - def export(self, metrics: Sequence[Metric]) -> MetricExportResult: + def export( + self, metrics: Sequence[Metric], *args, **kwargs + ) -> MetricExportResult: return self._export(metrics) - def shutdown(self): + def shutdown(self, *args, **kwargs): pass diff --git a/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py index 4d506626750..1b81f062c02 100644 --- a/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py +++ b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py @@ -110,12 +110,14 @@ def __init__(self, prefix: str = "") -> None: REGISTRY.register(self._collector) self._collector._callback = self.collect - def _receive_metrics(self, metrics: Iterable[Metric]) -> None: + def _receive_metrics( + self, metrics: Iterable[Metric], *args, **kwargs + ) -> None: if metrics is None: return self._collector.add_metrics_data(metrics) - def shutdown(self) -> bool: + def shutdown(self, *args, **kwargs) -> bool: REGISTRY.unregister(self._collector) return True diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/_metrics/_internal/export/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/_metrics/_internal/export/__init__.py index b99d7f8f03b..959006e2347 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/_metrics/_internal/export/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/_metrics/_internal/export/__init__.py @@ -52,7 +52,9 @@ class MetricExporter(ABC): """ @abstractmethod - def export(self, metrics: Sequence[Metric]) -> "MetricExportResult": + def export( + self, metrics: Sequence[Metric], *args, **kwargs + ) -> "MetricExportResult": """Exports a batch of telemetry data. Args: @@ -63,7 +65,7 @@ def export(self, metrics: Sequence[Metric]) -> "MetricExportResult": """ @abstractmethod - def shutdown(self) -> None: + def shutdown(self, *args, **kwargs) -> None: """Shuts down the exporter. Called when the SDK is shut down. @@ -87,13 +89,15 @@ def __init__( self.out = out self.formatter = formatter - def export(self, metrics: Sequence[Metric]) -> MetricExportResult: + def export( + self, metrics: Sequence[Metric], *args, **kwargs + ) -> MetricExportResult: for metric in metrics: self.out.write(self.formatter(metric)) self.out.flush() return MetricExportResult.SUCCESS - def shutdown(self) -> None: + def shutdown(self, *args, **kwargs) -> None: pass @@ -123,11 +127,11 @@ def get_metrics(self) -> List[Metric]: self._metrics = [] return metrics - def _receive_metrics(self, metrics: Iterable[Metric]): + def _receive_metrics(self, metrics: Iterable[Metric], *args, **kwargs): with self._lock: self._metrics = list(metrics) - def shutdown(self): + def shutdown(self, *args, **kwargs): pass @@ -193,7 +197,9 @@ def _ticker(self) -> None: # one last collection below before shutting down completely self.collect() - def _receive_metrics(self, metrics: Iterable[Metric]) -> None: + def _receive_metrics( + self, metrics: Iterable[Metric], *args, **kwargs + ) -> None: if metrics is None: return token = attach(set_value(_SUPPRESS_INSTRUMENTATION_KEY, True)) @@ -203,7 +209,7 @@ def _receive_metrics(self, metrics: Iterable[Metric]) -> None: _logger.exception("Exception while exporting metrics %s", str(e)) detach(token) - def shutdown(self): + def shutdown(self, *args, **kwargs): def _shutdown(): self._shutdown = True diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/_metrics/_internal/metric_reader.py b/opentelemetry-sdk/src/opentelemetry/sdk/_metrics/_internal/metric_reader.py index b84b873854f..afdc7083162 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/_metrics/_internal/metric_reader.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/_metrics/_internal/metric_reader.py @@ -162,11 +162,11 @@ def _set_collect_callback( self._collect = func @abstractmethod - def _receive_metrics(self, metrics: Iterable[Metric]): + def _receive_metrics(self, metrics: Iterable[Metric], *args, **kwargs): """Called by `MetricReader.collect` when it receives a batch of metrics""" @abstractmethod - def shutdown(self): + def shutdown(self, *args, **kwargs): """Shuts down the MetricReader. This method provides a way for the MetricReader to do any cleanup required. A metric reader can only be shutdown once, any subsequent calls are ignored and return