diff --git a/check_yunohost.sh b/check_yunohost.sh index 3be6dca..5f5146f 100755 --- a/check_yunohost.sh +++ b/check_yunohost.sh @@ -5,17 +5,31 @@ STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3 +LAST_DIAGNOSIS_CRIT=720 # default value +LAST_DIAGNOSIS_WARN=24 # default value + CHECK_STATE=$STATE_OK - -if [[ "${1}" == "-h" ]]; then +function help () { cat <|all|last_diagnosis] + check_yunohost [-h] -a [|all|last_diagnosis] [-c ] [-w ] + Options: + -h + Print this + -a + last_diagnosis: Hours since last diagnosis was run. + all: Check all categories. + : 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: "Base system" "Internet connectivity" @@ -28,13 +42,8 @@ if [[ "${1}" == "-h" ]]; then "System configurations" "Applications" - Options: - -h, --help - Print this - EOF - exit -fi +} function category () { while IFS= read line; do @@ -49,34 +58,71 @@ function category () { done } - -# $(( ($(date +%s)-$(yunohost diagnosis show --full | grep timestamp | head -n1 | grep -o '[0-9]*'))/3600 )) - - SHOW=$(mktemp /tmp/XXXXXX) -sudo yunohost diagnosis +SHOW=$(mktemp /tmp/XXXXXX) +sudo yunohost diagnosis show --full > $SHOW # 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)") WARNINGS=$(cat $SHOW | category "${1}" | grep -c "^ *status: WARNING") ERRORS=$(cat $SHOW | category "${1}" | grep -c "^ *status: ERROR") -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: /' - echo -e "|'OK'=$OKS 'WARNING'=$WARNINGS 'ERROR'=$ERRORS" -elif [[ $WARNINGS -gt 0 ]]; then - CHECK_STATE=$STATE_WARNING - cat $SHOW | category "${1}" | grep -A1 "^ *status: WARNING" | grep '^ *summary: ' | sed 's/^ *summary: /WARNING: /' - echo -e "|'OK'=$OKS 'WARNING'=$WARNINGS 'ERROR'=$ERRORS" -elif [[ $OKS -eq 0 ]]; then - CHECK_STATE=$STATE_UNKNOWN - echo -e "UNKNOWN\nCould not get results from 'yunohost diagnosis show'" -else - CHECK_STATE=$STATE_OK - echo "All OK" - echo -e "|'OK'=$OKS 'WARNING'=$WARNINGS 'ERROR'=$ERRORS" -fi +CHECK_TYPE='category' + +while [[ $# -gt 0 ]]; do + case "${1}" in + -h) + help + exit + ;; + last_diagnosis) + CHECK_TYPE='last_diagnosis' + ;; + -w) + shift + LAST_DIAGNOSIS_WARN="$1" + ;; + -c) + 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