diff options
Diffstat (limited to '')
-rw-r--r-- | src/go/plugin/go.d/modules/httpcheck/init.go | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/src/go/plugin/go.d/modules/httpcheck/init.go b/src/go/plugin/go.d/modules/httpcheck/init.go new file mode 100644 index 000000000..a4a3ae27d --- /dev/null +++ b/src/go/plugin/go.d/modules/httpcheck/init.go @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package httpcheck + +import ( + "errors" + "fmt" + "net/http" + "regexp" + + "github.com/netdata/netdata/go/plugins/plugin/go.d/agent/module" + "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/matcher" + "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/web" +) + +type headerMatch struct { + exclude bool + key string + valMatcher matcher.Matcher +} + +func (hc *HTTPCheck) validateConfig() error { + if hc.URL == "" { + return errors.New("'url' not set") + } + return nil +} + +func (hc *HTTPCheck) initHTTPClient() (*http.Client, error) { + return web.NewHTTPClient(hc.Client) +} + +func (hc *HTTPCheck) initResponseMatchRegexp() (*regexp.Regexp, error) { + if hc.ResponseMatch == "" { + return nil, nil + } + return regexp.Compile(hc.ResponseMatch) +} + +func (hc *HTTPCheck) initHeaderMatch() ([]headerMatch, error) { + if len(hc.HeaderMatch) == 0 { + return nil, nil + } + + var hms []headerMatch + + for _, v := range hc.HeaderMatch { + if v.Key == "" { + continue + } + + hm := headerMatch{ + exclude: v.Exclude, + key: v.Key, + valMatcher: nil, + } + + if v.Value != "" { + m, err := matcher.Parse(v.Value) + if err != nil { + return nil, fmt.Errorf("parse key '%s value '%s': %v", v.Key, v.Value, err) + } + if v.Exclude { + m = matcher.Not(m) + } + hm.valMatcher = m + } + + hms = append(hms, hm) + } + + return hms, nil +} + +func (hc *HTTPCheck) initCharts() *module.Charts { + charts := httpCheckCharts.Copy() + + for _, chart := range *charts { + chart.Labels = []module.Label{ + {Key: "url", Value: hc.URL}, + } + } + + return charts +} |