2023-06-07 14:31:09 -06:00
|
|
|
#!/usr/bin/env bash
|
2023-06-07 14:28:15 -06:00
|
|
|
|
2023-06-07 17:40:41 -06:00
|
|
|
# Default values
|
|
|
|
SERVER=""
|
|
|
|
WARNING_LEVEL=""
|
|
|
|
CRITICAL_LEVEL=""
|
|
|
|
RSA_PUBLIC_KEY=""
|
|
|
|
USERNAME=""
|
|
|
|
PASSWORD=""
|
2023-06-07 14:28:15 -06:00
|
|
|
|
2023-06-07 17:40:41 -06:00
|
|
|
# Parse named arguments
|
2023-06-07 14:28:15 -06:00
|
|
|
while [[ $# -gt 0 ]]; do
|
|
|
|
key="$1"
|
|
|
|
|
|
|
|
case $key in
|
2023-06-07 18:01:20 -06:00
|
|
|
--server)
|
|
|
|
SERVER="$2"
|
|
|
|
shift
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
--warning)
|
|
|
|
WARNING_LEVEL="$2"
|
|
|
|
shift
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
--critical)
|
|
|
|
CRITICAL_LEVEL="$2"
|
|
|
|
shift
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
--rsa-public-key)
|
|
|
|
RSA_PUBLIC_KEY="$2"
|
|
|
|
shift
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
--username)
|
|
|
|
USERNAME="$2"
|
|
|
|
shift
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
--password)
|
|
|
|
PASSWORD="$2"
|
|
|
|
shift
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
shift
|
|
|
|
;;
|
2023-06-07 14:28:15 -06:00
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
2023-06-07 17:40:41 -06:00
|
|
|
# Check if required arguments are provided
|
|
|
|
if [[ -z "$SERVER" ]] || [[ -z "$WARNING_LEVEL" ]] || [[ -z "$CRITICAL_LEVEL" ]]; then
|
|
|
|
echo "Usage: $0 --server SERVER --warning WARNING_LEVEL --critical CRITICAL_LEVEL [--rsa-public-key RSA_PUBLIC_KEY] [--username USERNAME] [--password PASSWORD]"
|
|
|
|
exit -1
|
2023-06-07 14:28:15 -06:00
|
|
|
fi
|
|
|
|
|
2023-06-07 17:40:41 -06:00
|
|
|
# Set IPERF3_PASSWORD environment variable
|
2023-06-07 14:28:15 -06:00
|
|
|
export IPERF3_PASSWORD="$PASSWORD"
|
|
|
|
|
2023-06-07 17:40:41 -06:00
|
|
|
# Run iperf3 command with optional arguments
|
|
|
|
if [[ -n "$RSA_PUBLIC_KEY" ]] && [[ -n "$USERNAME" ]]; then
|
|
|
|
OUTPUT=$(iperf3 -c "$SERVER" -i 1 -t 10 -f m --rsa-public-key-path "$RSA_PUBLIC_KEY" --username "$USERNAME" 2>&1)
|
|
|
|
else
|
|
|
|
OUTPUT=$(iperf3 -c "$SERVER" -i 1 -t 10 -f m 2>&1)
|
2023-06-07 14:28:15 -06:00
|
|
|
fi
|
|
|
|
|
2023-06-07 17:40:41 -06:00
|
|
|
# Check if iperf3 command failed
|
|
|
|
if [[ $? -ne 0 ]]; then
|
|
|
|
echo "UNKNOWN - iperf3 command failed: $OUTPUT"
|
|
|
|
exit -1
|
2023-06-07 14:28:15 -06:00
|
|
|
fi
|
|
|
|
|
2023-06-07 17:40:41 -06:00
|
|
|
# Extract the receiver bitrate
|
|
|
|
RECEIVER_BITRATE=$(echo "$OUTPUT" | grep -Eo '[0-9]+(\.[0-9]+)? Mbits/sec' | tail -1 | awk '{print $1}')
|
2023-06-07 14:28:15 -06:00
|
|
|
|
2023-06-07 18:01:20 -06:00
|
|
|
# Prepare performance data
|
|
|
|
PERFDATA="receiver_bitrate=${RECEIVER_BITRATE}mb;${WARNING_LEVEL};${CRITICAL_LEVEL};0;"
|
|
|
|
|
2023-06-07 17:40:41 -06:00
|
|
|
# Check the receiver bitrate against warning and critical levels
|
2023-06-07 18:01:20 -06:00
|
|
|
if (($(echo "$RECEIVER_BITRATE < $CRITICAL_LEVEL" | bc -l))); then
|
|
|
|
echo "CRITICAL - Receiver Bitrate: $RECEIVER_BITRATE Mbits/sec | $PERFDATA"
|
2023-06-07 14:28:15 -06:00
|
|
|
exit 2
|
2023-06-07 18:01:20 -06:00
|
|
|
elif (($(echo "$RECEIVER_BITRATE < $WARNING_LEVEL" | bc -l))); then
|
|
|
|
echo "WARNING - Receiver Bitrate: $RECEIVER_BITRATE Mbits/sec | $PERFDATA"
|
2023-06-07 14:28:15 -06:00
|
|
|
exit 1
|
|
|
|
else
|
2023-06-07 18:01:20 -06:00
|
|
|
echo "OK - Receiver Bitrate: $RECEIVER_BITRATE Mbits/sec | $PERFDATA"
|
2023-06-07 14:28:15 -06:00
|
|
|
exit 0
|
|
|
|
fi
|