Development

This commit is contained in:
Matthew Grotke 2026-06-10 00:09:31 -04:00
parent b38c199baf
commit fd7cc5c11d
9 changed files with 55 additions and 24 deletions

View file

@ -747,7 +747,7 @@ def config_datasource(name):
for v in sorted(vlans, key=lambda x: x.get('vlan_id') or 0):
row = {k: v.get(k) for k in (
'name', 'subnet', 'subnet_mask', 'radius_default',
'mdns_reflection', 'is_vpn', 'dnsmasq_log_queries'
'mdns_reflection', 'is_vpn', 'dnsmasq_log_queries_days'
)}
row['vlan_id'] = v.get('vlan_id')
row['interface'] = resolve_iface(v, cfg)

View file

@ -936,12 +936,16 @@ def build_table_cell(value, render_fn, col_class='', field='', row_idx=None,
return f'{td_open}{inner}</td>'
if render_fn == 'badge_yes_no':
opts = render_options or {}
if str(value).lower() in ('true', '1', 'yes', 'enabled'):
tip = f' data-tooltip="{e(opts["title_true"])}"' if opts.get('title_true') else ''
opts = render_options or {}
sv = str(value)
is_true = sv.lower() in ('true', '1', 'yes', 'enabled') or (sv.lstrip('-').isdigit() and int(sv) > 0)
if is_true:
title = opts.get('title_true', '').replace('{value}', sv)
tip = f' data-tooltip="{e(title)}"' if title else ''
inner = f'<span class="badge badge-enabled"{tip}>Yes</span>'
else:
tip = f' data-tooltip="{e(opts["title_false"])}"' if opts.get('title_false') else ''
title = opts.get('title_false', '').replace('{value}', sv)
tip = f' data-tooltip="{e(title)}"' if title else ''
inner = f'<span class="badge badge-disabled"{tip}>No</span>'
return f'{td_open}{inner}</td>'

View file

@ -48,7 +48,7 @@ def vlans_addedit():
subnet_mask = sanitize.subnet_mask(request.form.get('subnet_mask', ''))
radius_default = 'radius_default' in request.form
mdns_reflection = 'mdns_reflection' in request.form
dnsmasq_log_queries = 'dnsmasq_log_queries' in request.form
dnsmasq_log_queries_days = max(0, int(request.form.get('dnsmasq_log_queries_days', 0) or 0))
restricted_vlan_raw = request.form.get('restricted_vlan', '').strip()
restricted_vlan = restricted_vlan_raw if restricted_vlan_raw in ('q', 'c') else ''
use_blocklists = sanitize.filterlist(
@ -264,7 +264,7 @@ def vlans_addedit():
'vlan_id': vlan_id,
'subnet': subnet,
'subnet_mask': subnet_mask,
'dnsmasq_log_queries': dnsmasq_log_queries,
'dnsmasq_log_queries_days': dnsmasq_log_queries_days,
'radius_default': radius_default,
'mdns_reflection': mdns_reflection,
'use_blocklists': use_blocklists,
@ -324,7 +324,7 @@ def vlans_addedit():
'is_vpn': is_vpn,
'subnet': subnet,
'subnet_mask': subnet_mask,
'dnsmasq_log_queries': dnsmasq_log_queries,
'dnsmasq_log_queries_days': dnsmasq_log_queries_days,
'use_blocklists': use_blocklists,
'radius_default': radius_default,
'mdns_reflection': mdns_reflection,

View file

@ -84,12 +84,12 @@
}
},
{
"label": "Recorded",
"field": "dnsmasq_log_queries",
"label": "Query Log",
"field": "dnsmasq_log_queries_days",
"class": "col-narrow",
"render": "badge_yes_no",
"render_options": {
"title_true": "DNS Queries Recorded",
"title_true": "DNS Queries Recorded for {value} Days",
"title_false": "DNS Queries Not Recorded"
}
},
@ -339,10 +339,11 @@
},
{
"type": "field",
"label": "Record DNS Queries",
"name": "dnsmasq_log_queries",
"input_type": "checkbox",
"hint": "Log every DNS query. High volume - enable for debugging only."
"label": "Record DNS Queries (Days)",
"name": "dnsmasq_log_queries_days",
"input_type": "number",
"min": 0,
"hint": "Number of days to retain DNS query logs. 0 = recording disabled."
},
{
"type": "field",

View file

@ -143,7 +143,7 @@ def load_dns_metrics(period=0):
def has_query_logging(cfg):
return any(v.get('dnsmasq_log_queries') for v in cfg.get('vlans', []))
return any(v.get('dnsmasq_log_queries_days', 0) > 0 for v in cfg.get('vlans', []))
def blocked_domains_table():