def test_release_bound_instrument(self): meter = metrics.MeterProvider().get_meter(__name__) label_keys = ("key1",) labels = {"key1": "value1"} counter = metrics.Counter( "name", "desc", "unit", float, meter, label_keys ) meter.metrics.add(counter) bound_counter = counter.bind(labels) bound_counter.add(4.0) valuerecorder = metrics.ValueRecorder( "name", "desc", "unit", float, meter, label_keys ) meter.metrics.add(valuerecorder) bound_valuerecorder = valuerecorder.bind(labels) bound_valuerecorder.record(42) bound_counter.release() bound_valuerecorder.release() # be sure that bound instruments are only released after collection self.assertEqual(len(counter.bound_instruments), 1) self.assertEqual(len(valuerecorder.bound_instruments), 1) meter.collect() self.assertEqual(len(counter.bound_instruments), 0) self.assertEqual(len(valuerecorder.bound_instruments), 0)
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 test_record_batch(self): meter = metrics.MeterProvider().get_meter(__name__) labels = {"key1": "value1", "key2": "value2", "key3": "value3"} counter = metrics.Counter("name", "desc", "unit", float, meter) valuerecorder = metrics.ValueRecorder( "name", "desc", "unit", float, meter ) counter_v = View(counter, SumAggregator) measure_v = View(valuerecorder, MinMaxSumCountAggregator) meter.register_view(counter_v) meter.register_view(measure_v) record_tuples = [(counter, 1.0), (valuerecorder, 3.0)] meter.record_batch(labels, record_tuples) labels_key = metrics.get_dict_as_key(labels) self.assertEqual( counter.bound_instruments[labels_key] .view_datas.pop() .aggregator.current, 1.0, ) self.assertEqual( valuerecorder.bound_instruments[labels_key] .view_datas.pop() .aggregator.current, (3.0, 3.0, 3.0, 1), )
def test_record(self): meter = metrics.MeterProvider().get_meter(__name__) metric = metrics.ValueRecorder("name", "desc", "unit", int, meter, ("key", )) labels = {"key": "value"} bound_valuerecorder = metric.bind(labels) values = (37, 42, 7) for val in values: metric.record(val, labels) self.assertEqual( bound_valuerecorder.aggregator.current, (min(values), max(values), sum(values), len(values)), )
def test_record_batch_multiple(self): meter = metrics.MeterProvider().get_meter(__name__) label_keys = ("key1", "key2", "key3") labels = {"key1": "value1", "key2": "value2", "key3": "value3"} counter = metrics.Counter("name", "desc", "unit", float, meter, label_keys) valuerecorder = metrics.ValueRecorder("name", "desc", "unit", float, meter, label_keys) record_tuples = [(counter, 1.0), (valuerecorder, 3.0)] meter.record_batch(labels, record_tuples) self.assertEqual(counter.bind(labels).aggregator.current, 1.0) self.assertEqual( valuerecorder.bind(labels).aggregator.current, (3.0, 3.0, 3.0, 1))
def test_record(self): meter = metrics.MeterProvider().get_meter(__name__) metric = metrics.ValueRecorder("name", "desc", "unit", int, meter) labels = {"key": "value"} measure_v = View(metric, MinMaxSumCountAggregator) bound_valuerecorder = metric.bind(labels) meter.register_view(measure_v) values = (37, 42, 7) for val in values: metric.record(val, labels) self.assertEqual( bound_valuerecorder.view_datas.pop().aggregator.current, (min(values), max(values), sum(values), len(values)), )
def test_direct_call_release_bound_instrument(self): meter = metrics.MeterProvider().get_meter(__name__) label_keys = ("key1", ) labels = {"key1": "value1"} counter = metrics.Counter("name", "desc", "unit", float, meter, label_keys) meter.metrics.add(counter) counter.add(4.0, labels) valuerecorder = metrics.ValueRecorder("name", "desc", "unit", float, meter, label_keys) meter.metrics.add(valuerecorder) valuerecorder.record(42.0, labels) self.assertEqual(len(counter.bound_instruments), 1) self.assertEqual(len(valuerecorder.bound_instruments), 1) meter.collect() self.assertEqual(len(counter.bound_instruments), 0) self.assertEqual(len(valuerecorder.bound_instruments), 0)