8000 parser: ensure samples are of type Sample (#358) · benxiaolang-hacker/client_python@f5e818a · GitHub
[go: up one dir, main page]

Skip to content

Commit f5e818a

Browse files
crepererumbrian-brazil
authored andcommitted
parser: ensure samples are of type Sample (prometheus#358)
Signed-off-by: Marco Neumann <marco.neumann@blue-yonder.com>
1 parent 2230511 commit f5e818a

File tree

2 files changed

+29
-22
lines changed

2 files changed

+29
-22
lines changed

prometheus_client/parser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ def build_metric(name, documentation, typ, samples):
166166
else:
167167
new_samples = []
168168
for s in samples:
169-
new_samples.append(tuple((s[0] + '_total', ) + s[1:]))
169+
new_samples.append(Sample(s[0] + '_total', *s[1:]))
170170
samples = new_samples
171171
metric = Metric(name, documentation, typ)
172172
metric.samples = samples

tests/test_parser.py

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,27 @@
1919

2020

2121
class TestParse(unittest.TestCase):
22+
def assertEqualMetrics(self, first, second, msg=None):
23+
super(TestParse, self).assertEqual(first, second, msg)
24+
25+
# Test that samples are actually named tuples of type Sample.
26+
for a, b in zip(first, second):
27+
for sa, sb in zip(a.samples, b.samples):
28+
assert sa.name == sb.name
2229

2330
def test_simple_counter(self):
2431
families = text_string_to_metric_families("""# TYPE a counter
2532
# HELP a help
2633
a 1
2734
""")
28-
self.assertEqual([CounterMetricFamily("a", "help", value=1)], list(families))
35+
self.assertEqualMetrics([CounterMetricFamily("a", "help", value=1)], list(families))
2936

3037
def test_simple_gauge(self):
3138
families = text_string_to_metric_families("""# TYPE a gauge
3239
# HELP a help
3340
a 1
3441
""")
35-
self.assertEqual([GaugeMetricFamily("a", "help", value=1)], list(families))
42+
self.assertEqualMetrics([GaugeMetricFamily("a", "help", value=1)], list(families))
3643

3744
def test_simple_summary(self):
3845
families = text_string_to_metric_families("""# TYPE a summary
@@ -41,7 +48,7 @@ def test_simple_summary(self):
4148
a_sum 2
4249
""")
4350
summary = SummaryMetricFamily("a", "help", count_value=1, sum_value=2)
44-
self.assertEqual([summary], list(families))
51+
self.assertEqualMetrics([summary], list(families))
4552

4653
def test_summary_quantiles(self):
4754
families = text_string_to_metric_families("""# TYPE a summary
@@ -54,7 +61,7 @@ def test_summary_quantiles(self):
5461
# still need to be able to parse them.
5562
metric_family = SummaryMetricFamily("a", "help", count_value=1, sum_value=2)
5663
metric_family.add_sample("a", {"quantile": "0.5"}, 0.7)
57-
self.assertEqual([metric_family], list(families))
64+
self.assertEqualMetrics([metric_family], list(families))
5865

5966
def test_simple_histogram(self):
6067
families = text_string_to_metric_families("""# TYPE a histogram
@@ -64,14 +71,14 @@ def test_simple_histogram(self):
6471
a_count 3
6572
a_sum 2
6673
""")
67-
self.assertEqual([HistogramMetricFamily("a", "help", sum_value=2, buckets=[("1", 0.0), ("+Inf", 3.0)])], list(families))
74+
self.assertEqualMetrics([HistogramMetricFamily("a", "help", sum_value=2, buckets=[("1", 0.0), ("+Inf", 3.0)])], list(families))
6875

6976
def test_no_metadata(self):
7077
families = text_string_to_metric_families("""a 1
7178
""")
7279
metric_family = Metric("a", "", "untyped")
7380
metric_family.add_sample("a", {}, 1)
74-
self.assertEqual([metric_family], list(families))
81+
self.assertEqualMetrics([metric_family], list(families))
7582

7683
def test_untyped(self):
7784
# https://github.com/prometheus/client_python/issues/79
@@ -85,14 +92,14 @@ def test_untyped(self):
8592
Sample("redis_connected_clients", {"instance": "rough-snowflake-web", "port": "6380"}, 10),
8693
Sample("redis_connected_clients", {"instance": "rough-snowflake-web", "port": "6381"}, 12),
8794
]
88-
self.assertEqual([m], list(families))
95+
self.assertEqualMetrics([m], list(families))
8996

9097
def test_type_help_switched(self):
9198
families = text_string_to_metric_families("""# HELP a help
9299
# TYPE a counter
93100
a 1
94101
""")
95-
self.assertEqual([CounterMetricFamily("a", "help", value=1)], list(families))
102+
self.assertEqualMetrics([CounterMetricFamily("a", "help", value=1)], list(families))
96103

97104
def test_blank_lines_and_comments(self):
98105
families = text_string_to_metric_families("""
@@ -103,14 +110,14 @@ def test_blank_lines_and_comments(self):
103110
104111
a 1
105112
""")
106-
self.assertEqual([CounterMetricFamily("a", "help", value=1)], list(families))
113+
self.assertEqualMetrics([CounterMetricFamily("a", "help", value=1)], list(families))
107114

108115
def test_tabs(self):
109116
families = text_string_to_metric_families("""#\tTYPE\ta\tcounter
110117
#\tHELP\ta\thelp
111118
a\t1
112119
""")
113-
self.assertEqual([CounterMetricFamily("a", "help", value=1)], list(families))
120+
self.assertEqualMetrics([CounterMetricFamily("a", "help", value=1)], list(families))
114121

115122
def test_labels_with_curly_braces(self):
116123
families = text_string_to_metric_families("""# TYPE a counter
@@ -119,14 +126,14 @@ def test_labels_with_curly_braces(self):
119126
""")
120127
metric_family = CounterMetricFamily("a", "help", labels=["foo", "bar"])
121128
metric_family.add_metric(["bar", "b{a}z"], 1)
122-
self.assertEqual([metric_family], list(families))
129+
self.assertEqualMetrics([metric_family], list(families))
123130

124131
def test_empty_help(self):
125132
families = text_string_to_metric_families("""# TYPE a counter
126133
# HELP a
127134
a 1
128135
""")
129-
self.assertEqual([CounterMetricFamily("a", "", value=1)], list(families))
136+
self.assertEqualMetrics([CounterMetricFamily("a", "", value=1)], list(families))
130137

131138
def test_labels_and_infinite(self):
132139
families = text_string_to_metric_families("""# TYPE a counter
@@ -137,7 +144,7 @@ def test_labels_and_infinite(self):
137144
metric_family = CounterMetricFamily("a", "help", labels=["foo"])
138145
metric_family.add_metric(["bar"], float('inf'))
139146
metric_family.add_metric(["baz"], float('-inf'))
140-
self.assertEqual([metric_family], list(families))
147+
self.assertEqualMetrics([metric_family], list(families))
141148

142149
def test_spaces(self):
143150
families = text_string_to_metric_families("""# TYPE a counter
@@ -154,7 +161,7 @@ def test_spaces(self):
154161
metric_family.add_metric(["buz"], 3)
155162
metric_family.add_metric(["biz"], 4)
156163
metric_family.add_metric(["boz"], 5)
157-
self.assertEqual([metric_family], list(families))
164+
self.assertEqualMetrics([metric_family], list(families))
158165

159166
def test_commas(self):
160167
families = text_string_to_metric_families("""# TYPE a counter
@@ -177,7 +184,7 @@ def test_commas(self):
177184
b = CounterMetricFamily("b", "help", value=2)
178185
c = CounterMetricFamily("c", "help", value=3)
179186
d = CounterMetricFamily("d", "help", value=4)
180-
self.assertEqual([a, b, c, d], list(families))
187+
self.assertEqualMetrics([a, b, c, d], list(families))
181188

182189
def test_multiple_trailing_commas(self):
183190
text = """# TYPE a counter
@@ -192,7 +199,7 @@ def test_empty_brackets(self):
192199
# HELP a help
193200
a{} 1
194201
""")
195-
self.assertEqual([CounterMetricFamily("a", "help", value=1)], list(families))
202+
self.assertEqualMetrics([CounterMetricFamily("a", "help", value=1)], list(families))
196203

197204
def test_nan(self):
198205
families = text_string_to_metric_families("""a NaN
@@ -209,7 +216,7 @@ def test_empty_label(self):
209216
metric_family = CounterMetricFamily("a", "help", labels=["foo"])
210217
metric_family.add_metric(["bar"], 1)
211218
metric_family.add_metric([""], 2)
212-
self.assertEqual([metric_family], list(families))
219+
self.assertEqualMetrics([metric_family], list(families))
213220

214221
def test_label_escaping(self):
215222
for escaped_val, unescaped_val in [
@@ -231,7 +238,7 @@ def test_label_escaping(self):
231238
metric_family = CounterMetricFamily(
232239
"a", "help", labels=["foo", "bar"])
233240
metric_family.add_metric([unescaped_val, "baz"], 1)
234-
self.assertEqual([metric_family], list(families))
241+
self.assertEqualMetrics([metric_family], list(families))
235242

236243
def test_help_escaping(self):
237244
for escaped_val, unescaped_val in [
@@ -253,7 +260,7 @@ def test_help_escaping(self):
253260
""" % escaped_val))
254261
metric_family = CounterMetricFamily("a", unescaped_val, labels=["foo"])
255262
metric_family.add_metric(["bar"], 1)
256-
self.assertEqual([metric_family], list(families))
263+
self.assertEqualMetrics([metric_family], list(families))
257264

258265
def test_escaping(self):
259266
families = text_string_to_metric_families("""# TYPE a counter
@@ -264,7 +271,7 @@ def test_escaping(self):
264271
metric_family = CounterMetricFamily("a", "he\n\\l\\tp", labels=["foo"])
265272
metric_family.add_metric(["b\"a\nr"], 1)
266273
metric_family.add_metric(["b\\a\\z"], 2)
267-
self.assertEqual([metric_family], list(families))
274+
self.assertEqualMetrics([metric_family], list(families))
268275

269276
def test_timestamps_discarded(self):
270277
families = text_string_to_metric_families("""# TYPE a counter
@@ -277,7 +284,7 @@ def test_timestamps_discarded(self):
277284
a = CounterMetricFamily("a", "help", labels=["foo"])
278285
a.add_metric(["bar"], 1)
279286
b = CounterMetricFamily("b", "help", value=2)
280-
self.assertEqual([a, b], list(families))
287+
self.assertEqualMetrics([a, b], list(families))
281288

282289
@unittest.skipIf(sys.version_info < (2, 7), "Test requires Python 2.7+.")
283290
def test_roundtrip(self):

0 commit comments

Comments
 (0)
0