92 lines
2.8 KiB
Bash
Executable File
92 lines
2.8 KiB
Bash
Executable File
# wait until $1 alerts are generates, and at most wait $2 seconds
|
|
# return 0 if wait succeeded, 1 if wait timeout
|
|
function waitAlert() {
|
|
local i=0
|
|
|
|
while [ $i -lt $2 ]; do
|
|
local c=$(wc -l alert.out | awk '{print $1}')
|
|
|
|
if [ $c -ge $1 ]; then
|
|
return 0
|
|
fi
|
|
|
|
let "i=$i+1"
|
|
sleep 1s
|
|
done
|
|
|
|
return 1
|
|
}
|
|
|
|
# prepare environment
|
|
kill -INT `ps aux | grep 'alert -cfg' | grep -v grep | awk '{print $2}'`
|
|
|
|
rm -f alert.db
|
|
rm -f alert.out
|
|
../cmd/alert/alert -cfg ../cmd/alert/alert.cfg > alert.out &
|
|
|
|
../../td/debug/build/bin/tsim -c /etc/taos -f ./prepare.sim
|
|
|
|
# add a rule to alert application
|
|
curl -d '@rule.json' http://localhost:8100/api/update-rule
|
|
|
|
# step 1: add some data but not trigger an alert
|
|
../../td/debug/build/bin/tsim -c /etc/taos -f ./step1.sim
|
|
|
|
# wait 20 seconds, should not get an alert
|
|
waitAlert 1 20
|
|
res=$?
|
|
if [ $res -eq 0 ]; then
|
|
echo 'should not have alerts here'
|
|
exit 1
|
|
fi
|
|
|
|
# step 2: trigger an alert
|
|
../../td/debug/build/bin/tsim -c /etc/taos -f ./step2.sim
|
|
|
|
# wait 30 seconds for the alert
|
|
waitAlert 1 30
|
|
res=$?
|
|
if [ $res -eq 1 ]; then
|
|
echo 'there should be an alert now'
|
|
exit 1
|
|
fi
|
|
|
|
# compare whether the generate alert meet expectation
|
|
diff <(uniq alert.out | sed -n 1p | jq -cS 'del(.startsAt, .endsAt)') <(jq -cSn '{"values":{"avgspeed":10,"id":0},"labels":{"id":"0","ruleName":"test1"},"annotations":{"summary":"speed of car(id = 0) is too high: 10"}}')
|
|
if [ $? -ne 0 ]; then
|
|
echo 'the generated alert does not meet expectation'
|
|
exit 1
|
|
fi
|
|
|
|
# step 3: add more data, trigger another 3 alerts
|
|
../../td/debug/build/bin/tsim -c /etc/taos -f ./step3.sim
|
|
|
|
# wait 30 seconds for the alerts
|
|
waitAlert 4 30
|
|
res=$?
|
|
if [ $res -eq 1 ]; then
|
|
echo 'there should be 4 alerts now'
|
|
exit 1
|
|
fi
|
|
|
|
# compare whether the generate alert meet expectation
|
|
diff <(uniq alert.out | sed -n 2p | jq -cS 'del(.startsAt, .endsAt)') <(jq -cSn '{"annotations":{"summary":"speed of car(id = 0) is too high: 5.714285714285714"},"labels":{"id":"0","ruleName":"test1"},"values":{"avgspeed":5.714285714285714,"id":0}}')
|
|
if [ $? -ne 0 ]; then
|
|
echo 'the generated alert does not meet expectation'
|
|
exit 1
|
|
fi
|
|
|
|
diff <(uniq alert.out | sed -n 3p | jq -cS 'del(.startsAt, .endsAt)') <(jq -cSn '{"annotations":{"summary":"speed of car(id = 1) is too high: 5.5"},"labels":{"id":"1","ruleName":"test1"},"values":{"avgspeed":5.5,"id":1}}')
|
|
if [ $? -ne 0 ]; then
|
|
echo 'the generated alert does not meet expectation'
|
|
exit 1
|
|
fi
|
|
|
|
diff <(uniq alert.out | sed -n 4p | jq -cS 'del(.startsAt, .endsAt)') <(jq -cSn '{"annotations":{"summary":"speed of car(id = 2) is too high: 10"},"labels":{"id":"2","ruleName":"test1"},"values":{"avgspeed":10,"id":2}}')
|
|
if [ $? -ne 0 ]; then
|
|
echo 'the generated alert does not meet expectation'
|
|
exit 1
|
|
fi
|
|
|
|
kill -INT `ps aux | grep 'alert -cfg' | grep -v grep | awk '{print $2}'`
|