Patrick Kelley 8fd444092b initial
2025-05-07 15:35:15 -04:00

48 lines
1.3 KiB
Bash
Executable File

#! /usr/bin/env bash
# Sleeps until an HTTP server becomes responsive, i.e., responds with code 200.
# When passing the optional <required keys> parameter, the script also checks
# that the payload sent by the server contains the keys.
if [ $# -ne 3 ] && [ $# -ne 4 ]; then
echo >&2 "usage: $0 <port> <path> <max secs to wait> [<required keys>]"
exit 1
fi
base_dir=`dirname "$0"`
port=`awk -F/ '{print $1}' <<< $1`
wait_url="http://localhost:$port/$2"
max_wait=$3
required_keys=$4
wait_count=0
tmp_file=wait-for-http-tmp
function get_status_code() {
rm -f $tmp_file
curl -s -o $tmp_file -w "%{http_code}" $wait_url
}
while true; do
# try to get a valid response from the server
response_code=`get_status_code`
if [ "$response_code" = "200" ]; then
if [ -z "$search_string" ]; then
rm -f $tmp_file
exit 0
else
if python3 "$base_dir/extract-json-keys.py" $tmp_file $required_keys; then
rm -f $tmp_file
exit 0
fi
fi
fi
# wait for a second unless we've hit the maximum wait time
let "wait_count += 1"
if [ $wait_count -ge $max_wait ]; then
rm -f $tmp_file
echo >&2 "error: server does not respond on $wait_url after $max_wait seconds"
exit 1
fi
sleep 1
done