mirror of
https://github.com/dokku/dokku.git
synced 2025-12-29 00:25:08 +01:00
96 lines
2.9 KiB
Bash
Executable File
96 lines
2.9 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 VALID_CHECK_PROC_TYPE=false
|
|
|
|
local line
|
|
local PROC_TYPE
|
|
local PROC_COUNT
|
|
while read -r line || [[ -n "$line" ]]; do
|
|
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 < <(plugn trigger ps-current-scale "$APP")
|
|
|
|
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" "$CONTAINER_ID" "$IS_HEROKUISH_CONTAINER")"
|
|
plugn trigger check-deploy "$APP" "$CONTAINER_ID" "$PROC_TYPE" "$PORT" "$IP"
|
|
}
|
|
|
|
cmd-checks-run() {
|
|
declare desc="run zero-downtime checks for app/proctypes"
|
|
declare cmd="checks:run"
|
|
[[ "$1" == "$cmd" ]] && shift 1
|
|
declare 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 "$@"
|