Skip to content

Commit bb5be58

Browse files
rixxxxrivo nurges
and
rivo nurges
authored
add support for parsing values containing lists (#44)
* add support for parsing values containing lists * add test for values containing lists * fix test style * black formatting fixes --------- Co-authored-by: rivo nurges <[email protected]>
1 parent 6bcf9fd commit bb5be58

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

mqtt_exporter/main.py

+6
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,12 @@ def _parse_metrics(data, topic, client_id, prefix=""):
116116
Note when `data` contains nested metrics this function will be called recursivley.
117117
"""
118118
for metric, value in data.items():
119+
# when value is a list recursivley call _parse_metrics to handle these messages
120+
if isinstance(value, list):
121+
LOG.debug("parsing list %s: %s", metric, value)
122+
_parse_metrics(dict(enumerate(value)), topic, client_id, f"{prefix}{metric}_")
123+
continue
124+
119125
# when value is a dict recursivley call _parse_metrics to handle these messages
120126
if isinstance(value, dict):
121127
LOG.debug("parsing dict %s: %s", metric, value)

tests/functional/test_parse_metrics.py

+10
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,13 @@ def test_metrics_escaping():
3636
assert "mqtt_test_value_a" in main.prom_metrics
3737
assert "mqtt_test_value_b" in main.prom_metrics
3838
assert "mqtt_test_value_c" in main.prom_metrics
39+
40+
41+
def test_parse_metrics__value_is_list():
42+
"""Verify if list recursion works properly."""
43+
main.prom_metrics = {}
44+
parsed_topic = "test_topic"
45+
parsed_payload = {"test_value": [1, 2]}
46+
main._parse_metrics(parsed_payload, parsed_topic, "dummy_client_id")
47+
assert "mqtt_test_value_0" in main.prom_metrics
48+
assert "mqtt_test_value_1" in main.prom_metrics

0 commit comments

Comments
 (0)