def test_default_aggregator(self, logger_mock): meter = metrics.MeterProvider().get_meter(__name__) counter = metrics.Counter("", "", "1", int, meter) self.assertEqual(view.get_default_aggregator(counter), aggregate.SumAggregator) ud_counter = metrics.UpDownCounter("", "", "1", int, meter) self.assertEqual(view.get_default_aggregator(ud_counter), aggregate.SumAggregator) observer = metrics.SumObserver(lambda: None, "", "", "1", int) self.assertEqual( view.get_default_aggregator(observer), aggregate.LastValueAggregator, ) ud_observer = metrics.SumObserver(lambda: None, "", "", "1", int) self.assertEqual( view.get_default_aggregator(ud_observer), aggregate.LastValueAggregator, ) recorder = metrics.ValueRecorder("", "", "1", int, meter) self.assertEqual( view.get_default_aggregator(recorder), aggregate.MinMaxSumCountAggregator, ) v_observer = metrics.ValueObserver(lambda: None, "", "", "1", int) self.assertEqual( view.get_default_aggregator(v_observer), aggregate.ValueObserverAggregator, ) self.assertEqual(view.get_default_aggregator(DummyMetric()), aggregate.SumAggregator) self.assertEqual(logger_mock.warning.call_count, 1)
def observe(self, value: metrics_api.ValueT, labels: Dict[str, str]) -> None: key = get_dict_as_key(labels) if not self._validate_observe(value, key): return if key not in self.aggregators: # TODO: how to cleanup aggregators? self.aggregators[key] = get_default_aggregator(self)() aggregator = self.aggregators[key] aggregator.update(value)