def test_export(self): meter = metrics.MeterProvider().get_meter(__name__) exporter = ConsoleMetricsExporter() metric = metrics.Counter( "available memory", "available memory", "bytes", int, meter, ("environment", ), ) labels = {"environment": "staging"} aggregator = SumAggregator() record = MetricRecord(metric, labels, aggregator) result = '{}(data="{}", labels="{}", value={})'.format( ConsoleMetricsExporter.__name__, metric, labels, aggregator.checkpoint, ) with mock.patch("sys.stdout") as mock_stdout: exporter.export([record]) mock_stdout.write.assert_any_call(result)
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_ungrouped_batcher_process_not_stateful(self): meter = metrics.MeterProvider().get_meter(__name__) batcher = UngroupedBatcher(True) aggregator = SumAggregator() metric = metrics.Counter( "available memory", "available memory", "bytes", int, meter, ("environment", ), ) labels = () _batch_map = {} aggregator.update(1.0) batcher._batch_map = _batch_map record = metrics.Record(metric, labels, aggregator) batcher.process(record) self.assertEqual(len(batcher._batch_map), 1) self.assertIsNotNone(batcher._batch_map.get((metric, labels))) self.assertEqual(batcher._batch_map.get((metric, labels)).current, 0) self.assertEqual( batcher._batch_map.get((metric, labels)).checkpoint, 1.0)
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)
def test_add(self): metric = metrics.Counter("name", "desc", "unit", int, ("key", )) handle = metric.get_handle(("value", )) metric.add(("value", ), 3) metric.add(("value", ), 2) self.assertEqual(handle.data, 5)