summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hosts/surtr/email/ccert-policy-server/ccert_policy_server/__main__.py2
-rw-r--r--hosts/vidhar/prometheus/default.nix16
-rw-r--r--overlays/zte-prometheus-exporter/zte-prometheus-exporter.py61
3 files changed, 44 insertions, 35 deletions
diff --git a/hosts/surtr/email/ccert-policy-server/ccert_policy_server/__main__.py b/hosts/surtr/email/ccert-policy-server/ccert_policy_server/__main__.py
index 7c931559..45619fb0 100644
--- a/hosts/surtr/email/ccert-policy-server/ccert_policy_server/__main__.py
+++ b/hosts/surtr/email/ccert-policy-server/ccert_policy_server/__main__.py
@@ -35,7 +35,7 @@ class PolicyHandler(StreamRequestHandler):
35 user = self.args['ccert_subject'] 35 user = self.args['ccert_subject']
36 relay_eligible = True 36 relay_eligible = True
37 37
38 if user: 38 if user and '@' in self.args['sender']:
39 with self.server.db_pool.connection() as conn: 39 with self.server.db_pool.connection() as conn:
40 local, domain = self.args['sender'].split(sep='@', maxsplit=1) 40 local, domain = self.args['sender'].split(sep='@', maxsplit=1)
41 extension = None 41 extension = None
diff --git a/hosts/vidhar/prometheus/default.nix b/hosts/vidhar/prometheus/default.nix
index ad6a0619..df135b58 100644
--- a/hosts/vidhar/prometheus/default.nix
+++ b/hosts/vidhar/prometheus/default.nix
@@ -301,17 +301,17 @@ in {
301 } 301 }
302 { name = "dsl-disconnects"; 302 { name = "dsl-disconnects";
303 rules = [ 303 rules = [
304 { record = "dsl_dsl_uptime_seconds:resets_per_hour"; 304 { record = "dsl_uptime_seconds:resets_per_hour";
305 expr = "resets(dsl_dsl_uptime_seconds[1h])"; 305 expr = "resets(dsl_uptime_seconds[1h])";
306 } 306 }
307 { record = "dsl_dsl_uptime_seconds:resets_per_day"; 307 { record = "dsl_uptime_seconds:resets_per_day";
308 expr = "resets(dsl_dsl_uptime_seconds[1d])"; 308 expr = "resets(dsl_uptime_seconds[1d])";
309 } 309 }
310 { record = "dsl_dsl_uptime_seconds:resets_per_week"; 310 { record = "dsl_uptime_seconds:resets_per_week";
311 expr = "resets(dsl_dsl_uptime_seconds[1w])"; 311 expr = "resets(dsl_uptime_seconds[1w])";
312 } 312 }
313 { record = "dsl_dsl_uptime_seconds:avg_resets_per_day"; 313 { record = "dsl_uptime_seconds:avg_resets_per_day";
314 expr = "avg_over_time(dsl_dsl_uptime_seconds:resets_per_day[1w])"; 314 expr = "avg_over_time(dsl_uptime_seconds:resets_per_day[1w])";
315 } 315 }
316 ]; 316 ];
317 } 317 }
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:
59 def __init__(self): 59 def __init__(self):
60 raise RuntimeError('Call instance() instead') 60 raise RuntimeError('Call instance() instead')
61 61
62 _error_pattern = re.compile('^IF_ERROR(PARAM|TYPE|STR|ID)$') 62 _error_pattern = re.compile(r'^IF_ERROR(PARAM|TYPE|STR|ID)$')
63 _obj_pattern = re.compile('^(?:OBJ_(.+)_ID)|(?:ID_(WAN_COMFIG))$') 63 _obj_pattern = re.compile(r'^(?:OBJ_(.+)_ID)|(?:ID_(WAN_COMFIG))$')
64 def update(self): 64 def update(self):
65 attrs = dict() 65 attrs = dict()
66 66
@@ -106,6 +106,8 @@ class ZTEMetrics:
106 value = child.text 106 value = child.text
107 case _: 107 case _:
108 pass 108 pass
109 if value == '0,0':
110 value = '0'
109 if not name is None and not value is None: 111 if not name is None and not value is None:
110 instance_dict[name] = value 112 instance_dict[name] = value
111 name = None 113 name = None
@@ -120,8 +122,8 @@ class ZTEMetrics:
120 def json_text(self): 122 def json_text(self):
121 return json.dumps(self.attrs) 123 return json.dumps(self.attrs)
122 124
123 _link_pattern = re.compile('^IGD\.WD1\.LINE([0-9]+)$') 125 _link_pattern = re.compile(r'^IGD\.WD1\.LINE([0-9]+)$')
124 _eth_pattern = re.compile('^IGD\.LD1\.ETH([0-9]+)$') 126 _eth_pattern = re.compile(r'^IGD\.LD1\.ETH([0-9]+)$')
125 def prometheus(self): 127 def prometheus(self):
126 metrics = '' 128 metrics = ''
127 129
@@ -133,34 +135,41 @@ class ZTEMetrics:
133 link_match = self._link_pattern.match(link) 135 link_match = self._link_pattern.match(link)
134 link_number = link_match.group(1) 136 link_number = link_match.group(1)
135 137
136 if 'crc_errors_count' not in link_metrics: 138 link_is_up = self.attrs['DSLINTERFACE'][link]['Status'] == 'Up'
137 link_metrics['crc_errors_count'] = {'type': 'counter', 'metrics': []}
138 link_metrics['crc_errors_count']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['UpCrc_errors']))]
139 link_metrics['crc_errors_count']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['DownCrc_errors']))]
140 139
141 if 'noise_margin_db' not in link_metrics: 140 if link_is_up:
142 link_metrics['noise_margin_db'] = {'type': 'gauge', 'metrics': []} 141 if 'crc_errors_count' not in link_metrics:
143 link_metrics['noise_margin_db']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Upstream_noise_margin']))] 142 link_metrics['crc_errors_count'] = {'type': 'counter', 'metrics': []}
144 link_metrics['noise_margin_db']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Downstream_noise_margin']))] 143 link_metrics['crc_errors_count']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['UpCrc_errors']))]
144 link_metrics['crc_errors_count']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['DownCrc_errors']))]
145 145
146 if 'attenuation_db' not in link_metrics: 146 if 'noise_margin_db' not in link_metrics:
147 link_metrics['attenuation_db'] = {'type': 'gauge', 'metrics': []} 147 link_metrics['noise_margin_db'] = {'type': 'gauge', 'metrics': []}
148 link_metrics['attenuation_db']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Upstream_attenuation']))] 148 link_metrics['noise_margin_db']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Upstream_noise_margin']) / 10)]
149 link_metrics['attenuation_db']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Downstream_attenuation']))] 149 link_metrics['noise_margin_db']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Downstream_noise_margin']) / 10)]
150 150
151 if 'max_rate_kbps' not in link_metrics: 151 if 'attenuation_db' not in link_metrics:
152 link_metrics['max_rate_kbps'] = {'type': 'gauge', 'metrics': []} 152 link_metrics['attenuation_db'] = {'type': 'gauge', 'metrics': []}
153 link_metrics['max_rate_kbps']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Upstream_max_rate']))] 153 link_metrics['attenuation_db']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Upstream_attenuation']) / 10)]
154 link_metrics['max_rate_kbps']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Downstream_max_rate']))] 154 link_metrics['attenuation_db']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Downstream_attenuation']) / 10)]
155 155
156 if 'current_rate_kbps' not in link_metrics: 156 if 'max_rate_kbps' not in link_metrics:
157 link_metrics['current_rate_kbps'] = {'type': 'gauge', 'metrics': []} 157 link_metrics['max_rate_kbps'] = {'type': 'gauge', 'metrics': []}
158 link_metrics['current_rate_kbps']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Upstream_current_rate']))] 158 link_metrics['max_rate_kbps']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Upstream_max_rate']))]
159 link_metrics['current_rate_kbps']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Downstream_current_rate']))] 159 link_metrics['max_rate_kbps']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Downstream_max_rate']))]
160
161 if 'current_rate_kbps' not in link_metrics:
162 link_metrics['current_rate_kbps'] = {'type': 'gauge', 'metrics': []}
163 link_metrics['current_rate_kbps']['metrics'] += [({"direction": "up", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Upstream_current_rate']))]
164 link_metrics['current_rate_kbps']['metrics'] += [({"direction": "down", "link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Downstream_current_rate']))]
160 165
161 if 'dsl_uptime_seconds' not in link_metrics: 166 if 'dsl_uptime_seconds' not in link_metrics:
162 link_metrics['dsl_uptime_seconds'] = {'type': 'gauge', 'metrics': []} 167 link_metrics['uptime_seconds'] = {'type': 'gauge', 'metrics': []}
163 link_metrics['dsl_uptime_seconds']['metrics'] += [({"link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Showtime_start']))] 168 link_metrics['uptime_seconds']['metrics'] += [({"link": link_number}, int(self.attrs['DSLINTERFACE'][link]['Showtime_start']) if link_is_up else 0)]
169
170 if 'status' not in link_metrics:
171 link_metrics['status'] = {'type': 'gauge', 'metrics': []}
172 link_metrics['status']['metrics'] += [({"link": link_number, "status": self.attrs['DSLINTERFACE'][link]['Status']}, 1)]
164 if link_metrics: 173 if link_metrics:
165 for metric_name in link_metrics: 174 for metric_name in link_metrics:
166 metrics += _format_prom_metrics(f'dsl_{metric_name}', link_metrics[metric_name]['type'], link_metrics[metric_name]['metrics']) 175 metrics += _format_prom_metrics(f'dsl_{metric_name}', link_metrics[metric_name]['type'], link_metrics[metric_name]['metrics'])