74 lines
2.1 KiB
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(),
|
|
}
|
|
}
|