From 9582b45dab89ac551b8ba0e4991711255dae213a Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Fri, 24 Oct 2025 08:26:06 +0200 Subject: ... --- .../zte-prometheus-exporter.py | 61 +++++++++++++--------- 1 file changed, 35 insertions(+), 26 deletions(-) (limited to 'overlays') diff --git a/overlays/zte-prometheus-exporter/zte-prometheus-exporter.py b/overlays/zte-prometheus-exporter/zte-prometheus-exporter.py index 01d2b9fc..bc8326ff 100644 --- a/overlays/zte-prometheus-exporter/zte-prometheus-exporter.py +++ b/overlays/zte-prometheus-exporter/zte-prometheus-exporter.py @@ -59,8 +59,8 @@ class ZTEMetrics: def __init__(self): raise RuntimeError('Call instance() instead') - _error_pattern = re.compile('^IF_ERROR(PARAM|TYPE|STR|ID)$') - _obj_pattern = re.compile('^(?:OBJ_(.+)_ID)|(?:ID_(WAN_COMFIG))$') + _error_pattern = re.compile(r'^IF_ERROR(PARAM|TYPE|STR|ID)$') + _obj_pattern = re.compile(r'^(?:OBJ_(.+)_ID)|(?:ID_(WAN_COMFIG))$') def update(self): attrs = dict() @@ -106,6 +106,8 @@ class ZTEMetrics: value = child.text case _: pass + if value == '0,0': + value = '0' if not name is None and not value is None: instance_dict[name] = value name = None @@ -120,8 +122,8 @@ class ZTEMetrics: def json_text(self): return json.dumps(self.attrs) - _link_pattern = re.compile('^IGD\.WD1\.LINE([0-9]+)$') - _eth_pattern = re.compile('^IGD\.LD1\.ETH([0-9]+)$') + _link_pattern = re.compile(r'^IGD\.WD1\.LINE([0-9]+)$') + _eth_pattern = re.compile(r'^IGD\.LD1\.ETH([0-9]+)$') def prometheus(self): metrics = '' @@ -133,34 +135,41 @@ class ZTEMetrics: link_match = self._link_pattern.match(link) link_number = link_match.group(1) - if 'crc_errors_count' not in link_metrics: - link_metrics['crc_errors_count'] = {'type': 'counter', 'metrics': []} - link_metrics['crc_errors_count']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['UpCrc_errors']))] - link_metrics['crc_errors_count']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['DownCrc_errors']))] + link_is_up = self.attrs['DSLINTERFACE'][link]['Status'] == 'Up' - if 'noise_margin_db' not in link_metrics: - link_metrics['noise_margin_db'] = {'type': 'gauge', 'metrics': []} - link_metrics['noise_margin_db']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Upstream_noise_margin']))] - link_metrics['noise_margin_db']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Downstream_noise_margin']))] + if link_is_up: + if 'crc_errors_count' not in link_metrics: + link_metrics['crc_errors_count'] = {'type': 'counter', 'metrics': []} + link_metrics['crc_errors_count']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['UpCrc_errors']))] + link_metrics['crc_errors_count']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['DownCrc_errors']))] - if 'attenuation_db' not in link_metrics: - link_metrics['attenuation_db'] = {'type': 'gauge', 'metrics': []} - link_metrics['attenuation_db']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Upstream_attenuation']))] - link_metrics['attenuation_db']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Downstream_attenuation']))] + if 'noise_margin_db' not in link_metrics: + link_metrics['noise_margin_db'] = {'type': 'gauge', 'metrics': []} + link_metrics['noise_margin_db']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Upstream_noise_margin']) / 10)] + link_metrics['noise_margin_db']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Downstream_noise_margin']) / 10)] - if 'max_rate_kbps' not in link_metrics: - link_metrics['max_rate_kbps'] = {'type': 'gauge', 'metrics': []} - link_metrics['max_rate_kbps']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Upstream_max_rate']))] - link_metrics['max_rate_kbps']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Downstream_max_rate']))] + if 'attenuation_db' not in link_metrics: + link_metrics['attenuation_db'] = {'type': 'gauge', 'metrics': []} + link_metrics['attenuation_db']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Upstream_attenuation']) / 10)] + link_metrics['attenuation_db']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Downstream_attenuation']) / 10)] - if 'current_rate_kbps' not in link_metrics: - link_metrics['current_rate_kbps'] = {'type': 'gauge', 'metrics': []} - link_metrics['current_rate_kbps']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Upstream_current_rate']))] - link_metrics['current_rate_kbps']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Downstream_current_rate']))] + if 'max_rate_kbps' not in link_metrics: + link_metrics['max_rate_kbps'] = {'type': 'gauge', 'metrics': []} + link_metrics['max_rate_kbps']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Upstream_max_rate']))] + link_metrics['max_rate_kbps']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Downstream_max_rate']))] + + if 'current_rate_kbps' not in link_metrics: + link_metrics['current_rate_kbps'] = {'type': 'gauge', 'metrics': []} + link_metrics['current_rate_kbps']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Upstream_current_rate']))] + link_metrics['current_rate_kbps']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Downstream_current_rate']))] if 'dsl_uptime_seconds' not in link_metrics: - link_metrics['dsl_uptime_seconds'] = {'type': 'gauge', 'metrics': []} - link_metrics['dsl_uptime_seconds']['metrics'] += [({"link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Showtime_start']))] + link_metrics['uptime_seconds'] = {'type': 'gauge', 'metrics': []} + link_metrics['uptime_seconds']['metrics'] += [({"link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Showtime_start']) if link_is_up else 0)] + + if 'status' not in link_metrics: + link_metrics['status'] = {'type': 'gauge', 'metrics': []} + link_metrics['status']['metrics'] += [({"link": link_number, "status": self.attrs['DSLINTERFACE'][link]['Status']}, 1)] if link_metrics: for metric_name in link_metrics: metrics += _format_prom_metrics(f'dsl_{metric_name}', link_metrics[metric_name]['type'], link_metrics[metric_name]['metrics']) -- cgit v1.2.3