0
0
Fork 0
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 ()

This commit is contained in:
Chris Akritidis 2019-06-04 11:51:42 +02:00 committed by GitHub
parent 11f0f553a0
commit fd976d40e2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 125 deletions

View file

@ -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`).
[![analytics](https://www.google-analytics.com/collect?v=1&aip=1&t=pageview&_s=1&ds=github&dr=https%3A%2F%2Fgithub.com%2Fnetdata%2Fnetdata&dl=https%3A%2F%2Fmy-netdata.io%2Fgithub%2Ftests%2Fhealth_mgmtapi%2FREADME&_u=MAC~&cid=5792dfd7-8dc4-476b-af31-da2fdb9f93d2&tid=UA-64295674-3)]()

View file

@ -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"

View file

@ -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