From f04b2b36cc204a3d0d5c694edaeaea486fed94ca Mon Sep 17 00:00:00 2001 From: Matthew Grotke Date: Wed, 3 Jun 2026 01:32:13 -0400 Subject: [PATCH] Development --- .../routlin-dash/app/pages/dhcpleases/content.json | 2 +- docker/routlin-dash/app/pages/dhcpleases/view.py | 13 ++++++++++--- .../routlin-dash/app/pages/dnsblocking/content.json | 12 ++++++++---- docker/routlin-dash/app/pages/radius/content.json | 4 ++-- docker/routlin-dash/app/pages/radius/view.py | 1 + 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/docker/routlin-dash/app/pages/dhcpleases/content.json b/docker/routlin-dash/app/pages/dhcpleases/content.json index 27097ea..af3f308 100644 --- a/docker/routlin-dash/app/pages/dhcpleases/content.json +++ b/docker/routlin-dash/app/pages/dhcpleases/content.json @@ -55,7 +55,7 @@ "field": "vlan_name" }, { - "label": "Last Active", + "label": "Last Renewal", "field": "last_active" }, { diff --git a/docker/routlin-dash/app/pages/dhcpleases/view.py b/docker/routlin-dash/app/pages/dhcpleases/view.py index 2838790..7e4869f 100644 --- a/docker/routlin-dash/app/pages/dhcpleases/view.py +++ b/docker/routlin-dash/app/pages/dhcpleases/view.py @@ -69,6 +69,11 @@ def live_dhcp_leases(): for r in cfg.get('dhcp_reservations', []) if r.get('mac') and r.get('hostname') } + mac_to_desc = { + r['mac'].lower(): r['description'] + for r in cfg.get('dhcp_reservations', []) + if r.get('mac') and r.get('description') + } for leases_file in glob.glob('/var/lib/misc/dnsmasq-routlin-*.leases'): stem = os.path.basename(leases_file) vlan_name = stem[len('dnsmasq-routlin-'):-len('.leases')] @@ -95,12 +100,14 @@ def live_dhcp_leases(): mac_norm = parts[1].lower() device_h = parts[3] if parts[3] != '*' else None res_h = mac_to_res.get(mac_norm) + desc = mac_to_desc.get(mac_norm) + desc_attr = f' data-hostname-desc="{e(desc)}"' if desc else '' if res_h and device_h and device_h.lower() != res_h.lower(): - hostname_html = f'{e(res_h)}
({e(device_h)})' + hostname_html = f'{e(res_h)}
({e(device_h)})' if desc_attr else f'{e(res_h)}
({e(device_h)})' elif res_h: - hostname_html = f'{e(res_h)}' + hostname_html = f'{e(res_h)}' if desc_attr else e(res_h) elif device_h: - hostname_html = e(device_h) + hostname_html = f'{e(device_h)}' if desc_attr else e(device_h) else: hostname_html = '-' rows.append({ diff --git a/docker/routlin-dash/app/pages/dnsblocking/content.json b/docker/routlin-dash/app/pages/dnsblocking/content.json index a84cd49..b2e48f1 100644 --- a/docker/routlin-dash/app/pages/dnsblocking/content.json +++ b/docker/routlin-dash/app/pages/dnsblocking/content.json @@ -223,17 +223,21 @@ "label": "Max Log Size (KB)", "name": "log_max_kb", "input_type": "number", + "layout": "inline", "value": "%GENERAL_LOG_MAX_KB%", "min": 64, - "hint": "Log is cleared and restarted when it exceeds this size." + "hint": "Log will automatically be cleared when it reaches this size." + }, + { + "type": "hr" }, { "type": "field", - "label": "Only record errors to log", + "label": "", "name": "log_errors_only", "input_type": "checkbox", - "value": "%GENERAL_LOG_ERRORS_ONLY%", - "hint": "Only write error-level messages to the log." + "checkbox_label": "Only record errors to log", + "value": "%GENERAL_LOG_ERRORS_ONLY%" }, { "type": "hr" diff --git a/docker/routlin-dash/app/pages/radius/content.json b/docker/routlin-dash/app/pages/radius/content.json index 35d4bae..140978e 100644 --- a/docker/routlin-dash/app/pages/radius/content.json +++ b/docker/routlin-dash/app/pages/radius/content.json @@ -114,7 +114,7 @@ "input_type": "checkbox", "checkbox_label": "Log auth requests", "value": "%RADIUS_LOGGING%", - "hint": "Enables auth and auth_accept/auth_reject in radiusd.conf." + "hint": "%RADIUS_LOGGING_HINT%" }, { "type": "hr" @@ -149,7 +149,7 @@ "layout": "inline", "value": "%RADIUS_GEN_LOG_MAX_KB%", "min": "64", - "hint": "Log display will be truncated to this size." + "hint": "Log will automatically be cleared when it reaches this size." }, { "type": "button_row", diff --git a/docker/routlin-dash/app/pages/radius/view.py b/docker/routlin-dash/app/pages/radius/view.py index 7075971..52791fa 100644 --- a/docker/routlin-dash/app/pages/radius/view.py +++ b/docker/routlin-dash/app/pages/radius/view.py @@ -66,6 +66,7 @@ def collect_tokens(cfg): tokens['RADIUS_MAC_FORMAT'] = fr_opts.get('mac_format', 'aabbccddeeff') tokens['RADIUS_APPLY_TO'] = fr_opts.get('apply_to', 'all') tokens['RADIUS_LOGGING'] = 'true' if fr_gen.get('logging', False) else '' + tokens['RADIUS_LOGGING_HINT'] = 'Unchecking will clear logs.' if fr_gen.get('logging', False) else '' tokens['RADIUS_GEN_LOG_MAX_KB'] = str(fr_gen.get('log_max_kb', 1024)) tokens['RADIUS_LOG_TAIL'], tokens['RADIUS_LOG_SUMMARY'] = radius_log_tail(cfg) return tokens