Все проверки выполнены успешно
CI / test (push) Successful in 2m32s
Docker / Build and publish worker image (push) Successful in 20m9s
Treat resolver transport failures as inconclusive checks so they do not open outage alerts.
63 строки
1.3 KiB
Go
63 строки
1.3 KiB
Go
package cdns
|
|
|
|
import (
|
|
"net"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/miekg/dns"
|
|
)
|
|
|
|
// DNS check configuration constants.
|
|
const (
|
|
// Timeout is the DNS query timeout in seconds.
|
|
Timeout float64 = float64(1.5)
|
|
MaxTrials uint = 3
|
|
MaxNameservers uint = 20
|
|
MaxAddresses uint = 10
|
|
EdnsbufferSize uint16 = 4096
|
|
)
|
|
|
|
var (
|
|
conf *dns.ClientConfig
|
|
debug = false
|
|
maxTrials = 3
|
|
v4only = true
|
|
v6only = false
|
|
bufsize = EdnsbufferSize
|
|
timeout = time.Duration(float64(Timeout) * float64(time.Second))
|
|
noedns = false
|
|
recursion = false
|
|
tcp = false
|
|
noauthrequired = false
|
|
nodnssec = false
|
|
)
|
|
|
|
func init() {
|
|
conf = &dns.ClientConfig{
|
|
Servers: resolversFromEnv(),
|
|
Port: "53",
|
|
}
|
|
}
|
|
|
|
func resolversFromEnv() []string {
|
|
const defaults = "188.93.17.19,188.93.16.19,82.117.245.122"
|
|
resolvers := strings.Split(os.Getenv("RSMON_DNS_RESOLVERS"), ",")
|
|
if strings.TrimSpace(os.Getenv("RSMON_DNS_RESOLVERS")) == "" {
|
|
resolvers = strings.Split(defaults, ",")
|
|
}
|
|
|
|
valid := make([]string, 0, len(resolvers))
|
|
for _, resolver := range resolvers {
|
|
resolver = strings.TrimSpace(resolver)
|
|
if net.ParseIP(resolver) != nil {
|
|
valid = append(valid, resolver)
|
|
}
|
|
}
|
|
if len(valid) == 0 {
|
|
return strings.Split(defaults, ",")
|
|
}
|
|
return valid
|
|
}
|