fix: correct issue where attempts were done globally instead of per check

This commit is contained in:
Jose Diaz-Gonzalez
2019-11-23 10:22:31 -05:00
parent a3a37a1948
commit 00a175bef7

View File

@@ -147,13 +147,40 @@ scheduler-docker-local-check-deploy() {
fi fi
done done
local ATTEMPT=0 exec <"$CHECKS_FILENAME"
local CHECK_URL
local EXPECTED
local FAILEDCHECKS=0
while read -r CHECK_URL EXPECTED; do
# Ignore empty lines and lines starting with #
# shellcheck disable=SC1001
[[ -z "$CHECK_URL" || "$CHECK_URL" =~ ^\# ]] && continue
# Ignore if it's not a URL in a supported format
# shellcheck disable=SC1001
! [[ "$CHECK_URL" =~ ^(http(s)?:)?\/.* ]] && continue
until [[ $SUCCESS == 1 || $ATTEMPT -ge $ATTEMPTS ]]; do if [[ "$CHECK_URL" =~ ^https?: ]]; then
local FAILEDCHECKS=0 local URL_PROTOCOL=${CHECK_URL%:*}
local ATTEMPT=$((ATTEMPT + 1)) local CHECK_URL=${CHECK_URL#*:}
dokku_log_verbose "Attempt $ATTEMPT/$ATTEMPTS. Waiting for $WAIT seconds ..." else
sleep "$WAIT" local URL_PROTOCOL="http"
fi
if [[ "$CHECK_URL" =~ ^//.+ ]]; then
# To test a URL with specific host name, we still make request to localhost,
# but we set Host header to $SEND_HOST.
#
# The pattern is
# //SEND_HOST/PATHNAME
local UNPREFIXED=${CHECK_URL#//}
local URL_HOSTNAME=${UNPREFIXED%%/*}
local URL_PATHNAME=${UNPREFIXED#$URL_HOSTNAME}
local HEADERS="-H Host:$URL_HOSTNAME"
else
local URL_HOSTNAME=localhost
local URL_PATHNAME=$CHECK_URL
fi
# -q Do not use .curlrc (must come first) # -q Do not use .curlrc (must come first)
# --compressed Test compression handled correctly # --compressed Test compression handled correctly
@@ -168,48 +195,20 @@ scheduler-docker-local-check-deploy() {
local CURL_OPTIONS+=" -H X-Forwarded-Proto:https" local CURL_OPTIONS+=" -H X-Forwarded-Proto:https"
fi fi
exec <"$CHECKS_FILENAME" # This URL will show up in the messages
local CHECK_URL local LOG_URL="$URL_PROTOCOL://$URL_HOSTNAME$URL_PATHNAME"
local EXPECTED # And how we formulate the CURL request
while read -r CHECK_URL EXPECTED; do local CURL_ARGS="$CURL_OPTIONS $URL_PROTOCOL://$DOKKU_APP_LISTEN_IP:$DOKKU_APP_LISTEN_PORT$URL_PATHNAME $HEADERS"
# Ignore empty lines and lines starting with #
# shellcheck disable=SC1001
[[ -z "$CHECK_URL" || "$CHECK_URL" =~ ^\# ]] && continue
# Ignore if it's not a URL in a supported format
# shellcheck disable=SC1001
! [[ "$CHECK_URL" =~ ^(http(s)?:)?\/.* ]] && continue
if [[ "$CHECK_URL" =~ ^https?: ]]; then dokku_log_verbose "CHECKS expected result:"
local URL_PROTOCOL=${CHECK_URL%:*} dokku_log_verbose "$LOG_URL => \"$EXPECTED\""
local CHECK_URL=${CHECK_URL#*:} [[ $DOKKU_TRACE ]] && dokku_log_verbose "$ curl $CURL_ARGS"
else
local URL_PROTOCOL="http"
fi
if [[ "$CHECK_URL" =~ ^//.+ ]]; then local ATTEMPT=0
# To test a URL with specific host name, we still make request to localhost, until [[ $SUCCESS == 1 || $ATTEMPT -ge $ATTEMPTS ]]; do
# but we set Host header to $SEND_HOST. local ATTEMPT=$((ATTEMPT + 1))
# dokku_log_verbose "Attempt $ATTEMPT/$ATTEMPTS. Waiting for $WAIT seconds ..."
# The pattern is sleep "$WAIT"
# //SEND_HOST/PATHNAME
local UNPREFIXED=${CHECK_URL#//}
local URL_HOSTNAME=${UNPREFIXED%%/*}
local URL_PATHNAME=${UNPREFIXED#$URL_HOSTNAME}
local HEADERS="-H Host:$URL_HOSTNAME"
else
local URL_HOSTNAME=localhost
local URL_PATHNAME=$CHECK_URL
fi
# This URL will show up in the messages
local LOG_URL="$URL_PROTOCOL://$URL_HOSTNAME$URL_PATHNAME"
# And how we formulate the CURL request
local CURL_ARGS="$CURL_OPTIONS $URL_PROTOCOL://$DOKKU_APP_LISTEN_IP:$DOKKU_APP_LISTEN_PORT$URL_PATHNAME $HEADERS"
dokku_log_verbose "CHECKS expected result:"
dokku_log_verbose "$LOG_URL => \"$EXPECTED\""
[[ $DOKKU_TRACE ]] && dokku_log_verbose "$ curl $CURL_ARGS"
# Capture HTTP response or CURL error message # Capture HTTP response or CURL error message
# shellcheck disable=SC2086 # shellcheck disable=SC2086
@@ -224,14 +223,14 @@ scheduler-docker-local-check-deploy() {
dokku_log_warn "$OUTPUT" dokku_log_warn "$OUTPUT"
local FAILEDCHECKS=$((FAILEDCHECKS + 1)) local FAILEDCHECKS=$((FAILEDCHECKS + 1))
fi fi
done
if [[ $FAILEDCHECKS -gt 0 ]]; then if [[ $FAILEDCHECKS -gt 0 ]]; then
dokku_log_warn "Check attempt $ATTEMPT/$ATTEMPTS failed." dokku_log_warn "Check attempt $ATTEMPT/$ATTEMPTS failed."
local SUCCESS=0 local SUCCESS=0
else else
local SUCCESS=1 local SUCCESS=1
fi fi
done
done done
if [[ $FAILEDCHECKS -gt 0 ]]; then if [[ $FAILEDCHECKS -gt 0 ]]; then