From a6e9398f782f87b551031d488210ca8fbc43d63c Mon Sep 17 00:00:00 2001 From: Denis Kirillov Date: Fri, 4 Apr 2025 11:06:50 +0300 Subject: [PATCH] [#2] healthchecker: Update readme and log Signed-off-by: Denis Kirillov --- plugin/healthchecker/README.md | 26 ++++----- plugin/healthchecker/checkers/http.go | 8 +-- plugin/healthchecker/checkers/icmp.go | 1 + plugin/healthchecker/filter.go | 3 +- plugin/healthchecker/filter_test.go | 4 +- plugin/healthchecker/healthchecker.go | 1 + plugin/healthchecker/setup.go | 2 +- plugin/healthchecker/setup_test.go | 78 +++++++++++++-------------- 8 files changed, 62 insertions(+), 61 deletions(-) diff --git a/plugin/healthchecker/README.md b/plugin/healthchecker/README.md index 9b2ab12d9..23b82b66a 100644 --- a/plugin/healthchecker/README.md +++ b/plugin/healthchecker/README.md @@ -65,41 +65,41 @@ Make sure you run Coredns as root. In this configuration, we will filter `A` and `AAAA` records, store maximum 1000 records in cache, and start recheck of each record in cache for every 3 seconds via http client. The plugin will check records with name -fs.neo.org (`@` in config) or cdn.fs.neo.org (`^cdn\.fs\.neo\.org` in config). +frostfs.info (`@` in config) or cdn.frostfs.info (`^cdn\.frostfs\.info` in config). HTTP requests to check and update statuses of IPs will use default 80 port and wait for default 2 seconds. ``` corefile -fs.neo.org. { - healthchecker http 1000 1s @ ^cdn\.fs\.neo\.org - file db.example.org fs.neo.org +frostfs.info. { + healthchecker http 1000 1s @ ^cdn\.frostfs\.info + file db.example.org frostfs.info } ``` The same as above but port and timeout for HTTP client are set. ``` corefile -fs.neo.org. { - healthchecker http 1000 1s @ ^cdn\.fs\.neo\.org { +frostfs.info. { + healthchecker http 1000 1s @ ^cdn\.frostfs\.info { port 80 timeout 3s } - file db.example.org fs.neo.org + file db.example.org frostfs.info } ``` Default ICMP checker: ``` -fs.neo.org. { - healthchecker icmp 1000 1s @ ^cdn\.fs\.neo\.org - file db.example.org fs.neo.org +frostfs.info. { + healthchecker icmp 1000 1s @ ^cdn\.frostfs\.info + file db.example.org frostfs.info } ``` Privileged ICMP checker and custom timeout: ``` -fs.neo.org. { - healthchecker icmp 1000 1s @ ^cdn\.fs\.neo\.org { +frostfs.info. { + healthchecker icmp 1000 1s @ ^cdn\.frostfs\.info { privileged timeout 3s } - file db.example.org fs.neo.org + file db.example.org frostfs.info } ``` diff --git a/plugin/healthchecker/checkers/http.go b/plugin/healthchecker/checkers/http.go index fcd2debce..13ef329fd 100644 --- a/plugin/healthchecker/checkers/http.go +++ b/plugin/healthchecker/checkers/http.go @@ -11,7 +11,7 @@ import ( "github.com/coredns/coredns/plugin/pkg/log" ) -type HttpChecker struct { +type HTTPChecker struct { logger log.P client *http.Client port string @@ -68,7 +68,7 @@ func ParseHTTPParams(c *caddy.Controller) (*HTTPCheckerParams, error) { } // NewHttpChecker creates http checker. -func NewHttpChecker(logger log.P, prm *HTTPCheckerParams) (*HttpChecker, error) { +func NewHttpChecker(logger log.P, prm *HTTPCheckerParams) (*HTTPChecker, error) { if prm.Timeout <= 0 { prm.Timeout = defaultHTTPTimeout } @@ -88,7 +88,7 @@ func NewHttpChecker(logger log.P, prm *HTTPCheckerParams) (*HttpChecker, error) Timeout: prm.Timeout, } - return &HttpChecker{ + return &HTTPChecker{ logger: logger, client: client, port: prm.Port, @@ -96,7 +96,7 @@ func NewHttpChecker(logger log.P, prm *HTTPCheckerParams) (*HttpChecker, error) }, nil } -func (h HttpChecker) Check(endpoint string) bool { +func (h HTTPChecker) Check(endpoint string) bool { response, err := h.client.Get(h.scheme + "://" + net.JoinHostPort(endpoint, h.port)) if err != nil { h.logger.Debugf(err.Error()) diff --git a/plugin/healthchecker/checkers/icmp.go b/plugin/healthchecker/checkers/icmp.go index 58cc2083e..125fd4d39 100644 --- a/plugin/healthchecker/checkers/icmp.go +++ b/plugin/healthchecker/checkers/icmp.go @@ -8,6 +8,7 @@ import ( "github.com/coredns/caddy" "github.com/coredns/coredns/plugin/pkg/log" + "golang.org/x/net/icmp" "golang.org/x/net/ipv4" "golang.org/x/net/ipv6" diff --git a/plugin/healthchecker/filter.go b/plugin/healthchecker/filter.go index cc439382e..18e4041f8 100644 --- a/plugin/healthchecker/filter.go +++ b/plugin/healthchecker/filter.go @@ -15,7 +15,6 @@ type ( cache *lru.Cache checker Checker interval time.Duration - names map[string]struct{} filters []Filter } @@ -84,7 +83,7 @@ func (p *HealthCheckFilter) FilterRecords(records []dns.RR) []dns.RR { if matchFilters(p.filters, r.Header().Name) { endpoint, err := getEndpoint(r) if err != nil { - log.Warningf("record will be ignored: %s", err.Error()) + log.Debugf("record will be ignored: %s", err.Error()) continue } e := p.get(endpoint) diff --git a/plugin/healthchecker/filter_test.go b/plugin/healthchecker/filter_test.go index 21245595d..01403896e 100644 --- a/plugin/healthchecker/filter_test.go +++ b/plugin/healthchecker/filter_test.go @@ -7,8 +7,8 @@ import ( ) func TestFilter(t *testing.T) { - f, err := NewRegexpFilter(".*\\.fs\\.neo\\.org") + f, err := NewRegexpFilter(".*\\.frostfs\\.info") require.NoError(t, err) - require.True(t, f.Match("cdn.fs.neo.org")) + require.True(t, f.Match("cdn.frostfs.info")) } diff --git a/plugin/healthchecker/healthchecker.go b/plugin/healthchecker/healthchecker.go index 66a171307..fce25d4f2 100644 --- a/plugin/healthchecker/healthchecker.go +++ b/plugin/healthchecker/healthchecker.go @@ -5,6 +5,7 @@ import ( "github.com/coredns/coredns/plugin" clog "github.com/coredns/coredns/plugin/pkg/log" + "github.com/miekg/dns" ) diff --git a/plugin/healthchecker/setup.go b/plugin/healthchecker/setup.go index 28aa74466..6af0acf85 100644 --- a/plugin/healthchecker/setup.go +++ b/plugin/healthchecker/setup.go @@ -73,7 +73,7 @@ func filterParamsParse(c *caddy.Controller) (*HealthCheckFilter, error) { } origin := URL.Hostname() - //parsing cache size + // parsing cache size size, err := strconv.Atoi(args[1]) if err != nil || size <= 0 { return nil, plugin.Error(pluginName, fmt.Errorf("invalid cache size: %s", args[1])) diff --git a/plugin/healthchecker/setup_test.go b/plugin/healthchecker/setup_test.go index 10231954a..0fa508c3b 100644 --- a/plugin/healthchecker/setup_test.go +++ b/plugin/healthchecker/setup_test.go @@ -18,88 +18,88 @@ func TestSetup(t *testing.T) { {args: "http", valid: false}, {args: "http 1000", valid: false}, {args: "http 1000 1s", valid: false}, - // http method params check, 100, 3s, fs.neo.org. are valid cache size, check interval and origin - {args: "http 100 1s fs.neo.org. @", valid: true}, - {args: `http 100 1s fs.neo.org. { + // http method params check, 100, 3s, frostfs.info. are valid cache size, check interval and origin + {args: "http 100 1s frostfs.info. @", valid: true}, + {args: `http 100 1s frostfs.info. { port asdf }`, valid: false}, - {args: `http 100 1s fs.neo.org. { + {args: `http 100 1s frostfs.info. { port 0 }`, valid: false}, - {args: `http 100 1s fs.neo.org. { + {args: `http 100 1s frostfs.info. { port -1 }`, valid: false}, - {args: `http 100 1s fs.neo.org. { + {args: `http 100 1s frostfs.info. { port 80 }`, valid: true}, - {args: `http 100 1s fs.neo.org. { + {args: `http 100 1s frostfs.info. { port 80 80 }`, valid: false}, - {args: `http 100 1s fs.neo.org. { + {args: `http 100 1s frostfs.info. { port 80 timeout 3s }`, valid: true}, - {args: `http 100 1s fs.neo.org. { + {args: `http 100 1s frostfs.info. { port 80 timeout 3s 3s }`, valid: false}, - {args: `http 100 1s fs.neo.org. { + {args: `http 100 1s frostfs.info. { port 80 timeout 0 }`, valid: false}, - {args: `http 100 1s fs.neo.org. { + {args: `http 100 1s frostfs.info. { port 80 timeout seconds }`, valid: false}, // icmp method params check - {args: "icmp 100 1s fs.neo.org. @", valid: true}, - {args: `icmp 100 1s fs.neo.org. { + {args: "icmp 100 1s frostfs.info. @", valid: true}, + {args: `icmp 100 1s frostfs.info. { timeout 3s }`, valid: true}, - {args: `icmp 100 1s fs.neo.org. { + {args: `icmp 100 1s frostfs.info. { timeout 3s 3s }`, valid: false}, - {args: `icmp 100 1s fs.neo.org. { + {args: `icmp 100 1s frostfs.info. { timeout 0 }`, valid: false}, - {args: `icmp 100 1s fs.neo.org. { + {args: `icmp 100 1s frostfs.info. { timeout seconds }`, valid: false}, - {args: `icmp 100 1s fs.neo.org. { + {args: `icmp 100 1s frostfs.info. { privileged }`, valid: true}, - {args: `icmp 100 1s fs.neo.org. { + {args: `icmp 100 1s frostfs.info. { privileged timeout 3s }`, valid: true}, - {args: `icmp 100 1s fs.neo.org. { + {args: `icmp 100 1s frostfs.info. { privileged true }`, valid: false}, // cache size - {args: "http -1 1s fs.neo.org.", valid: false}, - {args: "http 100a 1s fs.neo.org.", valid: false}, - {args: "http 0 1s fs.neo.org.", valid: false}, - {args: "icmp -1 1s fs.neo.org.", valid: false}, - {args: "icmp 100a 1s fs.neo.org.", valid: false}, - {args: "icmp 0 1s fs.neo.org.", valid: false}, + {args: "http -1 1s frostfs.info.", valid: false}, + {args: "http 100a 1s frostfs.info.", valid: false}, + {args: "http 0 1s frostfs.info.", valid: false}, + {args: "icmp -1 1s frostfs.info.", valid: false}, + {args: "icmp 100a 1s frostfs.info.", valid: false}, + {args: "icmp 0 1s frostfs.info.", valid: false}, // check interval, test with a valid value is above - {args: "http 100 0h fs.neo.org.", valid: false}, - {args: "http 100 100 fs.neo.org.", valid: false}, - {args: "http 100 3000a fs.neo.org.", valid: false}, - {args: "http 100 -1m fs.neo.org.", valid: false}, - {args: "icmp 100 0h fs.neo.org.", valid: false}, - {args: "icmp 100 100 fs.neo.org.", valid: false}, - {args: "icmp 100 3000a fs.neo.org.", valid: false}, - {args: "icmp 100 -1m fs.neo.org.", valid: false}, + {args: "http 100 0h frostfs.info.", valid: false}, + {args: "http 100 100 frostfs.info.", valid: false}, + {args: "http 100 3000a frostfs.info.", valid: false}, + {args: "http 100 -1m frostfs.info.", valid: false}, + {args: "icmp 100 0h frostfs.info.", valid: false}, + {args: "icmp 100 100 frostfs.info.", valid: false}, + {args: "icmp 100 3000a frostfs.info.", valid: false}, + {args: "icmp 100 -1m frostfs.info.", valid: false}, // origin, test with a valid value is above - {args: "http 100 3000 fs.neo.org", valid: false}, - {args: "icmp 100 3000 fs.neo.org", valid: false}, + {args: "http 100 3000 frostfs.info", valid: false}, + {args: "icmp 100 3000 frostfs.info", valid: false}, // names - {args: "http 100 3m fs.neo.org. @ kimchi", valid: true}, - {args: "http 100 3m fs.neo.org. ^cdn\\.fs\\.\\neo\\.org", valid: true}, + {args: "http 100 3m frostfs.info. @ kimchi", valid: true}, + {args: "http 100 3m frostfs.info. ^cdn\\.\\frostfs\\.info", valid: true}, {args: "http 100 3m \\uFFFD", valid: false}, - {args: "icmp 100 3m fs.neo.org. @ kimchi", valid: true}, - {args: "icmp 100 3m fs.neo.org. ^cdn\\.fs\\.\\neo\\.org", valid: true}, + {args: "icmp 100 3m frostfs.info. @ kimchi", valid: true}, + {args: "icmp 100 3m frostfs.info. ^cdn\\.\\frostfs\\.info", valid: true}, {args: "icmp 100 3m \\uFFFD", valid: false}, } { c := caddy.NewTestController("dns", "healthchecker "+tc.args)