Added last_diagnosis check

This commit is contained in:
Gordon Grant-Stuart 2022-11-24 14:43:01 +00:00
parent 8f937be96d
commit 1b4f6f0a31

View File

@ -5,16 +5,30 @@ STATE_WARNING=1
STATE_CRITICAL=2 STATE_CRITICAL=2
STATE_UNKNOWN=3 STATE_UNKNOWN=3
LAST_DIAGNOSIS_CRIT=720 # default value
LAST_DIAGNOSIS_WARN=24 # default value
CHECK_STATE=$STATE_OK CHECK_STATE=$STATE_OK
function help () {
if [[ "${1}" == "-h" ]]; then
cat <<EOF cat <<EOF
This plugin returns the results of the most recent Yunohost diagnostic. This plugin returns the results of the most recent Yunohost diagnostic.
Usage: Usage:
check_yunohost [-h|<Category>|all|last_diagnosis] check_yunohost [-h] -a [<category>|all|last_diagnosis] [-c <Crit>] [-w <Warn>]
Options:
-h
Print this
-a
last_diagnosis: Hours since last diagnosis was run.
all: Check all categories.
<category>: See below for list of categories.
-c
Only applicable to 'last_diagnosis'.
-w
Only applicable to 'last_diagnosis'.
Category can be one of the following: Category can be one of the following:
"Base system" "Base system"
@ -28,13 +42,8 @@ if [[ "${1}" == "-h" ]]; then
"System configurations" "System configurations"
"Applications" "Applications"
Options:
-h, --help
Print this
EOF EOF
exit }
fi
function category () { function category () {
while IFS= read line; do while IFS= read line; do
@ -49,34 +58,71 @@ function category () {
done done
} }
SHOW=$(mktemp /tmp/XXXXXX)
# $(( ($(date +%s)-$(yunohost diagnosis show --full | grep timestamp | head -n1 | grep -o '[0-9]*'))/3600 )) sudo yunohost diagnosis show --full > $SHOW
SHOW=$(mktemp /tmp/XXXXXX)
sudo yunohost diagnosis
# SHOW="show.yml" # SHOW="show.yml"
LAST_DIAGNOSIS=$(( ($(date +%s) - $(cat $SHOW | grep timestamp | tail -n1 | grep -o '[0-9]*') )/3600 ))
OKS=$(cat $SHOW | category "${1}" | grep -Ec "^ *status: (SUCCESS|INFO)") OKS=$(cat $SHOW | category "${1}" | grep -Ec "^ *status: (SUCCESS|INFO)")
WARNINGS=$(cat $SHOW | category "${1}" | grep -c "^ *status: WARNING") WARNINGS=$(cat $SHOW | category "${1}" | grep -c "^ *status: WARNING")
ERRORS=$(cat $SHOW | category "${1}" | grep -c "^ *status: ERROR") ERRORS=$(cat $SHOW | category "${1}" | grep -c "^ *status: ERROR")
if [[ $ERRORS -gt 0 ]]; then CHECK_TYPE='category'
CHECK_STATE=$STATE_CRITICAL
cat $SHOW | category "${1}" | grep -A1 "^ *status: ERROR" | grep '^ *summary: ' | sed 's/^ *summary: /ERROR: /' while [[ $# -gt 0 ]]; do
cat $SHOW | category "${1}" | grep -A1 "^ *status: WARNING" | grep '^ *summary: ' | sed 's/^ *summary: /WARNING: /' case "${1}" in
echo -e "|'OK'=$OKS 'WARNING'=$WARNINGS 'ERROR'=$ERRORS" -h)
elif [[ $WARNINGS -gt 0 ]]; then help
CHECK_STATE=$STATE_WARNING exit
cat $SHOW | category "${1}" | grep -A1 "^ *status: WARNING" | grep '^ *summary: ' | sed 's/^ *summary: /WARNING: /' ;;
echo -e "|'OK'=$OKS 'WARNING'=$WARNINGS 'ERROR'=$ERRORS" last_diagnosis)
elif [[ $OKS -eq 0 ]]; then CHECK_TYPE='last_diagnosis'
CHECK_STATE=$STATE_UNKNOWN ;;
echo -e "UNKNOWN\nCould not get results from 'yunohost diagnosis show'" -w)
else shift
CHECK_STATE=$STATE_OK LAST_DIAGNOSIS_WARN="$1"
echo "All OK" ;;
echo -e "|'OK'=$OKS 'WARNING'=$WARNINGS 'ERROR'=$ERRORS" -c)
fi shift
LAST_DIAGNOSIS_CRIT="$1"
;;
esac
shift
done
case "$CHECK_TYPE" in
category)
if [[ $ERRORS -gt 0 ]]; then
CHECK_STATE=$STATE_CRITICAL
cat $SHOW | category "${1}" | grep -A1 "^ *status: ERROR" | grep '^ *summary: ' | sed 's/^ *summary: /ERROR: /'
cat $SHOW | category "${1}" | grep -A1 "^ *status: WARNING" | grep '^ *summary: ' | sed 's/^ *summary: /WARNING: /'
elif [[ $WARNINGS -gt 0 ]]; then
CHECK_STATE=$STATE_WARNING
cat $SHOW | category "${1}" | grep -A1 "^ *status: WARNING" | grep '^ *summary: ' | sed 's/^ *summary: /WARNING: /'
elif [[ $OKS -eq 0 ]]; then
CHECK_STATE=$STATE_UNKNOWN
echo -e "UNKNOWN: Could not get results from 'yunohost diagnosis show'"
else
CHECK_STATE=$STATE_OK
echo "OK: All diagnostics return SUCCESS"
fi
;;
last_diagnosis)
if [[ $LAST_DIAGNOSIS -gt $LAST_DIAGNOSIS_CRIT ]]; then
CHECK_STATE=$STATE_CRITICAL
echo "CRITICAL: Diagnosis results are more than $LAST_DIAGNOSIS_CRIT hours old."
elif [[ $LAST_DIAGNOSIS -gt $LAST_DIAGNOSIS_WARN ]]; then
CHECK_STATE=$STATE_WARNING
echo "WARNING: Diagnosis results are more than $LAST_DIAGNOSIS_WARN hours old."
else
CHECK_STATE=$STATE_OK
echo "OK: Diagnosis results are less than $LAST_DIAGNOSIS_WARN hours old."
fi
;;
esac
echo -e "|'OK'=$OKS 'WARNING'=$WARNINGS 'ERROR'=$ERRORS 'Last_Diagnosis'=${LAST_DIAGNOSIS}h" # The perfdata
rm $SHOW rm $SHOW