From fc5544ac7046f7e21ca89679380c415cf1d03404 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 10 Jun 2019 13:05:57 -0400 Subject: [PATCH] refactor: use a single method for running the ps:*all commands This reduces the duplication at the cost of slightly more complexity. --- plugins/ps/functions | 7 +++++ plugins/ps/internal-functions | 51 +++++++++++++++++++++++++++++++ plugins/ps/subcommands/rebuildall | 29 ++---------------- plugins/ps/subcommands/restartall | 29 ++---------------- plugins/ps/subcommands/restore | 39 +++-------------------- plugins/ps/subcommands/startall | 29 ++---------------- plugins/ps/subcommands/stopall | 29 ++---------------- 7 files changed, 70 insertions(+), 143 deletions(-) diff --git a/plugins/ps/functions b/plugins/ps/functions index ba4e7546d..fe0cb0ca4 100755 --- a/plugins/ps/functions +++ b/plugins/ps/functions @@ -118,6 +118,13 @@ set_scale() { done } +ps_restore() { + declare desc="restores app" + local APP="$1" + + ps_start "$APP" +} + ps_start() { declare desc="starts app" local APP="$1" diff --git a/plugins/ps/internal-functions b/plugins/ps/internal-functions index c618041e8..e18661e07 100755 --- a/plugins/ps/internal-functions +++ b/plugins/ps/internal-functions @@ -1,6 +1,7 @@ #!/usr/bin/env bash source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" source "$PLUGIN_AVAILABLE_PATH/docker-options/functions" +source "$PLUGIN_AVAILABLE_PATH/config/functions" source "$PLUGIN_AVAILABLE_PATH/ps/functions" set -eo pipefail [[ $DOKKU_TRACE ]] && set -x @@ -117,3 +118,53 @@ cmd-ps-report-single() { fi fi } + +fn-ps-parallel-cmd() { + declare desc="Run a ps command against all apps" + declare CMD="$1" + local GNU_PARALLEL has_apps=false + + for APP in $(dokku_apps); do + has_apps=true + break + done + + if [[ "$has_apps" == "false" ]]; then + dokku_log_info1 "No apps detected" + return + fi + + if which parallel >/dev/null 2>&1; then + dokku_log_info1 "Running 'dokku ps:${CMD}' in parallel" + GNU_PARALLEL=$(parallel -V 2>&1 | grep GNU || true) + if [[ -z "$GNU_PARALLEL" ]]; then + # shellcheck disable=SC2046 + parallel -i bash -c "dokku ps:${CMD} {}" -- $(dokku_apps) + else + # shellcheck disable=SC2046 + dokku_apps | parallel "dokku ps:${CMD} {}" + fi + return + fi + + dokku_log_info1 "Running 'dokku ps:${CMD}' in serially" + for APP in $(dokku_apps); do + if ! (is_deployed "$APP"); then + dokku_log_warn "App $APP has not been deployed" + continue + fi + + if [[ "$CMD" == "restore" ]]; then + local DOKKU_APP_RESTORE=$(config_get "$APP" DOKKU_APP_RESTORE || true) + if [[ "$DOKKU_APP_RESTORE" == 0 ]]; then + continue + fi + fi + + dokku_log_verbose "Running 'dokku ps:${CMD} $APP' ..." + if ps_${CMD} "$APP"; then + continue + fi + dokku_log_warn "dokku ps:${CMD} $APP failed" + done +} diff --git a/plugins/ps/subcommands/rebuildall b/plugins/ps/subcommands/rebuildall index 3f10e32a8..9390f1e0d 100755 --- a/plugins/ps/subcommands/rebuildall +++ b/plugins/ps/subcommands/rebuildall @@ -2,38 +2,13 @@ set -eo pipefail [[ $DOKKU_TRACE ]] && set -x source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" -source "$PLUGIN_AVAILABLE_PATH/config/functions" -source "$PLUGIN_AVAILABLE_PATH/ps/functions" +source "$PLUGIN_AVAILABLE_PATH/ps/internal-functions" ps_rebuildall_cmd() { declare desc="rebuilds all apps from source" local cmd="ps:rebuildall" - local GNU_PARALLEL - if which parallel >/dev/null 2>&1; then - dokku_log_info1 "Rebuilding in parallel" - GNU_PARALLEL=$(parallel -V 2>&1 | grep GNU || true) - if [[ -z "$GNU_PARALLEL" ]]; then - # shellcheck disable=SC2046 - parallel -i bash -c "dokku ps:rebuild {}" -- $(dokku_apps) - else - dokku_apps | parallel 'dokku ps:rebuild {}' - fi - return - fi - - for app in $(dokku_apps); do - if ! (is_deployed "$app"); then - dokku_log_warn "App $app has not been deployed" - continue - fi - - dokku_log_verbose "Rebuilding app $app ..." - if ps_rebuild "$app"; then - continue - fi - dokku_log_warn "dokku ps:rebuild ${app} failed" - done + fn-ps-parallel-cmd "rebuild" } ps_rebuildall_cmd "$@" diff --git a/plugins/ps/subcommands/restartall b/plugins/ps/subcommands/restartall index 19a4be7b6..07a8e2a53 100755 --- a/plugins/ps/subcommands/restartall +++ b/plugins/ps/subcommands/restartall @@ -2,38 +2,13 @@ set -eo pipefail [[ $DOKKU_TRACE ]] && set -x source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" -source "$PLUGIN_AVAILABLE_PATH/config/functions" -source "$PLUGIN_AVAILABLE_PATH/ps/functions" +source "$PLUGIN_AVAILABLE_PATH/ps/internal-functions" ps_restartall_cmd() { declare desc="restarts all apps via command line" local cmd="ps:restartall" - local GNU_PARALLEL - if which parallel >/dev/null 2>&1; then - dokku_log_info1 "Restarting in parallel" - GNU_PARALLEL=$(parallel -V 2>&1 | grep GNU || true) - if [[ -z "$GNU_PARALLEL" ]]; then - # shellcheck disable=SC2046 - parallel -i bash -c "dokku ps:restart {}" -- $(dokku_apps) - else - dokku_apps | parallel 'dokku ps:restart {}' - fi - return - fi - - for app in $(dokku_apps); do - if ! (is_deployed "$app"); then - dokku_log_warn "App $app has not been deployed" - continue - fi - - dokku_log_verbose "Restarting app $app ..." - if ps_restart "$app"; then - continue - fi - dokku_log_warn "dokku ps:restart ${app} failed" - done + fn-ps-parallel-cmd "restart" } ps_restartall_cmd "$@" diff --git a/plugins/ps/subcommands/restore b/plugins/ps/subcommands/restore index 94f84206a..d8b43b514 100755 --- a/plugins/ps/subcommands/restore +++ b/plugins/ps/subcommands/restore @@ -4,6 +4,7 @@ set -eo pipefail source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" source "$PLUGIN_AVAILABLE_PATH/config/functions" source "$PLUGIN_AVAILABLE_PATH/ps/functions" +source "$PLUGIN_AVAILABLE_PATH/ps/internal-functions" ps_restore_cmd() { declare desc="starts all apps with DOKKU_APP_RESTORE not set to 0 via command line" @@ -12,7 +13,7 @@ ps_restore_cmd() { local DOKKU_SCHEDULER DOKKU_SCHEDULER=$(get_app_scheduler "$APP") - plugn trigger pre-restore "$DOKKU_SCHEDULER" + plugn trigger pre-restore "$DOKKU_SCHEDULER" "$APP" if [[ -n "$APP" ]]; then if ! (is_deployed "$APP"); then @@ -22,43 +23,11 @@ ps_restore_cmd() { DOKKU_APP_RESTORE="$(config_get "$APP" DOKKU_APP_RESTORE || true)" if [[ $DOKKU_APP_RESTORE != 0 ]]; then - ps_start "$APP" || dokku_log_warn "dokku ps:restore ${APP} failed" + ps_restore "$APP" || dokku_log_warn "dokku ps:restore ${APP} failed" fi else - ps_restore_all + fn-ps-parallel-cmd "restore" fi } -ps_restore_all() { - local GNU_PARALLEL - - if which parallel >/dev/null 2>&1; then - dokku_log_info1 "Restarting in parallel" - GNU_PARALLEL=$(parallel -V 2>&1 | grep GNU || true) - if [[ -z "$GNU_PARALLEL" ]]; then - # shellcheck disable=SC2046 - parallel -i bash -c "dokku ps:restore {}" -- $(dokku_apps) - else - dokku_apps | parallel 'dokku ps:restore {}' - fi - return - fi - - for app in $(dokku_apps); do - if ! (is_deployed "$app"); then - dokku_log_warn "App $app has not been deployed" - continue - fi - - local DOKKU_APP_RESTORE=$(config_get "$app" DOKKU_APP_RESTORE || true) - if [[ $DOKKU_APP_RESTORE != 0 ]]; then - dokku_log_verbose "Restoring app $app ..." - if ps_start "$app"; then - continue - fi - dokku_log_warn "dokku ps:restore ${app} failed" - fi - done -} - ps_restore_cmd "$@" diff --git a/plugins/ps/subcommands/startall b/plugins/ps/subcommands/startall index 13841486e..0ccb7234c 100755 --- a/plugins/ps/subcommands/startall +++ b/plugins/ps/subcommands/startall @@ -2,38 +2,13 @@ set -eo pipefail [[ $DOKKU_TRACE ]] && set -x source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" -source "$PLUGIN_AVAILABLE_PATH/config/functions" -source "$PLUGIN_AVAILABLE_PATH/ps/functions" +source "$PLUGIN_AVAILABLE_PATH/ps/internal-functions" ps_startall_cmd() { declare desc="starts all apps via command line" local cmd="ps:startall" - local GNU_PARALLEL - if which parallel >/dev/null 2>&1; then - dokku_log_info1 "Starting in parallel" - GNU_PARALLEL=$(parallel -V 2>&1 | grep GNU || true) - if [[ -z "$GNU_PARALLEL" ]]; then - # shellcheck disable=SC2046 - parallel -i bash -c "dokku ps:start {}" -- $(dokku_apps) - else - dokku_apps | parallel 'dokku ps:start {}' - fi - return - fi - - for app in $(dokku_apps); do - if ! (is_deployed "$app"); then - dokku_log_warn "App $app has not been deployed" - continue - fi - - dokku_log_verbose "Starting app $app ..." - if ps_start "$app"; then - continue - fi - dokku_log_warn "dokku ps:start ${app} failed" - done + fn-ps-parallel-cmd "start" } ps_startall_cmd "$@" diff --git a/plugins/ps/subcommands/stopall b/plugins/ps/subcommands/stopall index 3014ef189..decef1c98 100755 --- a/plugins/ps/subcommands/stopall +++ b/plugins/ps/subcommands/stopall @@ -2,38 +2,13 @@ set -eo pipefail [[ $DOKKU_TRACE ]] && set -x source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" -source "$PLUGIN_AVAILABLE_PATH/config/functions" -source "$PLUGIN_AVAILABLE_PATH/ps/functions" +source "$PLUGIN_AVAILABLE_PATH/ps/internal-functions" ps_stopall_cmd() { declare desc="stops all apps via command line" local cmd="ps:stopall" - local GNU_PARALLEL - if which parallel >/dev/null 2>&1; then - dokku_log_info1 "Stopping in parallel" - GNU_PARALLEL=$(parallel -V 2>&1 | grep GNU || true) - if [[ -z "$GNU_PARALLEL" ]]; then - # shellcheck disable=SC2046 - parallel -i bash -c "dokku ps:stop {}" -- $(dokku_apps) - else - dokku_apps | parallel 'dokku ps:stop {}' - fi - return - fi - - for app in $(dokku_apps); do - if ! (is_deployed "$app"); then - dokku_log_warn "App $app has not been deployed" - continue - fi - - dokku_log_verbose "Stopping app $app ..." - if ps_stop "$app"; then - continue - fi - dokku_log_warn "dokku ps:stop ${app} failed" - done + fn-ps-parallel-cmd "stop" } ps_stopall_cmd "$@"