123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- #!/usr/bin/env bash
- # shellcheck disable=SC1117,SC2034,SC2059,SC2086,SC2181
- NETDATA_VARLIB_DIR="@varlibdir_POST@"
- check () {
- sec=1
- echo -e " ${GRAY}Check: '${1}' in $sec sec"
- sleep $sec
- number=$RANDOM
- resp=$(curl -s "http://$URL/api/v1/alarms?all&$number")
- r=$(echo "${resp}" | \
- python3 -c "import sys, json; d=json.load(sys.stdin); \
- print(\
- d['alarms']['system.cpu.10min_cpu_usage']['disabled'], \
- d['alarms']['system.cpu.10min_cpu_usage']['silenced'] , \
- d['alarms']['system.cpu.10min_cpu_iowait']['disabled'], \
- d['alarms']['system.cpu.10min_cpu_iowait']['silenced'], \
- d['alarms']['system.load.load_trigger']['disabled'], \
- d['alarms']['system.load.load_trigger']['silenced'], \
- );" 2>&1)
- if [ $? -ne 0 ] ; then
- echo -e " ${RED}ERROR: Unexpected response stored in /tmp/resp-$number.json"
- echo "$resp" > /tmp/resp-$number.json
- err=$((err+1))
- iter=0
- elif [ "${r}" != "${2}" ] ; then
- echo -e " ${GRAY}WARNING: 'Got ${r}'. Expected '${2}'"
- iter=$((iter+1))
- if [ $iter -lt 10 ] ; then
- echo -e " ${GRAY}Repeating test "
- check "$1" "$2"
- else
- echo -e " ${RED}ERROR: 'Got ${r}'. Expected '${2}'"
- iter=0
- err=$((err+1))
- fi
- else
- echo -e " ${GREEN}Success"
- iter=0
- fi
- }
- cmd () {
- echo -e "${WHITE}Cmd '${1}'"
- echo -en " ${GRAY}Expecting '${2}' : "
- RESPONSE=$(curl -s "http://$URL/api/v1/manage/health?${1}" -H "X-Auth-Token: $TOKEN" 2>&1)
- if [ "${RESPONSE}" != "${2}" ] ; then
- echo -e "${RED}ERROR: Response '${RESPONSE}'"
- err=$((err+1))
- else
- echo -e "${GREEN}Success"
- fi
- }
- check_list() {
- RESPONSE=$(curl -s "http://$URL/api/v1/manage/health?cmd=LIST" -H "X-Auth-Token: $TOKEN" 2>&1)
- NAME="$1-list.json"
- echo $RESPONSE > $NAME
- diff $NAME expected_list/$NAME 1>/dev/null 2>&1
- if [ $? -eq 0 ]; then
- echo -e "${GREEN}Success: The list command got the correct answer for $NAME!"
- else
- echo -e "${RED}ERROR: the files $NAME and expected_list/$NAME does not match."
- exit 1
- fi
- }
- WHITE='\033[0;37m'
- RED='\033[0;31m'
- GREEN='\033[0;32m'
- GRAY='\033[0;37m'
- SETUP=0
- RESTART=0
- CLEANUP=0
- TEST=0
- URL="localhost:19999"
- err=0
- HEALTH_CMDAPI_MSG_AUTHERROR="Auth Error"
- HEALTH_CMDAPI_MSG_SILENCEALL="All alarm notifications are silenced"
- HEALTH_CMDAPI_MSG_DISABLEALL="All health checks are disabled"
- HEALTH_CMDAPI_MSG_RESET="All health checks and notifications are enabled"
- HEALTH_CMDAPI_MSG_DISABLE="Health checks disabled for alarms matching the selectors"
- HEALTH_CMDAPI_MSG_SILENCE="Alarm notifications silenced for alarms matching the selectors"
- HEALTH_CMDAPI_MSG_ADDED="Alarm selector added"
- HEALTH_CMDAPI_MSG_INVALID_KEY="Invalid key. Ignoring it."
- HEALTH_CMDAPI_MSG_STYPEWARNING="WARNING: Added alarm selector to silence/disable alarms without a SILENCE or DISABLE command."
- HEALTH_CMDAPI_MSG_NOSELECTORWARNING="WARNING: SILENCE or DISABLE command is ineffective without defining any alarm selectors."
- if [ -f "${NETDATA_VARLIB_DIR}/netdata.api.key" ] ;then
- read -r CORRECT_TOKEN < "${NETDATA_VARLIB_DIR}/netdata.api.key"
- else
- echo "${NETDATA_VARLIB_DIR}/netdata.api.key not found"
- exit 1
- fi
- # Set correct token
- TOKEN="${CORRECT_TOKEN}"
- # Test default state
- cmd "cmd=RESET" "$HEALTH_CMDAPI_MSG_RESET"
- check "Default State" "False False False False False False"
- check_list "RESET"
- # Test auth failure
- TOKEN="Wrong token"
- cmd "cmd=DISABLE ALL" "$HEALTH_CMDAPI_MSG_AUTHERROR"
- check "Default State" "False False False False False False"
- check_list "DISABLE_ALL_ERROR"
- # Set correct token
- TOKEN="${CORRECT_TOKEN}"
- # Test disable
- cmd "cmd=DISABLE ALL" "$HEALTH_CMDAPI_MSG_DISABLEALL"
- check "All disabled" "True False True False True False"
- check_list "DISABLE_ALL"
- # Reset
- cmd "cmd=RESET" "$HEALTH_CMDAPI_MSG_RESET"
- check "Default State" "False False False False False False"
- check_list "RESET"
- # Test silence
- cmd "cmd=SILENCE ALL" "$HEALTH_CMDAPI_MSG_SILENCEALL"
- check "All silenced" "False True False True False True"
- check_list "SILENCE_ALL"
- # Reset
- cmd "cmd=RESET" "$HEALTH_CMDAPI_MSG_RESET"
- check "Default State" "False False False False False False"
- check_list "RESET"
- # Add silencer by name
- printf -v resp "$HEALTH_CMDAPI_MSG_SILENCE\n$HEALTH_CMDAPI_MSG_ADDED"
- cmd "cmd=SILENCE&alarm=*10min_cpu_usage *load_trigger" "${resp}"
- check "Silence notifications for alarm1 and load_trigger" "False True False False False True"
- check_list "SILENCE_ALARM_CPU_USAGE_LOAD_TRIGGER"
- # Convert to disable health checks
- cmd "cmd=DISABLE" "$HEALTH_CMDAPI_MSG_DISABLE"
- check "Disable notifications for alarm1 and load_trigger" "True False False False True False"
- check_list "DISABLE"
- # Convert back to silence notifications
- cmd "cmd=SILENCE" "$HEALTH_CMDAPI_MSG_SILENCE"
- check "Silence notifications for alarm1 and load_trigger" "False True False False False True"
- check_list "SILENCE"
- # Add second silencer by name
- cmd "alarm=*10min_cpu_iowait" "$HEALTH_CMDAPI_MSG_ADDED"
- check "Silence notifications for alarm1,alarm2 and load_trigger" "False True False True False True"
- check_list "ALARM_CPU_IOWAIT"
- # Reset
- cmd "cmd=RESET" "$HEALTH_CMDAPI_MSG_RESET"
- check_list "RESET"
- # Add silencer by chart
- printf -v resp "$HEALTH_CMDAPI_MSG_DISABLE\n$HEALTH_CMDAPI_MSG_ADDED"
- cmd "cmd=DISABLE&chart=system.load" "${resp}"
- check "Default State" "False False False False True False"
- check_list "DISABLE_SYSTEM_LOAD"
- # Add silencer by context
- cmd "context=system.cpu" "$HEALTH_CMDAPI_MSG_ADDED"
- check "Default State" "True False True False True False"
- check_list "CONTEXT_SYSTEM_CPU"
- # Reset
- cmd "cmd=RESET" "$HEALTH_CMDAPI_MSG_RESET"
- check_list "RESET"
- # Add second condition to a selector (AND)
- printf -v resp "$HEALTH_CMDAPI_MSG_SILENCE\n$HEALTH_CMDAPI_MSG_ADDED"
- cmd "cmd=SILENCE&alarm=*10min_cpu_usage *load_trigger&chart=system.load" "${resp}"
- check "Silence notifications load_trigger" "False False False False False True"
- check_list "SILENCE_ALARM_CPU_USAGE"
- # Add second selector with two conditions
- cmd "alarm=*10min_cpu_usage *load_trigger&context=system.cpu" "$HEALTH_CMDAPI_MSG_ADDED"
- check "Silence notifications load_trigger" "False True False False False True"
- check_list "ALARM_CPU_USAGE"
- # Reset
- cmd "cmd=RESET" "$HEALTH_CMDAPI_MSG_RESET"
- check_list "RESET"
- # Add silence command
- cmd "cmd=SILENCE" "$HEALTH_CMDAPI_MSG_SILENCE"
- check "Silence family load" "False False False False False True"
- check_list "SILENCE_2"
- # Reset
- cmd "cmd=RESET" "$HEALTH_CMDAPI_MSG_RESET"
- check_list "RESET"
- # Add command without silencers
- printf -v resp "$HEALTH_CMDAPI_MSG_SILENCE\n$HEALTH_CMDAPI_MSG_NOSELECTORWARNING"
- cmd "cmd=SILENCE" "${resp}"
- check "Command with no selector" "False False False False False False"
- check_list "SILENCE_3"
- # Add hosts silencer
- cmd "hosts=*" "$HEALTH_CMDAPI_MSG_ADDED"
- check "Silence all hosts" "False True False True False True"
- check_list "HOSTS"
- # Reset
- cmd "cmd=RESET" "$HEALTH_CMDAPI_MSG_RESET"
- check_list "RESET"
- if [ $err -gt 0 ] ; then
- echo "$err error(s) found"
- exit 1
- fi
|