mirror of
https://github.com/netdata/netdata.git
synced 2025-04-09 23:57:55 +00:00
Simplify health cmdapi tester - no setup/cleanup needed (#6210)
This commit is contained in:
parent
11f0f553a0
commit
fd976d40e2
3 changed files with 34 additions and 125 deletions
tests/health_mgmtapi
|
@ -4,9 +4,8 @@ The directory `tests/health_cmdapi` contains the test script `health-cmdapi-test
|
|||
|
||||
The script can be executed with options to prepare the system for the tests, run them and restore the system to its previous state.
|
||||
|
||||
It depends on the management API being accessible and on the responses to the api/v1/alarms?all requests being functional.
|
||||
|
||||
Run it with `tests/health_mgmtapi/health-cmdapi-test.sh -h` to see the options.
|
||||
It depends on the management API being accessible on localhost:19999 and on the responses to the api/v1/alarms?all requests being functional.
|
||||
It also requires read access to the management API key that is usually under `/var/lib/netdata/netdata.api.key` (`@varlibdir_POST@/netdata.api.key`).
|
||||
|
||||
[]()
|
||||
|
||||
|
|
|
@ -1,50 +1,52 @@
|
|||
#!/usr/bin/env bash
|
||||
# shellcheck disable=SC1117,SC2034,SC2059,SC2086,SC2181
|
||||
|
||||
NETDATA_USER_CONFIG_DIR="@configdir_POST@"
|
||||
NETDATA_STOCK_CONFIG_DIR="@libconfigdir_POST@"
|
||||
NETDATA_VARLIB_DIR="@varlibdir_POST@"
|
||||
|
||||
printhelp () {
|
||||
echo "Usage: health-cmdapi-test.sh [OPTIONS]
|
||||
-s SETUP config files for python example tests
|
||||
-c CLEANUP config files from python example tests
|
||||
-r RESTART netdata after SETUP and CLEANUP, using systemctl restart netdata.
|
||||
-t TEST scenarios execution
|
||||
-u <URL> changes the host:port from localhost:19999 to <URL>
|
||||
"
|
||||
}
|
||||
|
||||
check () {
|
||||
echo -e "${GRAY}Check: '${1}' in 2 sec"
|
||||
sleep 2
|
||||
resp=$(curl -s "http://$URL/api/v1/alarms?all")
|
||||
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']['example.random.example_alarm1']['disabled'], \
|
||||
d['alarms']['example.random.example_alarm1']['silenced'] , \
|
||||
d['alarms']['example.random.example_alarm2']['disabled'], \
|
||||
d['alarms']['example.random.example_alarm2']['silenced'], \
|
||||
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 '$resp'"
|
||||
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 "${RED}ERROR: 'Got ${r}'. Expected '${2}'"
|
||||
err=$((err+1))
|
||||
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"
|
||||
echo -e " ${GREEN}Success"
|
||||
iter=0
|
||||
fi
|
||||
}
|
||||
|
||||
cmd () {
|
||||
echo -e "${WHITE}Cmd '${1}', expecting '${2}'"
|
||||
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}' != '${2}'"
|
||||
echo -e "${RED}ERROR: Response '${RESPONSE}'"
|
||||
err=$((err+1))
|
||||
else
|
||||
echo -e "${GREEN}Success"
|
||||
|
@ -62,63 +64,8 @@ CLEANUP=0
|
|||
TEST=0
|
||||
URL="localhost:19999"
|
||||
|
||||
while getopts :srctu: option
|
||||
do
|
||||
case "$option" in
|
||||
s)
|
||||
SETUP=1
|
||||
;;
|
||||
r)
|
||||
RESTART=1
|
||||
;;
|
||||
c)
|
||||
CLEANUP=1
|
||||
;;
|
||||
t)
|
||||
TEST=1
|
||||
;;
|
||||
u)
|
||||
URL=$OPTARG
|
||||
;;
|
||||
*)
|
||||
printhelp
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ $SETUP -eq 1 ] ; then
|
||||
echo "Preparing netdata configuration for testing"
|
||||
# Prep netdata for tests
|
||||
if [ -f "${NETDATA_USER_CONFIG_DIR}/python.d.conf" ] ; then
|
||||
cp -f "${NETDATA_USER_CONFIG_DIR}/python.d.conf" /tmp/python.d.conf
|
||||
else
|
||||
cp "${NETDATA_STOCK_CONFIG_DIR}/python.d.conf" "${NETDATA_USER_CONFIG_DIR}/"
|
||||
fi
|
||||
sed -i -e "s/example: no/example: yes/g" "${NETDATA_USER_CONFIG_DIR}/python.d.conf"
|
||||
|
||||
mypath=$(cd ${0%/*} && echo $PWD)
|
||||
|
||||
cp -f "${mypath}/python-example.conf" "${NETDATA_USER_CONFIG_DIR}/health.d/"
|
||||
|
||||
# netdata.conf
|
||||
if [ -f "${NETDATA_USER_CONFIG_DIR}/netdata.conf" ] ; then
|
||||
cp -f "${NETDATA_USER_CONFIG_DIR}/netdata.conf" /tmp/netdata.conf
|
||||
fi
|
||||
printf "[health]\nrun at least every seconds = 1\n" > "${NETDATA_USER_CONFIG_DIR}/netdata.conf"
|
||||
|
||||
chmod +r "${NETDATA_USER_CONFIG_DIR}/python.d.conf" "${NETDATA_USER_CONFIG_DIR}/netdata.conf" "${NETDATA_USER_CONFIG_DIR}/health.d/python-example.conf" "${NETDATA_STOCK_CONFIG_DIR}/health.d/load.conf"
|
||||
# Restart netdata
|
||||
if [ $RESTART -eq 1 ] ; then
|
||||
echo "Restarting netdata"
|
||||
systemctl restart netdata
|
||||
fi
|
||||
fi
|
||||
|
||||
err=0
|
||||
|
||||
# Execute tests
|
||||
if [ $TEST -eq 1 ] ; then
|
||||
|
||||
HEALTH_CMDAPI_MSG_AUTHERROR="Auth Error"
|
||||
HEALTH_CMDAPI_MSG_SILENCEALL="All alarm notifications are silenced"
|
||||
|
@ -170,7 +117,7 @@ if [ $TEST -eq 1 ] ; then
|
|||
|
||||
# Add silencer by name
|
||||
printf -v resp "$HEALTH_CMDAPI_MSG_SILENCE\n$HEALTH_CMDAPI_MSG_ADDED"
|
||||
cmd "cmd=SILENCE&alarm=*example_alarm1 *load_trigger" "${resp}"
|
||||
cmd "cmd=SILENCE&alarm=*10min_cpu_usage *load_trigger" "${resp}"
|
||||
check "Silence notifications for alarm1 and load_trigger" "False True False False False True"
|
||||
|
||||
# Convert to disable health checks
|
||||
|
@ -182,7 +129,7 @@ if [ $TEST -eq 1 ] ; then
|
|||
check "Silence notifications for alarm1 and load_trigger" "False True False False False True"
|
||||
|
||||
# Add second silencer by name
|
||||
cmd "alarm=*example_alarm2" "$HEALTH_CMDAPI_MSG_ADDED"
|
||||
cmd "alarm=*10min_cpu_iowait" "$HEALTH_CMDAPI_MSG_ADDED"
|
||||
check "Silence notifications for alarm1,alarm2 and load_trigger" "False True False True False True"
|
||||
|
||||
# Reset
|
||||
|
@ -194,7 +141,7 @@ if [ $TEST -eq 1 ] ; then
|
|||
check "Default State" "False False False False True False"
|
||||
|
||||
# Add silencer by context
|
||||
cmd "context=random" "$HEALTH_CMDAPI_MSG_ADDED"
|
||||
cmd "context=system.cpu" "$HEALTH_CMDAPI_MSG_ADDED"
|
||||
check "Default State" "True False True False True False"
|
||||
|
||||
# Reset
|
||||
|
@ -202,11 +149,11 @@ if [ $TEST -eq 1 ] ; then
|
|||
|
||||
# Add second condition to a selector (AND)
|
||||
printf -v resp "$HEALTH_CMDAPI_MSG_SILENCE\n$HEALTH_CMDAPI_MSG_ADDED"
|
||||
cmd "cmd=SILENCE&alarm=*example_alarm1 *load_trigger&chart=system.load" "${resp}"
|
||||
cmd "cmd=SILENCE&alarm=*10min_cpu_usage *load_trigger&chart=system.load" "${resp}"
|
||||
check "Silence notifications load_trigger" "False False False False False True"
|
||||
|
||||
# Add second selector with two conditions
|
||||
cmd "alarm=*example_alarm1 *load_trigger&context=random" "$HEALTH_CMDAPI_MSG_ADDED"
|
||||
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"
|
||||
|
||||
# Reset
|
||||
|
@ -236,27 +183,6 @@ if [ $TEST -eq 1 ] ; then
|
|||
# Reset
|
||||
cmd "cmd=RESET" "$HEALTH_CMDAPI_MSG_RESET"
|
||||
|
||||
fi
|
||||
|
||||
# Cleanup
|
||||
if [ $CLEANUP -eq 1 ] ; then
|
||||
echo -e "${WHITE}Restoring netdata configuration"
|
||||
for f in "python.d.conf" "netdata.conf" ; do
|
||||
if [ -f "/tmp/$f" ] ; then
|
||||
mv -f "/tmp/$f" "${NETDATA_USER_CONFIG_DIR}/"
|
||||
else
|
||||
rm -f "${NETDATA_USER_CONFIG_DIR}/$f"
|
||||
fi
|
||||
done
|
||||
|
||||
rm -f "${NETDATA_USER_CONFIG_DIR}/health.d/python-example.conf"
|
||||
|
||||
# Restart netdata
|
||||
if [ $RESTART -eq 1 ] ; then
|
||||
echo "Restarting netdata"
|
||||
systemctl restart netdata
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $err -gt 0 ] ; then
|
||||
echo "$err error(s) found"
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
alarm: example_alarm1
|
||||
on: example.random
|
||||
every: 2s
|
||||
warn: $random1 > (($status >= $WARNING) ? (55) : (75))
|
||||
crit: $random1 > (($status == $CRITICAL) ? (75) : (95))
|
||||
info: random
|
||||
to: sysadmin
|
||||
|
||||
alarm: example_alarm2
|
||||
on: example.random
|
||||
every: 2s
|
||||
warn: $random2 > (($status >= $WARNING) ? (55) : (75))
|
||||
crit: $random2 > (($status == $CRITICAL) ? (75) : (95))
|
||||
info: random
|
||||
to: sysadmin
|
||||
|
Loading…
Add table
Reference in a new issue