62 lines
2.3 KiB
Python
62 lines
2.3 KiB
Python
import json
|
|
import config_utils
|
|
import factory
|
|
from pages.overview.view import load_dns_metrics, _dns_providers_table
|
|
|
|
_PERIOD_OPTIONS = [
|
|
(1, '1 Day'),
|
|
(7, '7 Days'),
|
|
(30, '30 Days'),
|
|
(60, '60 Days'),
|
|
(90, '90 Days'),
|
|
(365, '365 Days'),
|
|
(0, 'All Time'),
|
|
]
|
|
|
|
|
|
def _period_selector_html(current_period):
|
|
opts = ''.join(
|
|
f'<option value="{v}"{" selected" if v == current_period else ""}>{label}</option>'
|
|
for v, label in _PERIOD_OPTIONS
|
|
)
|
|
return (
|
|
'<form method="post" action="/action/dnsserver/metrics_period_save"'
|
|
' style="display:flex;align-items:center;gap:0.75rem;margin-bottom:1rem">'
|
|
'<label class="form-label" style="margin:0;white-space:nowrap">Period</label>'
|
|
f'<select name="metrics_period" class="form-input" style="width:auto"'
|
|
f' onchange="this.form.submit()">{opts}</select>'
|
|
f'<input type="hidden" name="config_hash" value="{factory.e(config_utils.config_hash())}"/>'
|
|
'</form>'
|
|
)
|
|
|
|
|
|
def collect_tokens(cfg):
|
|
try:
|
|
new = mod_metrics.collect_metrics(cfg)
|
|
if new:
|
|
mod_metrics.update_metrics_db(new)
|
|
except Exception:
|
|
pass
|
|
|
|
tokens = config_utils.collect_layout_tokens(cfg)
|
|
dns = cfg.get('upstream_dns', {})
|
|
servers = dns.get('upstream_servers', [])
|
|
tokens['DNS_STRICT_ORDER'] = 'true' if dns.get('strict_order') else 'false'
|
|
tokens['DNS_CACHE_SIZE'] = str(dns.get('cache_size', '-'))
|
|
tokens['DNS_UPSTREAM_SERVERS_JSON'] = json.dumps(servers)
|
|
|
|
period = int(dns.get('metrics_period', 0))
|
|
dns_stats = load_dns_metrics(period=period)
|
|
|
|
tokens['DNS_PERIOD_SELECTOR'] = _period_selector_html(period)
|
|
tokens['DNS_METRICS_SINCE'] = dns_stats['since']
|
|
tokens['DNS_METRICS_UPDATED'] = dns_stats['updated']
|
|
tokens['DNS_STAT_QUERIES'] = dns_stats['queries']
|
|
tokens['DNS_STAT_HITS'] = dns_stats['hits']
|
|
tokens['DNS_STAT_HIT_RATE'] = dns_stats['hit_rate']
|
|
tokens['DNS_STAT_FORWARDED'] = dns_stats['forwarded']
|
|
tokens['DNS_STAT_AUTH'] = dns_stats['auth']
|
|
tokens['DNS_STAT_TCP_PEAK'] = dns_stats['tcp_peak']
|
|
tokens['DNS_STAT_CACHE_EVICTIONS'] = dns_stats['cache_evictions']
|
|
tokens['DNS_PROVIDERS_TABLE'] = _dns_providers_table(dns_stats['servers'])
|
|
return tokens
|