Categorygithub.com/NETWAYS/go-check
modulepackage
0.6.2
Repository: https://github.com/netways/go-check.git
Documentation: pkg.go.dev

# README

go-check

GitHub release (latest by date) GoDoc Test Status GitHub go.mod Go version GitHub

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.

https://github.com/monitoring-plugins/monitoring-plugin-guidelines/blob/main/definitions/01.range_expressions.md

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.

https://github.com/monitoring-plugins/monitoring-plugin-guidelines/blob/main/monitoring_plugins_interface/03.Output.md#performance-data

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().

# Structs

Config represents a configuration for a monitoring plugin's CLI.
Defining a threshold for any numeric value Format: [@]start:end Threshold Generate an alert if x..