|
20 | 20 | from opentelemetry import metrics as metrics_api |
21 | 21 | from opentelemetry import trace as trace_api |
22 | 22 | from opentelemetry.sdk.metrics import MeterProvider |
23 | | -from opentelemetry.sdk.metrics.export import InMemoryMetricReader, MetricReader |
| 23 | +from opentelemetry.sdk.metrics.export import (InMemoryMetricReader, MetricReader, HistogramDataPoint, |
| 24 | + NumberDataPoint) |
| 25 | + |
24 | 26 | from opentelemetry.sdk.trace import TracerProvider, export |
25 | 27 | from opentelemetry.sdk.trace.export.in_memory_span_exporter import ( |
26 | 28 | InMemorySpanExporter, |
@@ -85,6 +87,61 @@ def sorted_spans(self, spans): # pylint: disable=R0201 |
85 | 87 | reverse=True, |
86 | 88 | ) |
87 | 89 |
|
| 90 | + def sorted_metrics(self, metrics): |
| 91 | + """ |
| 92 | + Sorts metrics by metric name. |
| 93 | + """ |
| 94 | + return sorted( |
| 95 | + metrics, |
| 96 | + key=lambda m: m.name, |
| 97 | + ) |
| 98 | + |
| 99 | + def get_sorted_metrics(self): |
| 100 | + resource_metrics = ( |
| 101 | + self.memory_metrics_reader.get_metrics_data().resource_metrics |
| 102 | + ) |
| 103 | + for metrics in resource_metrics: |
| 104 | + for scope_metrics in metrics.scope_metrics: |
| 105 | + all_metrics = list(scope_metrics.metrics) |
| 106 | + return self.sorted_metrics(all_metrics) |
| 107 | + |
| 108 | + def assert_metric_expected( |
| 109 | + self, metric, expected_value, expected_attributes |
| 110 | + ): |
| 111 | + data_point = next(iter(metric.data.data_points)) |
| 112 | + |
| 113 | + if isinstance(data_point, HistogramDataPoint): |
| 114 | + self.assertEqual( |
| 115 | + data_point.sum, |
| 116 | + expected_value, |
| 117 | + ) |
| 118 | + elif isinstance(data_point, NumberDataPoint): |
| 119 | + self.assertEqual( |
| 120 | + data_point.value, |
| 121 | + expected_value, |
| 122 | + ) |
| 123 | + |
| 124 | + self.assertDictEqual( |
| 125 | + expected_attributes, |
| 126 | + dict(data_point.attributes), |
| 127 | + ) |
| 128 | + |
| 129 | + def assert_duration_metric_expected( |
| 130 | + self, metric, duration_estimated, expected_attributes, est_delta=200 |
| 131 | + ): |
| 132 | + data_point = next(iter(metric.data.data_points)) |
| 133 | + |
| 134 | + self.assertAlmostEqual( |
| 135 | + data_point.sum, |
| 136 | + duration_estimated, |
| 137 | + delta=est_delta, |
| 138 | + ) |
| 139 | + |
| 140 | + self.assertDictEqual( |
| 141 | + expected_attributes, |
| 142 | + dict(data_point.attributes), |
| 143 | + ) |
| 144 | + |
88 | 145 | @staticmethod |
89 | 146 | def create_tracer_provider(**kwargs): |
90 | 147 | """Helper to create a configured tracer provider. |
|
0 commit comments