#!/bin/bash

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

STATUS=$STATE_OK
USER=admin
URL="http://localhost:81"
WARN=80
CRIT=90

usage() {
  echo "Usage: $0 [OPTION]..."
  echo "Allowed options:"
  echo "-u <URL>, default is 'http://localhost:81'"
  echo "-U <User>, default is admin"
  echo "-P <Password>, mandatory"
  echo "-w <Warn> Percent of connection usage, default 80"
  echo "-c <Crit> Percent of connection usage, default 90"
}


while [[ $# > 0 ]]; do
  case "$1" in
    "-u")
      URL="$2"
      shift; shift
      ;;
    "-U")
      USER="$2"
      shift; shift
      ;;
    "-P")
      PASSWD="$2"
      shift; shift
      ;;
    "-w")
      WARN="$2"
      shift; shift
      ;;
    "-c")
      CRIT="$2"
      shift; shift
      ;;
    *)
      echo "invalid option $1" >&2;
      usage
      exit 1
  esac
done

if [ -z "$URL" -o -z "$USER" -o -z "$PASSWD" ]; then
  echo "Missing URL, User or Password!" >&2
  echo "URL=$URL, USER=$USER, PW=$PASSWD" >&2
  exit 1
fi

RESULT="$(curl "$URL" -s -u "$USER:$PASSWD" | grep 'current conns\|maxconn')"

[[ "$RESULT" =~ maxconn[^0-9]*([0-9]+) ]] && MAXCONN=${BASH_REMATCH[1]}
[[ "$RESULT" =~ current\ conns[^0-9]*([0-9]+) ]] && CURCONN=${BASH_REMATCH[1]}

MESSAGE="OK: $CURCONN Connections out of $MAXCONN"

WARNCONN=$(( WARN * MAXCONN / 100 ))
CRITCONN=$(( CRIT * MAXCONN / 100 ))

if [[ CURCONN -gt CRITCONN ]]; then
  MESSAGE="Critical: Current Connections $CURCONN exceeds $CRIT %"
  STATUS=$STATE_CRITICAL
elif [[ CURCONN -gt WARNCONN ]]; then
  MESSAGE="Warning: Current Connections $CURCONN exceeds $WARN %"
  STATUS=$STATE_WARNING
fi

echo "$MESSAGE|current_cons=$CURCONN;$WARNCONN;$CRITCONN;;$MAXCONN"
exit $STATUS
