platform: modularize api/gui, add docs-tests-web foundation, and refresh root config
This commit is contained in:
81
selective-vpn-api/app/dns_settings_benchmark.go
Normal file
81
selective-vpn-api/app/dns_settings_benchmark.go
Normal file
@@ -0,0 +1,81 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
dnscfgpkg "selective-vpn-api/app/dnscfg"
|
||||
"time"
|
||||
)
|
||||
|
||||
var dnsBenchmarkDefaultDomains = append([]string(nil), dnscfgpkg.BenchmarkDefaultDomains...)
|
||||
|
||||
const (
|
||||
dnsBenchmarkProfileQuick = "quick"
|
||||
dnsBenchmarkProfileLoad = "load"
|
||||
)
|
||||
|
||||
type dnsBenchmarkOptions = dnscfgpkg.BenchmarkOptions
|
||||
|
||||
func normalizeBenchmarkUpstreams(in []DNSBenchmarkUpstream) []string {
|
||||
if len(in) == 0 {
|
||||
return nil
|
||||
}
|
||||
raw := make([]string, 0, len(in))
|
||||
for _, item := range in {
|
||||
raw = append(raw, item.Addr)
|
||||
}
|
||||
return dnscfgpkg.NormalizeBenchmarkUpstreamStrings(raw, normalizeDNSUpstream)
|
||||
}
|
||||
|
||||
func benchmarkDNSUpstream(upstream string, domains []string, timeout time.Duration, attempts int, opts dnsBenchmarkOptions) DNSBenchmarkResult {
|
||||
classify := func(err error) string {
|
||||
switch classifyDNSError(err) {
|
||||
case dnsErrorNXDomain:
|
||||
return dnscfgpkg.BenchmarkErrorNXDomain
|
||||
case dnsErrorTimeout:
|
||||
return dnscfgpkg.BenchmarkErrorTimeout
|
||||
case dnsErrorTemporary:
|
||||
return dnscfgpkg.BenchmarkErrorTemporary
|
||||
default:
|
||||
return dnscfgpkg.BenchmarkErrorOther
|
||||
}
|
||||
}
|
||||
pkgRes := dnscfgpkg.BenchmarkDNSUpstream(upstream, domains, timeout, attempts, opts, dnsLookupAOnce, classify)
|
||||
return DNSBenchmarkResult{
|
||||
Upstream: pkgRes.Upstream,
|
||||
Attempts: pkgRes.Attempts,
|
||||
OK: pkgRes.OK,
|
||||
Fail: pkgRes.Fail,
|
||||
NXDomain: pkgRes.NXDomain,
|
||||
Timeout: pkgRes.Timeout,
|
||||
Temporary: pkgRes.Temporary,
|
||||
Other: pkgRes.Other,
|
||||
AvgMS: pkgRes.AvgMS,
|
||||
P95MS: pkgRes.P95MS,
|
||||
Score: pkgRes.Score,
|
||||
Color: pkgRes.Color,
|
||||
}
|
||||
}
|
||||
|
||||
func dnsLookupAOnce(host string, upstream string, timeout time.Duration) ([]string, error) {
|
||||
return dnscfgpkg.DNSLookupAOnce(host, upstream, timeout, splitDNS, isPrivateIPv4)
|
||||
}
|
||||
|
||||
func benchmarkTopN(results []DNSBenchmarkResult, n int, fallback []string) []string {
|
||||
pkgResults := make([]dnscfgpkg.BenchmarkResult, 0, len(results))
|
||||
for _, item := range results {
|
||||
pkgResults = append(pkgResults, dnscfgpkg.BenchmarkResult{
|
||||
Upstream: item.Upstream,
|
||||
Attempts: item.Attempts,
|
||||
OK: item.OK,
|
||||
Fail: item.Fail,
|
||||
NXDomain: item.NXDomain,
|
||||
Timeout: item.Timeout,
|
||||
Temporary: item.Temporary,
|
||||
Other: item.Other,
|
||||
AvgMS: item.AvgMS,
|
||||
P95MS: item.P95MS,
|
||||
Score: item.Score,
|
||||
Color: item.Color,
|
||||
})
|
||||
}
|
||||
return dnscfgpkg.BenchmarkTopN(pkgResults, n, fallback)
|
||||
}
|
||||
Reference in New Issue
Block a user