# Packages
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
# 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.