Development
This commit is contained in:
parent
b38c199baf
commit
fd7cc5c11d
9 changed files with 55 additions and 24 deletions
|
|
@ -283,7 +283,7 @@
|
|||
"subnet": "192.168.1.0",
|
||||
"subnet_mask": 24,
|
||||
"is_vpn": false,
|
||||
"dnsmasq_log_queries": true,
|
||||
"dnsmasq_log_queries_days": 30,
|
||||
"radius_default": false,
|
||||
"mdns_reflection": false,
|
||||
"use_blocklists": [
|
||||
|
|
@ -324,7 +324,7 @@
|
|||
"subnet": "192.168.10.0",
|
||||
"subnet_mask": 24,
|
||||
"is_vpn": false,
|
||||
"dnsmasq_log_queries": true,
|
||||
"dnsmasq_log_queries_days": 30,
|
||||
"radius_default": false,
|
||||
"mdns_reflection": true,
|
||||
"use_blocklists": [
|
||||
|
|
@ -355,7 +355,7 @@
|
|||
"subnet": "192.168.20.0",
|
||||
"subnet_mask": 24,
|
||||
"is_vpn": false,
|
||||
"dnsmasq_log_queries": true,
|
||||
"dnsmasq_log_queries_days": 30,
|
||||
"radius_default": true,
|
||||
"mdns_reflection": true,
|
||||
"use_blocklists": [
|
||||
|
|
@ -386,7 +386,7 @@
|
|||
"subnet": "192.168.30.0",
|
||||
"subnet_mask": 24,
|
||||
"is_vpn": false,
|
||||
"dnsmasq_log_queries": true,
|
||||
"dnsmasq_log_queries_days": 30,
|
||||
"radius_default": false,
|
||||
"mdns_reflection": true,
|
||||
"use_blocklists": [
|
||||
|
|
@ -418,7 +418,7 @@
|
|||
"subnet": "192.168.40.0",
|
||||
"subnet_mask": 24,
|
||||
"is_vpn": true,
|
||||
"dnsmasq_log_queries": true,
|
||||
"dnsmasq_log_queries_days": 30,
|
||||
"radius_default": false,
|
||||
"mdns_reflection": false,
|
||||
"use_blocklists": [
|
||||
|
|
|
|||
|
|
@ -668,6 +668,9 @@ def main():
|
|||
inserted = dns_queries.collect(full_cfg)
|
||||
if inserted:
|
||||
log.info(f"DNS query collector: inserted {inserted} new rows.")
|
||||
pruned = dns_queries.prune(full_cfg)
|
||||
if pruned:
|
||||
log.info(f"DNS query collector: pruned {pruned} old rows.")
|
||||
except Exception as e:
|
||||
log.warning(f"DNS query collection failed: {e}")
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ Called by:
|
|||
- maintenance.py on each timer tick
|
||||
- routlin-dash overview page on each page load (background thread)
|
||||
|
||||
Only VLANs with dnsmasq_log_queries=true are collected.
|
||||
Only VLANs with dnsmasq_log_queries_days > 0 are collected.
|
||||
"""
|
||||
|
||||
import json
|
||||
|
|
@ -84,7 +84,7 @@ def collect(data):
|
|||
"""
|
||||
unit_to_vlan = {}
|
||||
for vlan in data.get('vlans', []):
|
||||
if not vlan.get('dnsmasq_log_queries'):
|
||||
if not vlan.get('dnsmasq_log_queries_days', 0):
|
||||
continue
|
||||
iface = validation.derive_interface(vlan, data)
|
||||
svc = shared.vlan_service_name(vlan, iface)
|
||||
|
|
@ -180,3 +180,26 @@ def collect(data):
|
|||
shared.chown_to_script_dir_owner(DB_FILE)
|
||||
con.close()
|
||||
return len(rows)
|
||||
|
||||
|
||||
def prune(data):
|
||||
"""
|
||||
Delete dns_queries rows older than the retention period configured per VLAN.
|
||||
Uses the maximum retention days across all logging-enabled VLANs.
|
||||
Returns the number of rows deleted.
|
||||
"""
|
||||
days = max(
|
||||
(v.get('dnsmasq_log_queries_days', 0) for v in data.get('vlans', [])),
|
||||
default=0
|
||||
)
|
||||
if not days:
|
||||
return 0
|
||||
if not DB_FILE.exists():
|
||||
return 0
|
||||
cutoff = int(__import__('time').time()) - days * 86400
|
||||
con = open_db()
|
||||
cur = con.execute('DELETE FROM dns_queries WHERE ts < ?', (cutoff,))
|
||||
deleted = cur.rowcount
|
||||
con.commit()
|
||||
con.close()
|
||||
return deleted
|
||||
|
|
|
|||
|
|
@ -478,7 +478,7 @@ def build_vlan_dnsmasq_conf(vlan, data, iface):
|
|||
continue # skip IPv6 upstream -- WAN has no IPv6 address
|
||||
L.append(f"server={srv}")
|
||||
L.append(f"cache-size={dns_cfg.get('cache_size', 1000)}")
|
||||
if vlan.get("dnsmasq_log_queries", False):
|
||||
if vlan.get("dnsmasq_log_queries_days", 0):
|
||||
L.append("log-queries")
|
||||
L.append("")
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue