new options

This commit is contained in:
Mateusz Gruszczyński
2025-11-03 09:52:14 +01:00
parent 72bf6eb9d1
commit 7a33291342
2 changed files with 60 additions and 18 deletions

View File

@@ -124,12 +124,10 @@
<div class="row g-3 mb-3 d-none" id="ssl_fields">
<div class="col-md-12">
<label for="ssl_cert_path" class="form-label">SSL Certificate Path
<small>Upload certs in /ssl/</small></label>
<label for="ssl_cert_path" class="form-label">SSL Certificate Path</label>
<input type="text" class="form-control" id="ssl_cert_path" name="ssl_cert_path"
value="/app/ssl/haproxy-configurator.pem">
<div class="form-text">Full path to .pem file</div>
<div class="form-text">Full path to .pem file, upload certs in /ssl/</div>
</div>
<div class="col-md-12">
<div class="form-check">

View File

@@ -13,18 +13,62 @@ def fetch_haproxy_stats():
def parse_haproxy_stats(stats_data):
data = []
header_row = stats_data.splitlines()[0].replace('# ', '')
reader = csv.DictReader(stats_data.splitlines(), fieldnames=header_row.split(','))
next(reader)
for row in reader:
if row['svname'] != 'BACKEND':
data.append({
'frontend_name': row['pxname'],
'server_name': row['svname'],
'4xx_errors': row['hrsp_4xx'],
'5xx_errors': row['hrsp_5xx'],
'bytes_in_mb': f'{float(row["bin"]) / (1024 * 1024):.2f}',
'bytes_out_mb': f'{float(row["bout"]) / (1024 * 1024):.2f}',
'conn_tot': row['conn_tot'],
})
# Skip empty lines and get header
lines = [line for line in stats_data.splitlines() if line.strip()]
if not lines:
return data
header_row = lines[0].replace('# ', '')
# Parse CSV
reader = csv.DictReader(lines, fieldnames=header_row.split(','))
next(reader) # Skip header
for row in reader:
# Only process servers, skip BACKEND summary rows
if row.get('svname') == 'BACKEND':
continue
# Strip whitespace from values
row = {k: v.strip() if isinstance(v, str) else v for k, v in row.items()}
# Safe conversion to int/float
try:
conn_tot = int(row.get('conn_tot', 0) or 0)
except (ValueError, TypeError):
conn_tot = 0
try:
hrsp_4xx = int(row.get('hrsp_4xx', 0) or 0)
except (ValueError, TypeError):
hrsp_4xx = 0
try:
hrsp_5xx = int(row.get('hrsp_5xx', 0) or 0)
except (ValueError, TypeError):
hrsp_5xx = 0
try:
bin_bytes = float(row.get('bin', 0) or 0)
bytes_in_mb = f'{bin_bytes / (1024 * 1024):.2f}'
except (ValueError, TypeError):
bytes_in_mb = '0.00'
try:
bout_bytes = float(row.get('bout', 0) or 0)
bytes_out_mb = f'{bout_bytes / (1024 * 1024):.2f}'
except (ValueError, TypeError):
bytes_out_mb = '0.00'
data.append({
'frontend_name': row.get('pxname', 'Unknown'),
'server_name': row.get('svname', 'Unknown'),
'4xx_errors': hrsp_4xx,
'5xx_errors': hrsp_5xx,
'bytes_in_mb': bytes_in_mb,
'bytes_out_mb': bytes_out_mb,
'conn_tot': conn_tot, # ✅ Teraz INT
})
return data