Skip to content
Snippets Groups Projects
check_opencpu 3.65 KiB
#!/bin/bash
# ======================================================================
#
# NAGIOS CLIENT CHECK :: test if opencpu is available
#
# REQUIREMENTS
# - wget
#
# It returns
# - OK if http request was successful
# - CRITICAL if http request fails
# - unknown if wget is not available
#
# ----------------------------------------------------------------------
#
# ah=axel.hahn@iml.unibe.ch
# ds=daniel.schueler@iml.unibe.ch
#
# 2019-05-10  v1.0  ah,ds
# 2019-05-22  v1.1  show built date
# 2020-03-05  v1.2  <axel.hahn@iml.unibe.ch> switch to ph.* helper functions
# 2022-04-01  v1.3  <axel.hahn@iml.unibe.ch>  use wget default params; shell fixes
# 2023-08-23  v1.4  <axel.hahn@unibe.ch>      add help; add param -p; fix critical status
# ======================================================================


. $(dirname $0)/inc_pluginfunctions
self_APPVERSION=1.4

tmpOk=/tmp/check_opencpu-ok
tmpErr=/tmp/check_opencpu-error
ocpuUrl=http://localhost/ocpu

packagesDefault="eosceGLM eosceLinReg eosceReliability eosceReporter msrdAnalytics"

paramsWget="-T 5 -t 1 --no-check-certificate"
#            ^    ^
#            |    tries = 1
#            timeout in seconds

# ----------------------------------------------------------------------
# FUNCTIONS
# ----------------------------------------------------------------------

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

Test if opencpu is available.
It returns OK if
- opencpu is running on $ocpuUrl
- all packages are installed: 
  $packagesDefault

SYNTAX:
$_self [-h] [-p PKG]

OPTIONS:

    -h or --help   show this help and exit.

PARAMETERS:

    -p PKG(s)      define package to test; for multiple packages quote 
                   it and delimit them with space.

EXAMPLES:

    $_self -p "myPackage1 myPackage2 anotherPackage"
                   Check given opencpu packages

    $_self -p ""
                   Check Opencpu only (without packages)

EOF
}

# check if a givem packe is installed
# param  string  name of the package
function checkOpenCpuPackage(){
  package=$1
  pkgUrl=$ocpuUrl/library/$package/info
  tmpfile=/tmp/check_opencpu-$package

  wget $paramsWget -O $tmpfile $pkgUrl 2>/dev/null
  if [ $? -ne 0 ]; then
    echo "ERROR: package is NOT available [$package]" >>$tmpErr
  else
    echo "OK: package is available [$mypackage] .. Build: $(cat $tmpfile | grep "^Built" | cut -c 21-)" >>$tmpOk
  fi
  rm -f $tmpfile 2>/dev/null
}

# ----------------------------------------------------------------------
# MAIN
# ----------------------------------------------------------------------

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

packages=$(   ph.getValueWithParam "$packagesDefault" "p" "$@" | sort )

rm -f $tmpOk 2>/dev/null

echo -n "OpenCpu: "


# ----- check if WGET exists
ph.require wget

# ----- check if openCpu is running
wget $paramsWget -O /dev/null $ocpuUrl 2>/dev/null
if [ $? -ne 0 ]; then
  echo "ERROR: unable to connect to openCpu with $ocpuUrl"
  echo
  echo "I repeat the http request to show some more debug infos:"
  wget $paramsWget -O /dev/null -S $ocpuUrl
  ph.setStatus "critical"
  ph.exit
fi

echo "OK: openCpu is running and reachable with http" >>$tmpOk

# ----- check custom modules
for mypackage in $packages
do
  checkOpenCpuPackage $mypackage
done

# ----- result
ph.setStatus "ok"
if [ -f $tmpErr ]; then
  echo "ERROR: openCpu is available but not all packages"
  cat $tmpErr && rm -f $tmpErr
  echo
  ph.setStatus "critical"
else
  echo "OK"
fi
cat $tmpOk 2>/dev/null && rm -f $tmpOk

ph.exit

# ----------------------------------------------------------------------