#!/bin/bash
# ======================================================================
#
# Icinga/ Nagios Check
# COUCHDB
#
# ----------------------------------------------------------------------
#
# REQUIREMENTS:
#   - curl 
#
# SYNTAX:
#   - check_couchdb [-h] [-t FILE] -m MODE
#
# ----------------------------------------------------------------------
# 2023-08-28  v0.1  <axel.hahn@unibe.ch>
# ======================================================================

. $(dirname $0)/inc_pluginfunctions

export self_APPVERSION=0.1

function showHelp(){
    local _self; _self=$(basename $0)
    cat <<EOF
$( ph.showImlHelpHeader )

Show couchdb status.

SYNTAX:
$_self [-h] [-t FILE] -m MODE

OPTIONS:
    -h or --help   show this help.
    -m MODE        test a value; for debugging purposes
    -t FILE        take couchdb auth from Telegraph config
                   add file like /etc/telegraf/telegraf.conf

EXAMPLE:
$_self -m up
    Check if couchdb is up and running

EOF
}

# --- check param -h
case "$1" in
    "--help"|"-h")
        showHelp
        exit 0
        ;;
    *)
esac

sTelegraph=$(ph.getValueWithParam "" "t" "$@")
sMode=$(ph.getValueWithParam '' "m" "$@")

if [ -n "$sTelegraph" ]; then
        if [ ! -r "${sTelegraph}" ]; then
                echo "ERROR: Telegraph config file [${sTelegraph}] cannot be read."
                showHelp
                ph.abort
        fi
        _user=$( grep "basic_username = " "${sTelegraph}" | cut -f 2 -d '"' )
        _pw=$(   grep "basic_password = " "${sTelegraph}" | cut -f 2 -d '"' )
        export COUCH_URL=http://${_user}:${_pw}@localhost:5984
fi

if [ -z "$COUCH_URL" ]; then
    echo "ERROR: I have no couchdb url + autentication yet."
    echo "Maybe you need to add -t /etc/telegraf/telegraf.conf."
    ph.abort
fi

case "${sMode}" in
    "up")
        response=$( curl -s "${COUCH_URL}/_up" )
        _status=$( jq '.status' <<< "${response}" | tr -d '"')
        if ! echo "$_status" | grep "ok" >/dev/null; then
                ph.setStatus critical
        fi
        ph.status "Couchdb status (value in /_up is '$_status')"
        echo "Reponse: "; echo "${response}" | jq
        _status=$( jq '.status' <<< "${response}" | tr -d '"')
        ;;
    *)
        echo "ERRROR: [${sMode}] is an INVALID mode"
        showHelp
        ph.abort

esac

ph.exit