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),
     )
Пример #2
0
    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])
Пример #4
0
 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)
Пример #5
0
 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])
Пример #8
0
    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,
        )
Пример #9
0
 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)