master
in 220 lines 6.88 KB
Raw
1 #!/usr/bin/env bash
2 # shellcheck disable=SC1117,SC2034,SC2059,SC2086,SC2181
3
4 NETDATA_VARLIB_DIR="@varlibdir_POST@"
5
6 check () {
7 sec=1
8 echo -e " ${GRAY}Check: '${1}' in $sec sec"
9 sleep $sec
10 number=$RANDOM
11 resp=$(curl -s "http://$URL/api/v1/alarms?all&$number")
12 r=$(echo "${resp}" | \
13 python3 -c "import sys, json; d=json.load(sys.stdin); \
14 print(\
15 d['alarms']['system.cpu.10min_cpu_usage']['disabled'], \
16 d['alarms']['system.cpu.10min_cpu_usage']['silenced'] , \
17 d['alarms']['system.cpu.10min_cpu_iowait']['disabled'], \
18 d['alarms']['system.cpu.10min_cpu_iowait']['silenced'], \
19 d['alarms']['system.load.load_trigger']['disabled'], \
20 d['alarms']['system.load.load_trigger']['silenced'], \
21 );" 2>&1)
22 if [ $? -ne 0 ] ; then
23 echo -e " ${RED}ERROR: Unexpected response stored in /tmp/resp-$number.json"
24 echo "$resp" > /tmp/resp-$number.json
25 err=$((err+1))
26 iter=0
27 elif [ "${r}" != "${2}" ] ; then
28 echo -e " ${GRAY}WARNING: 'Got ${r}'. Expected '${2}'"
29 iter=$((iter+1))
30 if [ $iter -lt 10 ] ; then
31 echo -e " ${GRAY}Repeating test "
32 check "$1" "$2"
33 else
34 echo -e " ${RED}ERROR: 'Got ${r}'. Expected '${2}'"
35 iter=0
36 err=$((err+1))
37 fi
38 else
39 echo -e " ${GREEN}Success"
40 iter=0
41 fi
42 }
43
44 cmd () {
45 echo -e "${WHITE}Cmd '${1}'"
46 echo -en " ${GRAY}Expecting '${2}' : "
47 RESPONSE=$(curl -s "http://$URL/api/v1/manage/health?${1}" -H "X-Auth-Token: $TOKEN" 2>&1)
48 if [ "${RESPONSE}" != "${2}" ] ; then
49 echo -e "${RED}ERROR: Response '${RESPONSE}'"
50 err=$((err+1))
51 else
52 echo -e "${GREEN}Success"
53 fi
54 }
55
56 check_list() {
57 RESPONSE=$(curl -s "http://$URL/api/v1/manage/health?cmd=LIST" -H "X-Auth-Token: $TOKEN" 2>&1)
58
59 NAME="$1-list.json"
60 echo $RESPONSE > $NAME
61 diff $NAME expected_list/$NAME 1>/dev/null 2>&1
62 if [ $? -eq 0 ]; then
63 echo -e "${GREEN}Success: The list command got the correct answer for $NAME!"
64 else
65 echo -e "${RED}ERROR: the files $NAME and expected_list/$NAME does not match."
66 exit 1
67 fi
68 }
69
70 WHITE='\033[0;37m'
71 RED='\033[0;31m'
72 GREEN='\033[0;32m'
73 GRAY='\033[0;37m'
74
75 SETUP=0
76 RESTART=0
77 CLEANUP=0
78 TEST=0
79 URL="localhost:19999"
80
81 err=0
82
83
84 HEALTH_CMDAPI_MSG_AUTHERROR="Auth Error"
85 HEALTH_CMDAPI_MSG_SILENCEALL="All alarm notifications are silenced"
86 HEALTH_CMDAPI_MSG_DISABLEALL="All health checks are disabled"
87 HEALTH_CMDAPI_MSG_RESET="All health checks and notifications are enabled"
88 HEALTH_CMDAPI_MSG_DISABLE="Health checks disabled for alarms matching the selectors"
89 HEALTH_CMDAPI_MSG_SILENCE="Alarm notifications silenced for alarms matching the selectors"
90 HEALTH_CMDAPI_MSG_ADDED="Alarm selector added"
91 HEALTH_CMDAPI_MSG_INVALID_KEY="Invalid key. Ignoring it."
92 HEALTH_CMDAPI_MSG_STYPEWARNING="WARNING: Added alarm selector to silence/disable alarms without a SILENCE or DISABLE command."
93 HEALTH_CMDAPI_MSG_NOSELECTORWARNING="WARNING: SILENCE or DISABLE command is ineffective without defining any alarm selectors."
94
95 if [ -f "${NETDATA_VARLIB_DIR}/netdata.api.key" ] ;then
96 read -r CORRECT_TOKEN < "${NETDATA_VARLIB_DIR}/netdata.api.key"
97 else
98 echo "${NETDATA_VARLIB_DIR}/netdata.api.key not found"
99 exit 1
100 fi
101 # Set correct token
102 TOKEN="${CORRECT_TOKEN}"
103
104 # Test default state
105 cmd "cmd=RESET" "$HEALTH_CMDAPI_MSG_RESET"
106 check "Default State" "False False False False False False"
107 check_list "RESET"
108
109 # Test auth failure
110 TOKEN="Wrong token"
111 cmd "cmd=DISABLE ALL" "$HEALTH_CMDAPI_MSG_AUTHERROR"
112 check "Default State" "False False False False False False"
113 check_list "DISABLE_ALL_ERROR"
114
115 # Set correct token
116 TOKEN="${CORRECT_TOKEN}"
117
118 # Test disable
119 cmd "cmd=DISABLE ALL" "$HEALTH_CMDAPI_MSG_DISABLEALL"
120 check "All disabled" "True False True False True False"
121 check_list "DISABLE_ALL"
122
123 # Reset
124 cmd "cmd=RESET" "$HEALTH_CMDAPI_MSG_RESET"
125 check "Default State" "False False False False False False"
126 check_list "RESET"
127
128 # Test silence
129 cmd "cmd=SILENCE ALL" "$HEALTH_CMDAPI_MSG_SILENCEALL"
130 check "All silenced" "False True False True False True"
131 check_list "SILENCE_ALL"
132
133 # Reset
134 cmd "cmd=RESET" "$HEALTH_CMDAPI_MSG_RESET"
135 check "Default State" "False False False False False False"
136 check_list "RESET"
137
138 # Add silencer by name
139 printf -v resp "$HEALTH_CMDAPI_MSG_SILENCE\n$HEALTH_CMDAPI_MSG_ADDED"
140 cmd "cmd=SILENCE&alarm=*10min_cpu_usage *load_trigger" "${resp}"
141 check "Silence notifications for alarm1 and load_trigger" "False True False False False True"
142 check_list "SILENCE_ALARM_CPU_USAGE_LOAD_TRIGGER"
143
144 # Convert to disable health checks
145 cmd "cmd=DISABLE" "$HEALTH_CMDAPI_MSG_DISABLE"
146 check "Disable notifications for alarm1 and load_trigger" "True False False False True False"
147 check_list "DISABLE"
148
149 # Convert back to silence notifications
150 cmd "cmd=SILENCE" "$HEALTH_CMDAPI_MSG_SILENCE"
151 check "Silence notifications for alarm1 and load_trigger" "False True False False False True"
152 check_list "SILENCE"
153
154 # Add second silencer by name
155 cmd "alarm=*10min_cpu_iowait" "$HEALTH_CMDAPI_MSG_ADDED"
156 check "Silence notifications for alarm1,alarm2 and load_trigger" "False True False True False True"
157 check_list "ALARM_CPU_IOWAIT"
158
159 # Reset
160 cmd "cmd=RESET" "$HEALTH_CMDAPI_MSG_RESET"
161 check_list "RESET"
162
163 # Add silencer by chart
164 printf -v resp "$HEALTH_CMDAPI_MSG_DISABLE\n$HEALTH_CMDAPI_MSG_ADDED"
165 cmd "cmd=DISABLE&chart=system.load" "${resp}"
166 check "Default State" "False False False False True False"
167 check_list "DISABLE_SYSTEM_LOAD"
168
169 # Add silencer by context
170 cmd "context=system.cpu" "$HEALTH_CMDAPI_MSG_ADDED"
171 check "Default State" "True False True False True False"
172 check_list "CONTEXT_SYSTEM_CPU"
173
174 # Reset
175 cmd "cmd=RESET" "$HEALTH_CMDAPI_MSG_RESET"
176 check_list "RESET"
177
178 # Add second condition to a selector (AND)
179 printf -v resp "$HEALTH_CMDAPI_MSG_SILENCE\n$HEALTH_CMDAPI_MSG_ADDED"
180 cmd "cmd=SILENCE&alarm=*10min_cpu_usage *load_trigger&chart=system.load" "${resp}"
181 check "Silence notifications load_trigger" "False False False False False True"
182 check_list "SILENCE_ALARM_CPU_USAGE"
183
184 # Add second selector with two conditions
185 cmd "alarm=*10min_cpu_usage *load_trigger&context=system.cpu" "$HEALTH_CMDAPI_MSG_ADDED"
186 check "Silence notifications load_trigger" "False True False False False True"
187 check_list "ALARM_CPU_USAGE"
188
189 # Reset
190 cmd "cmd=RESET" "$HEALTH_CMDAPI_MSG_RESET"
191 check_list "RESET"
192
193 # Add silence command
194 cmd "cmd=SILENCE" "$HEALTH_CMDAPI_MSG_SILENCE"
195 check "Silence family load" "False False False False False True"
196 check_list "SILENCE_2"
197
198 # Reset
199 cmd "cmd=RESET" "$HEALTH_CMDAPI_MSG_RESET"
200 check_list "RESET"
201
202 # Add command without silencers
203 printf -v resp "$HEALTH_CMDAPI_MSG_SILENCE\n$HEALTH_CMDAPI_MSG_NOSELECTORWARNING"
204 cmd "cmd=SILENCE" "${resp}"
205 check "Command with no selector" "False False False False False False"
206 check_list "SILENCE_3"
207
208 # Add hosts silencer
209 cmd "hosts=*" "$HEALTH_CMDAPI_MSG_ADDED"
210 check "Silence all hosts" "False True False True False True"
211 check_list "HOSTS"
212
213 # Reset
214 cmd "cmd=RESET" "$HEALTH_CMDAPI_MSG_RESET"
215 check_list "RESET"
216
217 if [ $err -gt 0 ] ; then
218 echo "$err error(s) found"
219 exit 1
220 fi