# README
go-check
go-check is a library to help with development of monitoring plugins for tools like Icinga.
See the documentation on pkg.go.dev for more details and examples.
Usage
Simple Example
package main
import (
"github.com/NETWAYS/go-check"
)
func main() {
config := check.NewConfig()
config.Name = "check_test"
config.Readme = `Test Plugin`
config.Version = "1.0.0"
_ = config.FlagSet.StringP("hostname", "H", "localhost", "Hostname to check")
config.ParseArguments()
// Some checking should be done here, when --help is not passed
check.Exitf(check.OK, "Everything is fine - answer=%d", 42)
// Output:
// OK - Everything is fine - answer=42
}
Exit Codes
check.Exitf(OK, "Everything is fine - value=%d", 42) // OK, 0
check.ExitRaw(check.Critical, "CRITICAL", "|", "percent_packet_loss=100") // CRITICAL, 2
err := fmt.Errorf("connection to %s has been timed out", "localhost:12345")
check.ExitError(err) // UNKNOWN, 3
Timeout Handling
checkPluginTimeoutInSeconds := 10
go check.HandleTimeout(checkPluginTimeoutInSeconds)
Thresholds
Threshold objects represent monitoring plugin thresholds that have methods to evaluate if a given input is within the range.
They can be created with the ParseThreshold parser.
warnThreshold, err := check.ParseThreshold("~:3")
if err != nil {
return t, err
}
if warnThreshold.DoesViolate(3.6) {
fmt.Println("Not great, not terrible.")
}
Perfdata
The Perfdata object represents monitoring plugin performance data that relates to the actual execution of a host or service check.
var pl perfdata.PerfdataList
pl.Add(&perfdata.Perfdata{
Label: "process.cpu.percent",
Value: 25,
Uom: "%",
Warn: 50,
Crit: 90,
Min: 0,
Max: 100})
fmt.Println(pl.String())
Results
allStates = []int{0,2,3,0,1,2}
switch result.WorstState(allStates...) {
case 0:
rc = check.OK
case 1:
rc = check.Warning
case 2:
rc = check.Critical
default:
rc = check.Unknown
}
Partial Results
o := Overall{}
o.Add(0, "Something is OK")
pr := PartialResult{
State: check.OK,
Output: "My Subcheck",
}
o.AddSubcheck(pr)
fmt.Println(o.GetOutput())
// states: ok=1
// [OK] Something is OK
// \_ [OK] My Subcheck
Examples
A few plugins using go-check:
License
Copyright (c) 2020 NETWAYS GmbH
This library is distributed under the GPL-2.0 or newer license found in the COPYING file.
# Packages
No description provided by the author
No description provided by the author
No description provided by the author
result tries to.
No description provided by the author
# Functions
BaseExit exits the process with a given return code.
BoundaryToString returns the string representation of a Threshold boundary.
CatchPanic is a general function for defer, to capture any panic that occurred during runtime of a check
The function will recover from the condition and exit with a proper UNKNOWN status, while showing error and the call stack.
ExitError exists with an Unknown state while reporting the error.
Exitf prints the plugin output using formatting and exits the program.
ExitRaw prints the plugin output with the state prefixed and exits the program.
FormatFloat returns a string representation of floats, avoiding scientific notation and removes trailing zeros.
Helper for a goroutine, to wait for signals and timeout, and exit with a proper code.
LoadFromEnv can be used to load struct values from 'env' tags.
NewConfig returns a Config struct with some defaults.
Parse a Threshold from a string.
StatusText returns the string corresponding to a state.
# Constants
Critical means there is a problem that requires immediate action.
No description provided by the author
OK means everything is fine.
No description provided by the author
Unknown means the status can not be determined, probably due to an error or something missing.
No description provided by the author
Warning means there is a problem the admin should review.
No description provided by the author
# Variables
AllowExit lets you disable the call to os.Exit() in ExitXxx() functions of this package.
No description provided by the author
No description provided by the author
PrintStack prints the error stack when recovering from a panic with CatchPanic().