#!/usr/bin/env bash

VERSION="0.2 (beta)"

IFS=$'\n\t'
GLOBIGNORE="*"

BIN_NC="$(command -v nc)"
BIN_SED="$(command -v sed)"

pval="6556"

EXITCODE=3

while getopts "Vha:H:p:" opt; do
  case $opt in
    V) printf 'check_mrpe v%s\n' "$VERSION"
       exit 0
       ;;
    h) hflag=1
       ;;
    a) aflag=1
       aval="$OPTARG"
       ;;
    H) Hflag=1
       Hval="$OPTARG"
       ;;
    p) pval="$OPTARG"
       ;;
    \?) hflag=1
        EXITCODE=0
        ;;
  esac
done

if ! [ "$Hflag" ] && ! [ "$hflag" ]; then
  printf "Error: Host not specified\n"
  hflag=1
  EXITCODE=1
fi

if [ "$hflag" ]; then
  printf "check_mrpe:\n"
  printf "Usage:\n"
  printf " check_mrpe [-H host] [-p port] [-a app]\n"
  exit $EXITCODE
fi

if [ "$aflag" ];
then
  SED_CMD="s/\((.*) $aval [0-9] \)\(.*\)/\2/p"
  SED_CMD_STATUS="s/(.*) $aval \([0-9]\) \(.*\)/\1/p"
else
  SED_CMD="s/(.*) \(.*\) [0-9] \(.*\)/\1 \2/p"
fi

for i in $($BIN_NC -w 1 "$Hval" "$pval" 2>&1 | $BIN_SED '/^<<<mrpe>>>/,/^<<</{//!b};d') ; do
  echo "$i" | $BIN_SED -n "$SED_CMD"
  if [ "$aflag" ];
  then
    STATUSCODE=$(echo "$i" | $BIN_SED -n "$SED_CMD_STATUS")
    if [ "$STATUSCODE" ];
    then
      case $STATUSCODE in
        0)
          EXITCODE=0
          ;;
        1)
          EXITCODE=1
          ;;
        2)
          EXITCODE=2
          ;;
        *)
          EXITCODE=3
          ;;
      esac
    fi
  fi
done

exit $EXITCODE