From 888a7b7d1277239eea146aef576dbab87ee140c0 Mon Sep 17 00:00:00 2001 From: Richard Tief <richard.tief@sap.com> Date: Tue, 27 Feb 2024 09:57:51 +0100 Subject: [PATCH] ensure json.loads() --- collectors/PropertiesCollector.py | 7 +++++++ collectors/SDRSPropertiesCollector.py | 12 ++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/collectors/PropertiesCollector.py b/collectors/PropertiesCollector.py index a4131c20..d69bc609 100644 --- a/collectors/PropertiesCollector.py +++ b/collectors/PropertiesCollector.py @@ -66,8 +66,15 @@ def collect(self): metric_value = value_entry.get('values', [False])[0] if statkey in self.nested_value_metric_keys: + add_labels, add_label_value_list, add_value = self.unlock_nested_values(statkey, metric_value) + if not add_labels: + metric_suffix = metrics[statkey]['metric_suffix'] + self.add_metric_labels(metrics[statkey]['gauge'], [metric_suffix]) + metrics[statkey]['gauge'].add_metric(labels=labels+[metric_suffix], value=0) + continue + self.add_metric_labels(metrics[statkey]['gauge'], add_labels) for add_label_value in add_label_value_list: diff --git a/collectors/SDRSPropertiesCollector.py b/collectors/SDRSPropertiesCollector.py index 10c77eed..857db30e 100644 --- a/collectors/SDRSPropertiesCollector.py +++ b/collectors/SDRSPropertiesCollector.py @@ -1,5 +1,8 @@ from collectors.PropertiesCollector import PropertiesCollector import json +import logging + +logger = logging.getLogger('vrops-exporter') class SDRSPropertiesCollector(PropertiesCollector): @@ -27,9 +30,14 @@ def unlock_nested_values(self, statkey, metric_value): def config_sdrsconfig_vmStorageAntiAffinityRules(self, metric_value): - metric_value = json.loads(metric_value) - rules = metric_value.get("rules") or [] + try: + metric_value = json.loads(metric_value) + except (TypeError, json.decoder.JSONDecodeError) as e: + logger.warning(f'metric_value is not a valid json: {e.args}, {metric_value}') + return [], [], 0 + + rules = metric_value.get("rules") or [] amount_rules = len(rules) rule_labels = ['rule', 'rule_name', 'rule_type', 'valid', 'virtualmachine']