Skip to content
This repository has been archived by the owner on Jan 22, 2024. It is now read-only.

utils.sh ? #14

Open
amarkelov opened this issue Mar 11, 2016 · 1 comment
Open

utils.sh ? #14

amarkelov opened this issue Mar 11, 2016 · 1 comment

Comments

@amarkelov
Copy link

Guys, what is $PROGPATH/utils.sh and where does it come from?

@frzb
Copy link

frzb commented Jan 20, 2017

This is a small helper script with several useful generic functions for writing check plugins with sh. In most case it comes with the monitoring-plugins package of your distro.

The version installed here looks like that:

#! /bin/sh

STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
STATE_DEPENDENT=4

print_revision() {
        echo "$1 v$2 (monitoring-plugins 2.1.2)"
        printf '%b' "The Monitoring Plugins come with ABSOLUTELY NO WARRANTY. You may redistribute\ncopies of the plugins under the terms of the GNU General Public License.\nFor more information about these matters, see the file named COPYING.\n"
}

support() {
        printf '%b' "Send email to [email protected] if you have questions regarding use\nof this software. To submit patches or suggest improvements, send email to\[email protected]. Please include version information with all\ncorrespondence (when possible, use output from the --version option of the\nplugin itself).\n"
}

#
# check_range takes a value and a range string, returning successfully if an
# alert should be raised based on the range.  Range values are inclusive.
# Values may be integers or floats.
#
# Example usage:
#
# Generating an exit code of 1:
# check_range 5 2:8
#
# Generating an exit code of 0:
# check_range 1 2:8
#
check_range() {
        local v range yes no err decimal start end cmp match
        v="$1"
        range="$2"

        # whether to raise an alert or not
        yes=0
        no=1
        err=2

        # regex to match a decimal number
        decimal="-?([0-9]+\.?[0-9]*|[0-9]*\.[0-9]+)"

        # compare numbers (including decimals), returning true/false
        cmp() { awk "BEGIN{ if ($1) exit(0); exit(1)}"; }

        # returns successfully if the string in the first argument matches the
        # regex in the second
        match() { echo "$1" | grep -E -q -- "$2"; }

        # make sure value is valid
        if ! match "$v" "^$decimal$"; then
                echo "${0##*/}: check_range: invalid value" >&2
                unset -f cmp match
                return "$err"
        fi

        # make sure range is valid
        if ! match "$range" "^@?(~|$decimal)(:($decimal)?)?$"; then
                echo "${0##*/}: check_range: invalid range" >&2
                unset -f cmp match
                return "$err"
        fi

        # check for leading @ char, which negates the range
        if match $range '^@'; then
                range=${range#@}
                yes=1
                no=0
        fi

        # parse the range string
        if ! match "$range" ':'; then
                start=0
                end="$range"
        else
                start="${range%%:*}"
                end="${range#*:}"
        fi

        # do the comparison, taking positive ("") and negative infinity ("~")
        # into account
        if [ "$start" != "~" ] && [ "$end" != "" ]; then
                if cmp "$start <= $v" && cmp "$v <= $end"; then
                        unset -f cmp match
                        return "$no"
                else
                        unset -f cmp match
                        return "$yes"
                fi
        elif [ "$start" != "~" ] && [ "$end" = "" ]; then
                if cmp "$start <= $v"; then
                        unset -f cmp match
                        return "$no"
                else
                        unset -f cmp match
                        return "$yes"
                fi
        elif [ "$start" = "~" ] && [ "$end" != "" ]; then
                if cmp "$v <= $end"; then
                        unset -f cmp match
                        return "$no"
                else
                        unset -f cmp match
                        return "$yes"
                fi
        else
                unset -f cmp match
                return "$no"
        fi
}

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants