netdata/netdata

View on GitHub
src/go/collectors/go.d.plugin/modules/httpcheck/init.go

Summary

Maintainability
A
0 mins
Test Coverage
// SPDX-License-Identifier: GPL-3.0-or-later

package httpcheck

import (
    "errors"
    "fmt"
    "net/http"
    "regexp"

    "github.com/netdata/netdata/go/go.d.plugin/agent/module"
    "github.com/netdata/netdata/go/go.d.plugin/pkg/matcher"
    "github.com/netdata/netdata/go/go.d.plugin/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
}