This standardization makes it somewhat easier to read stacktraces as the command names are all uniform, so it will be slightly easier to scan trace output.
98 lines
3.0 KiB
Bash
Executable File
98 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -eo pipefail
|
|
[[ $DOKKU_TRACE ]] && set -x
|
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
|
source "$PLUGIN_AVAILABLE_PATH/checks/functions"
|
|
|
|
check_all_processes() {
|
|
local APP="$1"
|
|
CHECK_PROC_TYPE="$2"
|
|
local DOKKU_SCALE_FILE="$DOKKU_ROOT/$APP/DOKKU_SCALE"
|
|
local VALID_CHECK_PROC_TYPE=false
|
|
|
|
local line
|
|
local PROC_TYPE
|
|
local PROC_COUNT
|
|
while read -r line || [[ -n "$line" ]]; do
|
|
[[ "$line" =~ ^#.* ]] && continue
|
|
line="$(strip_inline_comments "$line")"
|
|
local PROC_TYPE=${line%%=*}
|
|
local PROC_COUNT=${line#*=}
|
|
|
|
if [[ -n "$CHECK_PROC_TYPE" ]] && [[ "$CHECK_PROC_TYPE" != "$PROC_TYPE" ]]; then
|
|
continue
|
|
fi
|
|
|
|
VALID_CHECK_PROC_TYPE=true
|
|
if [[ "$(is_app_proctype_checks_disabled "$APP" "$PROC_TYPE")" == "true" ]]; then
|
|
dokku_log_info1 "Zero downtime is disabled for app ($APP.$PROC_TYPE). Skipping checks"
|
|
continue
|
|
fi
|
|
|
|
check_process_type "$APP" "$PROC_TYPE" "$PROC_COUNT"
|
|
done <"$DOKKU_SCALE_FILE"
|
|
|
|
if [[ "$VALID_CHECK_PROC_TYPE" == "false" ]]; then
|
|
dokku_log_fail "Invalid process type specified ($APP.$CHECK_PROC_TYPE)"
|
|
fi
|
|
}
|
|
|
|
check_process_type() {
|
|
local APP="$1" PROC_TYPE="$2" PROC_COUNT="$3"
|
|
local CONTAINER_INDEX=1
|
|
|
|
while [[ $CONTAINER_INDEX -le $PROC_COUNT ]]; do
|
|
check_process "$APP" "$PROC_TYPE" "$CONTAINER_INDEX"
|
|
local CONTAINER_INDEX=$((CONTAINER_INDEX + 1))
|
|
done
|
|
}
|
|
|
|
check_process() {
|
|
local APP="$1" PROC_TYPE="$2" CONTAINER_INDEX="$3"
|
|
local CONTAINER_ID DOKKU_CONTAINER_ID_FILE IMAGE IP IS_HEROKUISH_CONTAINER PORT
|
|
DOKKU_CONTAINER_ID_FILE="$DOKKU_ROOT/$APP/CONTAINER.$PROC_TYPE.$CONTAINER_INDEX"
|
|
|
|
if [[ ! -f "$DOKKU_CONTAINER_ID_FILE" ]]; then
|
|
dokku_log_fail "Invalid container index specified ($APP.$PROC_TYPE.$CONTAINER_INDEX)"
|
|
fi
|
|
|
|
IS_HEROKUISH_CONTAINER=false
|
|
IMAGE=$(get_app_image_name "$APP")
|
|
is_image_herokuish_based "$IMAGE" "$APP" && IS_HEROKUISH_CONTAINER=true
|
|
|
|
dokku_log_info1 "Running checks for app ($APP.$PROC_TYPE.$CONTAINER_INDEX)"
|
|
CONTAINER_ID=$(<"$DOKKU_CONTAINER_ID_FILE")
|
|
IP="$(plugn trigger network-get-ipaddr "$APP" "$PROC_TYPE" "$CONTAINER_ID")"
|
|
PORT="$(plugn trigger network-get-port "$APP" "$PROC_TYPE" "$IS_HEROKUISH_CONTAINER" "$CONTAINER_ID")"
|
|
plugn trigger check-deploy "$APP" "$CONTAINER_ID" "$PROC_TYPE" "$PORT" "$IP"
|
|
}
|
|
|
|
cmd-checks-run() {
|
|
declare desc="run zero-downtime checks for app/proctypes"
|
|
local cmd="checks:run"
|
|
[[ "$1" == "$cmd" ]] && shift 1
|
|
local APP="$1"
|
|
verify_app_name "$APP"
|
|
local PROCTYPES="${2:-_all_}"
|
|
|
|
dokku_log_info1 "Running pre-flight checks"
|
|
if [[ "$PROCTYPES" == "_all_" ]]; then
|
|
check_all_processes "$APP"
|
|
else
|
|
local PROC_TYPE OIFS="$IFS" IFS=,
|
|
for PROC_TYPE in $PROCTYPES; do
|
|
IFS="$OIFS"
|
|
|
|
local CONTAINER_INDEX=$(echo "$PROC_TYPE" | cut -d'.' -f2 -s)
|
|
local PROC_TYPE=$(echo "$PROC_TYPE" | cut -d'.' -f1)
|
|
if [[ -n "$CONTAINER_INDEX" ]]; then
|
|
check_process "$APP" "$PROC_TYPE" "$CONTAINER_INDEX"
|
|
else
|
|
check_all_processes "$APP" "$PROC_TYPE"
|
|
fi
|
|
done
|
|
fi
|
|
}
|
|
|
|
cmd-checks-run "$@"
|