{{define "content"}} {{$d := .Data.D}}

Dashboard

{{$d.Hostname}} · up {{$d.UptimeText}} · VibeDNS {{.Version}}

Test a lookup Query log
{{/* Service status strip */}}
{{if $d.DNSRunning}}DNS listeners running{{else}}DNS listeners down{{end}}
UDP {{.Data.UDPAddr}} · TCP {{.Data.TCPAddr}}
Recursion {{if $d.RecursionEnabled}}on{{else}}off{{end}}
{{len $d.Upstreams}} upstream{{if ne (len $d.Upstreams) 1}}s{{end}}
Cache {{if $d.CacheEnabled}}on{{else}}off{{end}}
{{num $d.CacheEntries}} entries
Queries per second
{{printf "%.1f" $d.QueriesPerSec}}
{{/* Headline counters */}}
{{template "stat" dict "Label" "Total queries" "Value" (num $d.TotalQueries) "Icon" "bi-arrow-left-right" "Sub" (printf "%s avg response" (ms $d.AvgQueryMS))}} {{template "stat" dict "Label" "Blocked" "Value" (num $d.Blocked) "Icon" "bi-shield-slash" "Tone" "danger" "Sub" (printf "%s of all queries" (pct $d.BlockRate))}} {{template "stat" dict "Label" "Cache hit rate" "Value" (pct $d.CacheHitRate) "Icon" "bi-lightning-charge" "Tone" "success" "Sub" (printf "%s hits · %s misses" (num $d.CacheHits) (num $d.CacheMisses))}} {{template "stat" dict "Label" "Authoritative" "Value" (num $d.Authoritative) "Icon" "bi-diagram-3" "Tone" "primary" "Sub" (printf "%s zones · %s records" (num $d.Zones) (num $d.Records))}} {{template "stat" dict "Label" "Recursive" "Value" (num $d.Recursive) "Icon" "bi-globe2" "Sub" (printf "%s upstream latency" (ms $d.AvgResolverMS))}} {{template "stat" dict "Label" "Cache entries" "Value" (num $d.CacheEntries) "Icon" "bi-database" "Sub" (bytes $d.CacheBytes)}} {{template "stat" dict "Label" "Blacklist domains" "Value" (num $d.BlacklistDomains) "Icon" "bi-list-ul" "Sub" (printf "across %s blacklists" (num $d.Blacklists))}} {{template "stat" dict "Label" "Refused" "Value" (num $d.Refused) "Icon" "bi-hand-index" "Tone" "warning" "Sub" (printf "%s rate limited · %s errors" (num $d.RateLimited) (num $d.Errors))}}
{{/* Activity + type breakdown */}}
Query activity — last 24 hours {{if not $d.QueryLogEnabled}} query logging off {{end}}
{{if and $d.QueryLogEnabled $d.Activity}}
{{else}} {{template "empty" dict "Icon" "bi-graph-up" "Title" "No activity to chart yet" "Message" "Query logging must be enabled for the activity chart. Once queries arrive they appear here."}} {{end}}
Queries by type
{{if $d.QueriesByType}}
{{else}} {{template "empty" dict "Icon" "bi-pie-chart" "Title" "No queries yet" "Message" "Point a client at this server and the breakdown appears here."}} {{end}}
{{/* Top lists */}}
Top queried domains
{{if $d.TopDomains}}
{{range $d.TopDomains}} {{end}}
{{trimDot .Name}} {{num .Count}}
{{else}}
{{template "empty" dict "Icon" "bi-bar-chart" "Title" "Nothing yet" "Message" "Queries from the last 24 hours appear here."}}
{{end}}
Top blocked domains
{{if $d.TopBlocked}}
{{range $d.TopBlocked}} {{end}}
{{trimDot .Name}} {{num .Count}}
{{else}}
{{template "empty" dict "Icon" "bi-shield-check" "Title" "Nothing blocked" "Message" "Assign a blacklist to a client network to start filtering."}}
{{end}}
Top clients
{{if $d.TopClients}}
{{range $d.TopClients}} {{end}}
{{.Name}}
{{if .Extra}}
{{.Extra}}
{{end}}
{{num .Count}}
{{else}}
{{template "empty" dict "Icon" "bi-people" "Title" "No clients yet" "Message" "Clients that query this server appear here."}}
{{end}}
{{/* Upstreams and recent activity */}}
Upstream resolvers Configure
{{range $d.Upstreams}} {{else}} {{end}}
ServerStatusLatencyQueries
{{.Address}} {{if .Healthy}}healthy {{else}}resting{{end}} {{ms .LatencyMS}} {{num .Queries}}
No upstream resolvers configured.
Recent DNS activity View all
{{if $d.Recent}}
{{range $d.Recent}} {{end}}
TimeClientQueryTypeResultSource
{{timeOnly .Timestamp}} {{.ClientIP}} {{trimDot .QName}} {{.QType}} {{.Rcode}} {{.Source}}
{{else}}
{{template "empty" dict "Icon" "bi-clock-history" "Title" "No recent activity" "Message" "Recent queries appear here once query logging is enabled and clients start resolving."}}
{{end}}
{{/* Chart data travels in data- attributes rather than an inline script, so the page needs no CSP exception. app.js reads and parses it. */}} {{end}} {{define "scripts"}} {{end}}