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_counter_to_prometheus(self): meter = get_meter_provider().get_meter(__name__) metric = meter.create_metric( "test@name", "testdesc", "unit", int, metrics.Counter, ) labels = {"environment@": "staging", "os": "Windows"} key_labels = metrics.get_dict_as_key(labels) aggregator = SumAggregator() aggregator.update(123) aggregator.take_checkpoint() record = MetricRecord(metric, key_labels, aggregator) collector = CustomCollector("testprefix") collector.add_metrics_data([record]) for prometheus_metric in collector.collect(): self.assertEqual(type(prometheus_metric), CounterMetricFamily) self.assertEqual(prometheus_metric.name, "testprefix_test_name") self.assertEqual(prometheus_metric.documentation, "testdesc") self.assertTrue(len(prometheus_metric.samples) == 1) self.assertEqual(prometheus_metric.samples[0].value, 123) self.assertTrue(len(prometheus_metric.samples[0].labels) == 2) self.assertEqual( prometheus_metric.samples[0].labels["environment_"], "staging") self.assertEqual(prometheus_metric.samples[0].labels["os"], "Windows")
def test_observe(self): observer = metrics.UpDownSumObserver(None, "name", "desc", "unit", int, Mock(), ("key", ), True) labels = {"key": "value"} key_labels = metrics.get_dict_as_key(labels) values = (37, 42, 14, 30) for val in values: observer.observe(val, labels) self.assertEqual(observer.aggregators[key_labels].current, values[-1])
def test_bind(self): meter = metrics.MeterProvider().get_meter(__name__) metric_types = [metrics.Counter, metrics.ValueRecorder] labels = {"key": "value"} key_labels = metrics.get_dict_as_key(labels) for _type in metric_types: metric = _type("name", "desc", "unit", int, meter) bound_instrument = metric.bind(labels) self.assertEqual(metric.bound_instruments.get(key_labels), bound_instrument)
def test_invalid_metric(self): meter = get_meter_provider().get_meter(__name__) metric = meter.create_metric("tesname", "testdesc", "unit", int, StubMetric) labels = {"environment": "staging"} key_labels = metrics.get_dict_as_key(labels) record = MetricRecord(metric, key_labels, None) collector = CustomCollector("testprefix") collector.add_metrics_data([record]) collector.collect() self.assertLogs("opentelemetry.exporter.prometheus", level="WARNING")
def setUpClass(cls): # pylint: disable=protected-access cls._resource_labels = { "key_with_str_value": "some string", "key_with_int_val": 321, "key_with_true": True, } metrics.set_meter_provider( MeterProvider(resource=Resource(cls._resource_labels))) cls._meter = metrics.get_meter(__name__) cls._labels = {"environment": "staging", "number": 321} cls._key_labels = get_dict_as_key(cls._labels)
def test_observe(self): observer = metrics.ValueObserver(None, "name", "desc", "unit", int, Mock(), ("key", ), True) labels = {"key": "value"} key_labels = metrics.get_dict_as_key(labels) values = (37, 42, 7, 21) for val in values: observer.observe(val, labels) self.assertEqual( observer.aggregators[key_labels].mmsc.current, (min(values), max(values), sum(values), len(values)), ) self.assertEqual(observer.aggregators[key_labels].current, values[-1])
def setUp(self): set_meter_provider(metrics.MeterProvider()) self._meter = get_meter_provider().get_meter(__name__) self._test_metric = self._meter.create_metric( "testname", "testdesc", "unit", int, metrics.Counter, ) labels = {"environment": "staging"} self._labels_key = metrics.get_dict_as_key(labels) self._mock_registry_register = mock.Mock() self._registry_register_patch = mock.patch( "prometheus_client.core.REGISTRY.register", side_effect=self._mock_registry_register, )
def setUpClass(cls): # pylint: disable=protected-access metrics.set_meter_provider(MeterProvider()) cls._meter = metrics.get_meter(__name__) cls._labels = {"environment": "staging"} cls._key_labels = get_dict_as_key(cls._labels)