influxdb/kit/check/helpers.go

74 lines
2.1 KiB
Go

package check
import (
"context"
"fmt"
)
// NamedChecker is a superset of Checker that also indicates the name of the service.
// Prefer to implement NamedChecker if your service has a fixed name,
// as opposed to calling *Health.AddNamed.
type NamedChecker interface {
Checker
CheckName() string
}
// CheckerFunc is an adapter of a plain func() error to the Checker interface.
type CheckerFunc func(ctx context.Context) Response
// Check implements Checker.
func (f CheckerFunc) Check(ctx context.Context) Response {
return f(ctx)
}
// Named returns a Checker that will attach a name to the Response from the check.
// This way, it is possible to augment a Response with a human-readable name, but not have to encode
// that logic in the actual check itself.
func Named(name string, checker Checker) Checker {
return CheckerFunc(func(ctx context.Context) Response {
resp := checker.Check(ctx)
resp.Name = name
return resp
})
}
// NamedFunc is the same as Named except it takes a CheckerFunc.
func NamedFunc(name string, fn CheckerFunc) Checker {
return Named(name, fn)
}
// ErrCheck will create a health checker that executes a function. If the function returns an error,
// it will return an unhealthy response. Otherwise, it will be as if the Ok function was called.
// Note: it is better to use CheckFunc, because with Check, the context is ignored.
func ErrCheck(fn func() error) Checker {
return CheckerFunc(func(_ context.Context) Response {
if err := fn(); err != nil {
return Error(err)
}
return Pass()
})
}
// Pass is a utility function to generate a passing status response with the default parameters.
func Pass() Response {
return Response{
Status: StatusPass,
}
}
// Info is a utility function to generate a healthy status with a printf message.
func Info(msg string, args ...interface{}) Response {
return Response{
Status: StatusPass,
Message: fmt.Sprintf(msg, args...),
}
}
// Error is a utility function for creating a response from an error message.
func Error(err error) Response {
return Response{
Status: StatusFail,
Message: err.Error(),
}
}