#!/usr/bin/bash
set -euo pipefail
IFS=$'\n\t'

API_AUTH_USER="admin"
API_AUTH_PASS=""
API_URL=""
API_STATS="jsonstat?command=stats"
TMP_FILE=$(/usr/bin/mktemp)

#/ Description: BASH script to get PowerDNS dnsdist stats
#/ Examples: ./powerdns-dnsdist
#/ Options:
#/   --help: Display this help message
#/   --debug: Brief check of system env and script vars

usage() {
	grep '^#/' "$0" | cut -c4- ;
	exit 0 ;
}

debug() {
	if [ -z "$API_AUTH_USER" ]; then
		echo '[error] var API_AUTH_USER is not set'
	else
		echo '[ok] var API_AUTH_USER is set'
	fi

	if [ -z "$API_AUTH_PASS" ]; then
		echo '[error] var API_AUTH_PASS is not set'
	else
		echo '[ok] var API_AUTH_PASS is set'
	fi

	if [ -z "$API_URL" ]; then
		echo '[error] var API_URL is not set'
	else
		echo '[ok] var API_URL is set'
	fi

	if [ -z "$API_STATS" ]; then
		echo '[error] var API_STATS is not set'
	else
		echo '[ok] var API_STATS is set'
	fi

	if ! [ -x "$(command -v curl)" ]; then
		echo '[error] bin curl not available, please install it'
	else
		echo '[ok] bin curl'
	fi

	if ! [ -x "$(command -v jq)" ]; then
		echo '[error] bin jq not available, please install it'
	else
		echo '[ok] bin jq'
	fi

	if ! [ -x "$(command -v cat)" ]; then
		echo '[error] bin cat not available, please install it'
	else
		echo '[ok] bin cat'
	fi
}

exportdata() {
        # get current data
        curl -s -u$API_AUTH_USER:"$API_AUTH_PASS" "$API_URL""$API_STATS" | jq '.' > "$TMP_FILE"

	# generate export values
	JSON_VALUES=$(cat "$TMP_FILE")

	STAT_CACHE_HIT=$(echo "$JSON_VALUES" | jq '."cache-hits"')
	echo "$STAT_CACHE_HIT"

	STAT_CACHE_MISS=$(echo "$JSON_VALUES" | jq '."cache-misses"')
	echo "$STAT_CACHE_MISS"

	STAT_DOWNSTREAM_ERR=$(echo "$JSON_VALUES" | jq '."downstream-send-errors"')
	echo "$STAT_DOWNSTREAM_ERR"

	STAT_DOWNSTREAM_TIMEOUT=$(echo "$JSON_VALUES" | jq '."downstream-timeouts"')
	echo "$STAT_DOWNSTREAM_TIMEOUT"

	STAT_DYNAMIC_BLOCK_SIZE=$(echo "$JSON_VALUES" | jq '."dyn-block-nmg-size"')
	echo "$STAT_DYNAMIC_BLOCK_SIZE"

	STAT_DYNAMIC_BLOCK=$(echo "$JSON_VALUES" | jq '."dyn-blocked"')
	echo "$STAT_DYNAMIC_BLOCK"

	STAT_QUERIES_COUNT=$(echo "$JSON_VALUES" | jq '.queries')
	echo "$STAT_QUERIES_COUNT"

	STAT_QUERIES_RECURSIVE=$(echo "$JSON_VALUES" | jq '.rdqueries')
	echo "$STAT_QUERIES_RECURSIVE"

	STAT_QUERIES_EMPTY=$(echo "$JSON_VALUES" | jq '."empty-queries"')
	echo "$STAT_QUERIES_EMPTY"

	STAT_QUERIES_DROP_NO_POLICY=$(echo "$JSON_VALUES" | jq '."no-policy"')
	echo "$STAT_QUERIES_DROP_NO_POLICY"

	STAT_QUERIES_DROP_NC=$(echo "$JSON_VALUES" | jq '."noncompliant-queries"')
	echo "$STAT_QUERIES_DROP_NC"

	STAT_QUERIES_DROP_NC_ANSWER=$(echo "$JSON_VALUES" | jq '."noncompliant-responses"')
	echo "$STAT_QUERIES_DROP_NC_ANSWER"

	STAT_QUERIES_SELF_ANSWER=$(echo "$JSON_VALUES" | jq '."self-answered"')
	echo "$STAT_QUERIES_SELF_ANSWER"

	STAT_QUERIES_SERVFAIL=$(echo "$JSON_VALUES" | jq '."servfail-responses"')
	echo "$STAT_QUERIES_SERVFAIL"

	STAT_QUERIES_FAILURE=$(echo "$JSON_VALUES" | jq '."trunc-failures"')
	echo "$STAT_QUERIES_FAILURE"

        STAT_QUERIES_ACL_DROPS=$(echo "$JSON_VALUES" | jq '."acl-drops"')
	echo "$STAT_QUERIES_ACL_DROPS"

	STAT_RULE_DROP=$(echo "$JSON_VALUES" | jq '."rule-drop"')
	echo "$STAT_RULE_DROP"

	STAT_RULE_NXDOMAIN=$(echo "$JSON_VALUES" | jq '."rule-nxdomain"')
	echo "$STAT_RULE_NXDOMAIN"

	STAT_RULE_REFUSED=$(echo "$JSON_VALUES" | jq '."rule-refused"')
	echo "$STAT_RULE_REFUSED"

	STAT_LATENCY_AVG_100=$(echo "$JSON_VALUES" | jq '."latency-avg100"')
	echo "$STAT_LATENCY_AVG_100"

	STAT_LATENCY_AVG_1000=$(echo "$JSON_VALUES" | jq '."latency-avg1000"')
	echo "$STAT_LATENCY_AVG_1000"

	STAT_LATENCY_AVG_10000=$(echo "$JSON_VALUES" | jq '."latency-avg10000"')
	echo "$STAT_LATENCY_AVG_10000"

	STAT_LATENCY_AVG_1000000=$(echo "$JSON_VALUES" | jq '."latency-avg1000000"')
	echo "$STAT_LATENCY_AVG_1000000"

	STAT_LATENCY_SLOW=$(echo "$JSON_VALUES" | jq '."latency-slow"')
	echo "$STAT_LATENCY_SLOW"

	STAT_LATENCY_0_1=$(echo "$JSON_VALUES" | jq '."latency0-1"')
	echo "$STAT_LATENCY_0_1"

	STAT_LATENCY_1_10=$(echo "$JSON_VALUES" | jq '."latency1-10"')
	echo "$STAT_LATENCY_1_10"

	STAT_LATENCY_10_50=$(echo "$JSON_VALUES" | jq '."latency10-50"')
	echo "$STAT_LATENCY_10_50"

	STAT_LATENCY_50_100=$(echo "$JSON_VALUES" | jq '."latency50-100"')
	echo "$STAT_LATENCY_50_100"

	STAT_LATENCY_100_1000=$(echo "$JSON_VALUES" | jq '."latency100-1000"')
	echo "$STAT_LATENCY_100_1000"
}

if [ -z "$*" ]; then
        exportdata
fi
expr "$*" : ".*--help" > /dev/null && usage
expr "$*" : ".*--debug" > /dev/null && debug
