diff --git a/docs/examples/basic_meter/observer.py b/docs/examples/basic_meter/observer.py index aa70abe2a44..b61b9e4db80 100644 --- a/docs/examples/basic_meter/observer.py +++ b/docs/examples/basic_meter/observer.py @@ -19,7 +19,7 @@ import psutil from opentelemetry import metrics -from opentelemetry.sdk.metrics import MeterProvider +from opentelemetry.sdk.metrics import MeterProvider, ValueObserver from opentelemetry.sdk.metrics.export import ConsoleMetricsExporter from opentelemetry.sdk.metrics.export.batcher import UngroupedBatcher from opentelemetry.sdk.metrics.export.controller import PushController @@ -43,6 +43,7 @@ def get_cpu_usage_callback(observer): description="per-cpu usage", unit="1", value_type=float, + observer_type=ValueObserver, label_keys=("cpu_number",), ) diff --git a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/metrics_exporter/__init__.py b/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/metrics_exporter/__init__.py index faa0788c7f1..bb1a1ee888c 100644 --- a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/metrics_exporter/__init__.py +++ b/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/metrics_exporter/__init__.py @@ -114,10 +114,10 @@ def translate_to_collector( ) metric_descriptor = metrics_pb2.MetricDescriptor( - name=metric_record.metric.name, - description=metric_record.metric.description, - unit=metric_record.metric.unit, - type=get_collector_metric_type(metric_record.metric), + name=metric_record.instrument.name, + description=metric_record.instrument.description, + unit=metric_record.instrument.unit, + type=get_collector_metric_type(metric_record.instrument), label_keys=label_keys, ) @@ -151,14 +151,14 @@ def get_collector_point(metric_record: MetricRecord) -> metrics_pb2.Point: metric_record.aggregator.last_update_timestamp ) ) - if metric_record.metric.value_type == int: + if metric_record.instrument.value_type == int: point.int64_value = metric_record.aggregator.checkpoint - elif metric_record.metric.value_type == float: + elif metric_record.instrument.value_type == float: point.double_value = metric_record.aggregator.checkpoint else: raise TypeError( "Unsupported metric type: {}".format( - metric_record.metric.value_type + metric_record.instrument.value_type ) ) return point diff --git a/ext/opentelemetry-ext-opencensusexporter/tests/test_otcollector_metrics_exporter.py b/ext/opentelemetry-ext-opencensusexporter/tests/test_otcollector_metrics_exporter.py index 18b4a328067..f9070126476 100644 --- a/ext/opentelemetry-ext-opencensusexporter/tests/test_otcollector_metrics_exporter.py +++ b/ext/opentelemetry-ext-opencensusexporter/tests/test_otcollector_metrics_exporter.py @@ -92,7 +92,7 @@ def test_get_collector_point(self): "testName", "testDescription", "unit", float, ValueRecorder ) result = metrics_exporter.get_collector_point( - MetricRecord(aggregator, self._key_labels, int_counter) + MetricRecord(int_counter, self._key_labels, aggregator) ) self.assertIsInstance(result, metrics_pb2.Point) self.assertIsInstance(result.timestamp, Timestamp) @@ -100,13 +100,13 @@ def test_get_collector_point(self): aggregator.update(123.5) aggregator.take_checkpoint() result = metrics_exporter.get_collector_point( - MetricRecord(aggregator, self._key_labels, float_counter) + MetricRecord(float_counter, self._key_labels, aggregator) ) self.assertEqual(result.double_value, 123.5) self.assertRaises( TypeError, metrics_exporter.get_collector_point( - MetricRecord(aggregator, self._key_labels, valuerecorder) + MetricRecord(valuerecorder, self._key_labels, aggregator) ), ) @@ -122,7 +122,7 @@ def test_export(self): "testname", "testdesc", "unit", int, Counter, ["environment"] ) record = MetricRecord( - aggregate.CounterAggregator(), self._key_labels, test_metric + test_metric, self._key_labels, aggregate.CounterAggregator(), ) result = collector_exporter.export([record]) @@ -147,7 +147,7 @@ def test_translate_to_collector(self): aggregator = aggregate.CounterAggregator() aggregator.update(123) aggregator.take_checkpoint() - record = MetricRecord(aggregator, self._key_labels, test_metric) + record = MetricRecord(test_metric, self._key_labels, aggregator,) output_metrics = metrics_exporter.translate_to_collector([record]) self.assertEqual(len(output_metrics), 1) self.assertIsInstance(output_metrics[0], metrics_pb2.Metric) diff --git a/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/__init__.py b/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/__init__.py index cc44621ac48..59ef3f1708a 100644 --- a/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/__init__.py +++ b/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/__init__.py @@ -152,22 +152,22 @@ def _translate_to_prometheus(self, metric_record: MetricRecord): metric_name = "" if self._prefix != "": metric_name = self._prefix + "_" - metric_name += self._sanitize(metric_record.metric.name) + metric_name += self._sanitize(metric_record.instrument.name) - if isinstance(metric_record.metric, Counter): + if isinstance(metric_record.instrument, Counter): prometheus_metric = CounterMetricFamily( name=metric_name, - documentation=metric_record.metric.description, + documentation=metric_record.instrument.description, labels=label_keys, ) prometheus_metric.add_metric( labels=label_values, value=metric_record.aggregator.checkpoint ) # TODO: Add support for histograms when supported in OT - elif isinstance(metric_record.metric, ValueRecorder): + elif isinstance(metric_record.instrument, ValueRecorder): prometheus_metric = UnknownMetricFamily( name=metric_name, - documentation=metric_record.metric.description, + documentation=metric_record.instrument.description, labels=label_keys, ) prometheus_metric.add_metric( @@ -176,7 +176,7 @@ def _translate_to_prometheus(self, metric_record: MetricRecord): else: logger.warning( - "Unsupported metric type. %s", type(metric_record.metric) + "Unsupported metric type. %s", type(metric_record.instrument) ) return prometheus_metric diff --git a/ext/opentelemetry-ext-prometheus/tests/test_prometheus_exporter.py b/ext/opentelemetry-ext-prometheus/tests/test_prometheus_exporter.py index f986e0c4f5f..1862f789c0c 100644 --- a/ext/opentelemetry-ext-prometheus/tests/test_prometheus_exporter.py +++ b/ext/opentelemetry-ext-prometheus/tests/test_prometheus_exporter.py @@ -67,7 +67,7 @@ def test_shutdown(self): def test_export(self): with self._registry_register_patch: record = MetricRecord( - CounterAggregator(), self._labels_key, self._test_metric + self._test_metric, self._labels_key, CounterAggregator(), ) exporter = PrometheusMetricsExporter() result = exporter.export([record]) @@ -90,7 +90,7 @@ def test_counter_to_prometheus(self): aggregator = CounterAggregator() aggregator.update(123) aggregator.take_checkpoint() - record = MetricRecord(aggregator, key_labels, metric) + record = MetricRecord(metric, key_labels, aggregator) collector = CustomCollector("testprefix") collector.add_metrics_data([record]) @@ -118,7 +118,7 @@ def test_invalid_metric(self): ) labels = {"environment": "staging"} key_labels = metrics.get_labels_as_key(labels) - record = MetricRecord(None, key_labels, metric) + record = MetricRecord(metric, key_labels, None) collector = CustomCollector("testprefix") collector.add_metrics_data([record]) collector.collect() diff --git a/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/__init__.py b/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/__init__.py index 88f36f4ac48..09c633f14b4 100644 --- a/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/__init__.py +++ b/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/__init__.py @@ -58,6 +58,7 @@ import psutil from opentelemetry import metrics +from opentelemetry.sdk.metrics import ValueObserver from opentelemetry.sdk.metrics.export import MetricsExporter from opentelemetry.sdk.metrics.export.controller import PushController @@ -106,6 +107,7 @@ def __init__( description="System memory", unit="bytes", value_type=int, + observer_type=ValueObserver, ) self.meter.register_observer( @@ -114,6 +116,7 @@ def __init__( description="System CPU", unit="seconds", value_type=float, + observer_type=ValueObserver, ) self.meter.register_observer( @@ -122,6 +125,7 @@ def __init__( description="System network bytes", unit="bytes", value_type=int, + observer_type=ValueObserver, ) self.meter.register_observer( @@ -130,6 +134,7 @@ def __init__( description="Runtime memory", unit="bytes", value_type=int, + observer_type=ValueObserver, ) self.meter.register_observer( @@ -138,6 +143,7 @@ def __init__( description="Runtime CPU", unit="seconds", value_type=float, + observer_type=ValueObserver, ) self.meter.register_observer( @@ -146,9 +152,10 @@ def __init__( description="Runtime: gc objects", unit="objects", value_type=int, + observer_type=ValueObserver, ) - def _get_system_memory(self, observer: metrics.Observer) -> None: + def _get_system_memory(self, observer: metrics.ValueObserver) -> None: """Observer callback for memory available Args: @@ -161,7 +168,7 @@ def _get_system_memory(self, observer: metrics.Observer) -> None: getattr(system_memory, metric), self._system_memory_labels ) - def _get_system_cpu(self, observer: metrics.Observer) -> None: + def _get_system_cpu(self, observer: metrics.ValueObserver) -> None: """Observer callback for system cpu Args: @@ -174,7 +181,7 @@ def _get_system_cpu(self, observer: metrics.Observer) -> None: getattr(cpu_times, _type), self._system_cpu_labels ) - def _get_network_bytes(self, observer: metrics.Observer) -> None: + def _get_network_bytes(self, observer: metrics.ValueObserver) -> None: """Observer callback for network bytes Args: @@ -187,7 +194,7 @@ def _get_network_bytes(self, observer: metrics.Observer) -> None: getattr(net_io, _type), self._network_bytes_labels ) - def _get_runtime_memory(self, observer: metrics.Observer) -> None: + def _get_runtime_memory(self, observer: metrics.ValueObserver) -> None: """Observer callback for runtime memory Args: @@ -200,7 +207,7 @@ def _get_runtime_memory(self, observer: metrics.Observer) -> None: getattr(proc_memory, _type), self._runtime_memory_labels ) - def _get_runtime_cpu(self, observer: metrics.Observer) -> None: + def _get_runtime_cpu(self, observer: metrics.ValueObserver) -> None: """Observer callback for runtime CPU Args: @@ -213,7 +220,7 @@ def _get_runtime_cpu(self, observer: metrics.Observer) -> None: getattr(proc_cpu, _type), self._runtime_cpu_labels ) - def _get_runtime_gc_count(self, observer: metrics.Observer) -> None: + def _get_runtime_gc_count(self, observer: metrics.ValueObserver) -> None: """Observer callback for garbage collection Args: diff --git a/ext/opentelemetry-ext-system-metrics/tests/test_system_metrics.py b/ext/opentelemetry-ext-system-metrics/tests/test_system_metrics.py index 70ead2c5152..b2d6bab4015 100644 --- a/ext/opentelemetry-ext-system-metrics/tests/test_system_metrics.py +++ b/ext/opentelemetry-ext-system-metrics/tests/test_system_metrics.py @@ -54,7 +54,7 @@ def _assert_metrics(self, observer_name, system_metrics, expected): ): if ( metric.labels in expected - and metric.metric.name == observer_name + and metric.instrument.name == observer_name ): self.assertEqual( metric.aggregator.checkpoint.last, expected[metric.labels], diff --git a/opentelemetry-api/CHANGELOG.md b/opentelemetry-api/CHANGELOG.md index a67c840190c..4503489fa85 100644 --- a/opentelemetry-api/CHANGELOG.md +++ b/opentelemetry-api/CHANGELOG.md @@ -6,6 +6,8 @@ ([#751](https://github.com/open-telemetry/opentelemetry-python/pull/751)) - Rename Measure to ValueRecorder in metrics ([#761](https://github.com/open-telemetry/opentelemetry-python/pull/761)) +- Rename Observer to ValueObserver + ([#764](https://github.com/open-telemetry/opentelemetry-python/pull/764)) ## 0.8b0 diff --git a/opentelemetry-api/src/opentelemetry/metrics/__init__.py b/opentelemetry-api/src/opentelemetry/metrics/__init__.py index 7d16c56a98b..da47356e058 100644 --- a/opentelemetry-api/src/opentelemetry/metrics/__init__.py +++ b/opentelemetry-api/src/opentelemetry/metrics/__init__.py @@ -162,7 +162,6 @@ class Observer(abc.ABC): """An observer type metric instrument used to capture a current set of values. - Observer instruments are asynchronous, a callback is invoked with the observer instrument as argument allowing the user to capture multiple values per collection interval. @@ -190,6 +189,18 @@ def observe(self, value: ValueT, labels: Dict[str, str]) -> None: """ +class ValueObserver(Observer): + """No-op implementation of ``ValueObserver``.""" + + def observe(self, value: ValueT, labels: Dict[str, str]) -> None: + """Captures ``value`` to the valueobserver. + + Args: + value: The value to capture to this valueobserver metric. + labels: Labels associated to ``value``. + """ + + class MeterProvider(abc.ABC): @abc.abstractmethod def get_meter( @@ -232,7 +243,9 @@ def get_meter( return DefaultMeter() -MetricT = TypeVar("MetricT", Counter, ValueRecorder, Observer) +MetricT = TypeVar("MetricT", Counter, ValueRecorder) +InstrumentT = TypeVar("InstrumentT", Counter, Observer, ValueRecorder) +ObserverT = TypeVar("ObserverT", bound=Observer) ObserverCallbackT = Callable[[Observer], None] @@ -297,6 +310,7 @@ def register_observer( description: str, unit: str, value_type: Type[ValueT], + observer_type: Type[ObserverT], label_keys: Sequence[str] = (), enabled: bool = True, ) -> "Observer": @@ -310,6 +324,7 @@ def register_observer( unit: Unit of the metric values following the UCUM convention (https://unitsofmeasure.org/ucum.html). value_type: The type of values being recorded by the metric. + observer_type: The type of observer being registered. label_keys: The keys for the labels with dynamic values. enabled: Whether to report the metric by default. Returns: A new ``Observer`` metric instrument. @@ -354,6 +369,7 @@ def register_observer( description: str, unit: str, value_type: Type[ValueT], + observer_type: Type[ObserverT], label_keys: Sequence[str] = (), enabled: bool = True, ) -> "Observer": diff --git a/opentelemetry-api/tests/test_implementation.py b/opentelemetry-api/tests/test_implementation.py index 735ac4a683f..d0f9404a911 100644 --- a/opentelemetry-api/tests/test_implementation.py +++ b/opentelemetry-api/tests/test_implementation.py @@ -83,7 +83,9 @@ def test_create_metric(self): def test_register_observer(self): meter = metrics.DefaultMeter() callback = mock.Mock() - observer = meter.register_observer(callback, "", "", "", int, (), True) + observer = meter.register_observer( + callback, "", "", "", int, metrics.ValueObserver + ) self.assertIsInstance(observer, metrics.DefaultObserver) def test_unregister_observer(self): diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md index 0e982b6bc14..d8eb23ab525 100644 --- a/opentelemetry-sdk/CHANGELOG.md +++ b/opentelemetry-sdk/CHANGELOG.md @@ -8,6 +8,8 @@ ([#761](https://github.com/open-telemetry/opentelemetry-python/pull/761)) - bugfix: byte type attributes are decoded before adding to attributes dict ([#775](https://github.com/open-telemetry/opentelemetry-python/pull/775)) +- Rename Observer to ValueObserver + ([#764](https://github.com/open-telemetry/opentelemetry-python/pull/764)) ## 0.8b0 diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/__init__.py index f231182cc28..507e00d8ead 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/__init__.py @@ -190,8 +190,8 @@ def record( UPDATE_FUNCTION = record -class Observer(metrics_api.Observer): - """See `opentelemetry.metrics.Observer`.""" +class ValueObserver(metrics_api.ValueObserver): + """See `opentelemetry.metrics.ValueObserver`.""" def __init__( self, @@ -257,11 +257,11 @@ class Record: def __init__( self, - metric: metrics_api.MetricT, + instrument: metrics_api.InstrumentT, labels: Dict[str, str], aggregator: Aggregator, ): - self.metric = metric + self.instrument = instrument self.labels = labels self.aggregator = aggregator @@ -374,10 +374,11 @@ def register_observer( description: str, unit: str, value_type: Type[metrics_api.ValueT], + observer_type=Type[metrics_api.ObserverT], label_keys: Sequence[str] = (), enabled: bool = True, ) -> metrics_api.Observer: - ob = Observer( + ob = observer_type( callback, name, description, @@ -391,7 +392,7 @@ def register_observer( self.observers.add(ob) return ob - def unregister_observer(self, observer: "Observer") -> None: + def unregister_observer(self, observer: metrics_api.Observer) -> None: with self.observers_lock: self.observers.remove(observer) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/__init__.py index f5a8693268e..16911f94efb 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/__init__.py @@ -27,13 +27,13 @@ class MetricsExportResult(Enum): class MetricRecord: def __init__( self, - aggregator: Aggregator, + instrument: metrics_api.InstrumentT, labels: Tuple[Tuple[str, str]], - metric: metrics_api.MetricT, + aggregator: Aggregator, ): - self.aggregator = aggregator + self.instrument = instrument self.labels = labels - self.metric = metric + self.aggregator = aggregator class MetricsExporter: @@ -79,7 +79,7 @@ def export( print( '{}(data="{}", labels="{}", value={})'.format( type(self).__name__, - record.metric, + record.instrument, record.labels, record.aggregator.checkpoint, ) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/aggregate.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/aggregate.py index 7e1baba2c77..1745d854e9d 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/aggregate.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/aggregate.py @@ -125,7 +125,7 @@ def merge(self, other): ) -class ObserverAggregator(Aggregator): +class ValueObserverAggregator(Aggregator): """Same as MinMaxSumCount but also with last value.""" _TYPE = namedtuple("minmaxsumcountlast", "min max sum count last") diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/batcher.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/batcher.py index eda504d5684..db3675ecd61 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/batcher.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/batcher.py @@ -15,13 +15,18 @@ import abc from typing import Sequence, Type -from opentelemetry.metrics import Counter, MetricT, Observer, ValueRecorder +from opentelemetry.metrics import ( + Counter, + InstrumentT, + ValueObserver, + ValueRecorder, +) from opentelemetry.sdk.metrics.export import MetricRecord from opentelemetry.sdk.metrics.export.aggregate import ( Aggregator, CounterAggregator, MinMaxSumCountAggregator, - ObserverAggregator, + ValueObserverAggregator, ) @@ -41,18 +46,18 @@ def __init__(self, stateful: bool): # (deltas) self.stateful = stateful - def aggregator_for(self, metric_type: Type[MetricT]) -> Aggregator: - """Returns an aggregator based on metric type. + def aggregator_for(self, instrument_type: Type[InstrumentT]) -> Aggregator: + """Returns an aggregator based on metric instrument type. Aggregators keep track of and updates values when metrics get updated. """ # pylint:disable=R0201 - if issubclass(metric_type, Counter): + if issubclass(instrument_type, Counter): return CounterAggregator() - if issubclass(metric_type, ValueRecorder): + if issubclass(instrument_type, ValueRecorder): return MinMaxSumCountAggregator() - if issubclass(metric_type, Observer): - return ObserverAggregator() + if issubclass(instrument_type, ValueObserver): + return ValueObserverAggregator() # TODO: Add other aggregators return CounterAggregator() @@ -63,8 +68,8 @@ def checkpoint_set(self) -> Sequence[MetricRecord]: data in all of the aggregators in this batcher. """ metric_records = [] - for (metric, labels), aggregator in self._batch_map.items(): - metric_records.append(MetricRecord(aggregator, labels, metric)) + for (instrument, labels), aggregator in self._batch_map.items(): + metric_records.append(MetricRecord(instrument, labels, aggregator)) return metric_records def finished_collection(self): @@ -90,7 +95,7 @@ class UngroupedBatcher(Batcher): def process(self, record): # Checkpoints the current aggregator value to be collected for export record.aggregator.take_checkpoint() - batch_key = (record.metric, record.labels) + batch_key = (record.instrument, record.labels) batch_value = self._batch_map.get(batch_key) aggregator = record.aggregator if batch_value: @@ -101,6 +106,6 @@ def process(self, record): if self.stateful: # if stateful batcher, create a copy of the aggregator and update # it with the current checkpointed value for long-term storage - aggregator = self.aggregator_for(record.metric.__class__) + aggregator = self.aggregator_for(record.instrument.__class__) aggregator.merge(record.aggregator) self._batch_map[batch_key] = aggregator diff --git a/opentelemetry-sdk/tests/metrics/export/test_export.py b/opentelemetry-sdk/tests/metrics/export/test_export.py index c77a132459c..178e41b2134 100644 --- a/opentelemetry-sdk/tests/metrics/export/test_export.py +++ b/opentelemetry-sdk/tests/metrics/export/test_export.py @@ -26,7 +26,7 @@ from opentelemetry.sdk.metrics.export.aggregate import ( CounterAggregator, MinMaxSumCountAggregator, - ObserverAggregator, + ValueObserverAggregator, ) from opentelemetry.sdk.metrics.export.batcher import UngroupedBatcher from opentelemetry.sdk.metrics.export.controller import PushController @@ -48,7 +48,7 @@ def test_export(self): ) labels = {"environment": "staging"} aggregator = CounterAggregator() - record = MetricRecord(aggregator, labels, metric) + record = MetricRecord(metric, labels, aggregator) result = '{}(data="{}", labels="{}", value={})'.format( ConsoleMetricsExporter.__name__, metric, @@ -90,7 +90,7 @@ def test_checkpoint_set(self): batcher._batch_map = _batch_map records = batcher.checkpoint_set() self.assertEqual(len(records), 1) - self.assertEqual(records[0].metric, metric) + self.assertEqual(records[0].instrument, metric) self.assertEqual(records[0].labels, labels) self.assertEqual(records[0].aggregator, aggregator) @@ -432,11 +432,11 @@ def test_concurrent_update_and_checkpoint(self): self.assertEqual(checkpoint_total, fut.result()) -class TestObserverAggregator(unittest.TestCase): +class TestValueObserverAggregator(unittest.TestCase): @mock.patch("opentelemetry.sdk.metrics.export.aggregate.time_ns") def test_update(self, time_mock): time_mock.return_value = 123 - observer = ObserverAggregator() + observer = ValueObserverAggregator() # test current values without any update self.assertEqual(observer.mmsc.current, (None, None, None, 0)) self.assertIsNone(observer.current) @@ -455,7 +455,7 @@ def test_update(self, time_mock): self.assertEqual(observer.current, values[-1]) def test_checkpoint(self): - observer = ObserverAggregator() + observer = ValueObserverAggregator() # take checkpoint wihtout any update observer.take_checkpoint() @@ -473,15 +473,19 @@ def test_checkpoint(self): ) def test_merge(self): - observer1 = ObserverAggregator() - observer2 = ObserverAggregator() + observer1 = ValueObserverAggregator() + observer2 = ValueObserverAggregator() mmsc_checkpoint1 = MinMaxSumCountAggregator._TYPE(3, 150, 101, 3) mmsc_checkpoint2 = MinMaxSumCountAggregator._TYPE(1, 33, 44, 2) - checkpoint1 = ObserverAggregator._TYPE(*(mmsc_checkpoint1 + (23,))) + checkpoint1 = ValueObserverAggregator._TYPE( + *(mmsc_checkpoint1 + (23,)) + ) - checkpoint2 = ObserverAggregator._TYPE(*(mmsc_checkpoint2 + (27,))) + checkpoint2 = ValueObserverAggregator._TYPE( + *(mmsc_checkpoint2 + (27,)) + ) observer1.mmsc.checkpoint = mmsc_checkpoint1 observer2.mmsc.checkpoint = mmsc_checkpoint2 @@ -507,15 +511,19 @@ def test_merge(self): self.assertEqual(observer1.last_update_timestamp, 123) def test_merge_last_updated(self): - observer1 = ObserverAggregator() - observer2 = ObserverAggregator() + observer1 = ValueObserverAggregator() + observer2 = ValueObserverAggregator() mmsc_checkpoint1 = MinMaxSumCountAggregator._TYPE(3, 150, 101, 3) mmsc_checkpoint2 = MinMaxSumCountAggregator._TYPE(1, 33, 44, 2) - checkpoint1 = ObserverAggregator._TYPE(*(mmsc_checkpoint1 + (23,))) + checkpoint1 = ValueObserverAggregator._TYPE( + *(mmsc_checkpoint1 + (23,)) + ) - checkpoint2 = ObserverAggregator._TYPE(*(mmsc_checkpoint2 + (27,))) + checkpoint2 = ValueObserverAggregator._TYPE( + *(mmsc_checkpoint2 + (27,)) + ) observer1.mmsc.checkpoint = mmsc_checkpoint1 observer2.mmsc.checkpoint = mmsc_checkpoint2 @@ -541,15 +549,19 @@ def test_merge_last_updated(self): self.assertEqual(observer1.last_update_timestamp, 123) def test_merge_last_updated_none(self): - observer1 = ObserverAggregator() - observer2 = ObserverAggregator() + observer1 = ValueObserverAggregator() + observer2 = ValueObserverAggregator() mmsc_checkpoint1 = MinMaxSumCountAggregator._TYPE(3, 150, 101, 3) mmsc_checkpoint2 = MinMaxSumCountAggregator._TYPE(1, 33, 44, 2) - checkpoint1 = ObserverAggregator._TYPE(*(mmsc_checkpoint1 + (23,))) + checkpoint1 = ValueObserverAggregator._TYPE( + *(mmsc_checkpoint1 + (23,)) + ) - checkpoint2 = ObserverAggregator._TYPE(*(mmsc_checkpoint2 + (27,))) + checkpoint2 = ValueObserverAggregator._TYPE( + *(mmsc_checkpoint2 + (27,)) + ) observer1.mmsc.checkpoint = mmsc_checkpoint1 observer2.mmsc.checkpoint = mmsc_checkpoint2 @@ -575,11 +587,13 @@ def test_merge_last_updated_none(self): self.assertEqual(observer1.last_update_timestamp, 100) def test_merge_with_empty(self): - observer1 = ObserverAggregator() - observer2 = ObserverAggregator() + observer1 = ValueObserverAggregator() + observer2 = ValueObserverAggregator() mmsc_checkpoint1 = MinMaxSumCountAggregator._TYPE(3, 150, 101, 3) - checkpoint1 = ObserverAggregator._TYPE(*(mmsc_checkpoint1 + (23,))) + checkpoint1 = ValueObserverAggregator._TYPE( + *(mmsc_checkpoint1 + (23,)) + ) observer1.mmsc.checkpoint = mmsc_checkpoint1 observer1.checkpoint = checkpoint1 diff --git a/opentelemetry-sdk/tests/metrics/test_metrics.py b/opentelemetry-sdk/tests/metrics/test_metrics.py index 9d5d2b15d8e..4c2d691549d 100644 --- a/opentelemetry-sdk/tests/metrics/test_metrics.py +++ b/opentelemetry-sdk/tests/metrics/test_metrics.py @@ -88,7 +88,7 @@ def callback(observer): self.assertIsInstance(observer, metrics_api.Observer) observer.observe(45, {}) - observer = metrics.Observer( + observer = metrics.ValueObserver( callback, "name", "desc", "unit", int, meter, (), True ) @@ -165,7 +165,7 @@ def test_register_observer(self): callback = mock.Mock() observer = meter.register_observer( - callback, "name", "desc", "unit", int, (), True + callback, "name", "desc", "unit", int, metrics.ValueObserver ) self.assertIsInstance(observer, metrics_api.Observer) @@ -185,7 +185,7 @@ def test_unregister_observer(self): callback = mock.Mock() observer = meter.register_observer( - callback, "name", "desc", "unit", int, (), True + callback, "name", "desc", "unit", int, metrics.ValueObserver ) meter.unregister_observer(observer) @@ -290,10 +290,10 @@ def test_record(self): ) -class TestObserver(unittest.TestCase): +class TestValueObserver(unittest.TestCase): def test_observe(self): meter = metrics.MeterProvider().get_meter(__name__) - observer = metrics.Observer( + observer = metrics.ValueObserver( None, "name", "desc", "unit", int, meter, ("key",), True ) labels = {"key": "value"} @@ -310,7 +310,7 @@ def test_observe(self): def test_observe_disabled(self): meter = metrics.MeterProvider().get_meter(__name__) - observer = metrics.Observer( + observer = metrics.ValueObserver( None, "name", "desc", "unit", int, meter, ("key",), False ) labels = {"key": "value"} @@ -320,7 +320,7 @@ def test_observe_disabled(self): @mock.patch("opentelemetry.sdk.metrics.logger") def test_observe_incorrect_type(self, logger_mock): meter = metrics.MeterProvider().get_meter(__name__) - observer = metrics.Observer( + observer = metrics.ValueObserver( None, "name", "desc", "unit", int, meter, ("key",), True ) labels = {"key": "value"} @@ -332,7 +332,7 @@ def test_run(self): meter = metrics.MeterProvider().get_meter(__name__) callback = mock.Mock() - observer = metrics.Observer( + observer = metrics.ValueObserver( callback, "name", "desc", "unit", int, meter, (), True ) @@ -346,7 +346,7 @@ def test_run_exception(self, logger_mock): callback = mock.Mock() callback.side_effect = Exception("We have a problem!") - observer = metrics.Observer( + observer = metrics.ValueObserver( callback, "name", "desc", "unit", int, meter, (), True )