#!/bin/bash

# Description: Check the Number of active RabbitMQ Connections
# Date: 25.04.2019
# Issue: OS-596
# Author: Marc Vorwerk <marc.vorwerk@noris.de>

# Exit Status Codes
OK=0
WARNING=1
CRITICAL=2
UNKNOWN=3


# Check if curl is installed
if ! command -v curl >/dev/null
then
    echo "You don't have curl installed - apt-get install curl"
    exit $UNKNOWN
fi

# Check if jq is installed
if ! command -v jq >/dev/null
then
    echo "You don't have jq installed - apt-get install jq"
    exit $UNKNOWN
fi


# Options
while getopts H:P:U:A:O: PARAM
do
    case "$PARAM" in
        H)
            HOST=$OPTARG
            ;;
        P)
            PASSWORD=$OPTARG
            ;;
        U)
            USER=$OPTARG
            ;;
        A)
            THRESHOLD_ALL=$OPTARG
            ;;
        O)
            THRESHOLD_OCTAVIA=$OPTARG
            ;;
    esac
done

if [ -z $HOST ]
then
     echo -e "You must specify a Host with -H <HOST>."
     exit $CRITICAL
fi
if [ -z $PASSWORD ]
then
     echo -e "You must specify a Password with -P <PASSWORD>."
     exit $CRITICAL
fi
if [ -z $USER ]
then
     echo -e "You must specify a User with -U <USER>."
     exit $CRITICAL
fi


# FallBack Config Options
if [ -z $THRESHOLD_ALL ]
then
     THRESHOLD_ALL=2000
fi
if [ -z $THRESHOLD_OCTAVIA ]
then
     THRESHOLD_OCTAVIA=150
fi

# Get Credentials
AUTH=$(echo -n $USER:$PASSWORD | base64 )


# Get number of connections
NUMBER_CONNECTIONS_ALL=$(curl -s -k -H "Authorization: Basic $AUTH" -G "http://$HOST:15672/api/overview" | jq '.object_totals.channels' | egrep -o '[0-9]+')
NUMBER_CONNECTIONS_OCTAVIA=$(curl -s -k -H "Authorization: Basic $AUTH" -G "http://$HOST:15672/api/connections?columns=user" | jq '.' | grep "octavia" -c )

# Doing
if [ -z "$NUMBER_CONNECTIONS_ALL" ] || [ "$NUMBER_CONNECTIONS_ALL" -gt "$THRESHOLD_ALL" ]
then
    STATUS="$CRITICAL"
fi

if [ -z "$NUMBER_CONNECTIONS_OCTAVIA" ] || [ "$NUMBER_CONNECTIONS_OCTAVIA" -gt "$THRESHOLD_OCTAVIA" ]
then
    STATUS="$CRITICAL"
fi


# Output
echo "Total active RabbitMQ Connections: ${NUMBER_CONNECTIONS_ALL}. Allowed are $THRESHOLD_ALL active Connections."
echo "Total active RabbitMQ Connections from User octavia: ${NUMBER_CONNECTIONS_OCTAVIA}. Allowed are $THRESHOLD_OCTAVIA active Connections."


exit $STATUS

