diff --git a/Rsync/rsync.sh b/Rsync/rsync.sh index 6c8116c..b763cd4 100644 --- a/Rsync/rsync.sh +++ b/Rsync/rsync.sh @@ -23,81 +23,53 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/../Master.conf" source "$SCRIPT_DIR/../common.sh" -# ---------------------------------------------------------------------------------- -# INPUT PARSING (FIXED) -# ---------------------------------------------------------------------------------- +# ----------------------------- INPUT ----------------------------- DIRECTORY="" RAW_ARGS=() for ARG in "$@"; do case "$ARG" in - --*|*=*) - RAW_ARGS+=("$ARG") - ;; + --*|*=*) RAW_ARGS+=("$ARG") ;; *) if [[ -z "$DIRECTORY" ]]; then DIRECTORY="$ARG" else RAW_ARGS+=("$ARG") fi - ;; + ;; esac done parse_args "${RAW_ARGS[@]}" -if [[ -z "$DIRECTORY" ]]; then - error "Missing directory" - exit 1 -fi +[[ -z "$DIRECTORY" ]] && error "Missing directory" && exit 1 -# ---------------------------------------------------------------------------------- -# HOST SETUP -# ---------------------------------------------------------------------------------- +# ----------------------------- CORE ----------------------------- detect_hosts resolve_remote_ip -# ---------------------------------------------------------------------------------- -# PROFILE SETUP -# ---------------------------------------------------------------------------------- - PROFILE_NAME=$(basename "$DIRECTORY" | tr '[:upper:]' '[:lower:]') MAX_RSYNC_PROCS=${PROFILE_MAX_PROCS[$PROFILE_NAME]:-$MAX_RSYNC_PROCS} -BW_LIMIT=${PROFILE_BW_LIMIT[$PROFILE_NAME]:-$BW_LIMIT} -CRITICAL_CONTAINER_NAMES=(${PROFILE_CRITICAL_CONTAINER_NAMES[$PROFILE_NAME]}) -DELAYED_CONTAINERS=(${PROFILE_DELAYED_CONTAINERS[$PROFILE_NAME]}) -CONTAINER_DELAY=${PROFILE_CONTAINER_DELAY[$PROFILE_NAME]:-$CONTAINER_DELAY} RETRY_COUNT=${PROFILE_RETRY_COUNT[$PROFILE_NAME]:-$RETRY_COUNT} SLEEP=${PROFILE_SLEEP[$PROFILE_NAME]:-$SLEEP} EXCLUDE_DIRS=(${PROFILE_EXCLUDE_DIRS[$PROFILE_NAME]:-${EXCLUDE_DIRS[@]}}) -# ---------------------------------------------------------------------------------- -# STATUS MODE -# ---------------------------------------------------------------------------------- +# ----------------------------- STATUS ----------------------------- if [[ "${SHOW_STATUS:-false}" == true ]]; then show_status exit 0 fi -# ---------------------------------------------------------------------------------- -# HEADER (HANDLED IN COMMON OUTPUT LAYER) -# ---------------------------------------------------------------------------------- +# ----------------------------- FLOW ----------------------------- -echo info "Sync Starting" info "Source: $DIRECTORY" info "Remote: $REMOTE_SERVER:$DIRECTORY" info "Profile: $PROFILE_NAME" -info "Dry Run: $DRY_RUN" -echo "--------------------------------------------" - -# ---------------------------------------------------------------------------------- -# REMOTE CHECK -# ---------------------------------------------------------------------------------- info "Checking remote..." @@ -109,45 +81,21 @@ for i in $(seq 1 "$RETRY_COUNT"); do REMOTE_OK=true break fi - warn "Retry $i/$RETRY_COUNT" sleep "$SLEEP" done -if [[ "$REMOTE_OK" != true ]]; then - error "Remote unreachable" - exit 1 -fi - -# ---------------------------------------------------------------------------------- -# RSYNC LIMITER -# ---------------------------------------------------------------------------------- +[[ "$REMOTE_OK" != true ]] && error "Remote unreachable" && exit 1 wait_for_rsync - -# ---------------------------------------------------------------------------------- -# CONTAINERS -# ---------------------------------------------------------------------------------- - stop_containers - -# ---------------------------------------------------------------------------------- -# RSYNC OPTIONS -# ---------------------------------------------------------------------------------- - get_rsync_opts for ex in "${EXCLUDE_DIRS[@]}"; do RSYNC_OPTS+=(--exclude="$ex") done -if [[ "$DRY_RUN" == true ]]; then - RSYNC_OPTS+=("--dry-run") -fi - -# ---------------------------------------------------------------------------------- -# RSYNC EXECUTION (NO LOGGING HERE) -# ---------------------------------------------------------------------------------- +[[ "$DRY_RUN" == true ]] && RSYNC_OPTS+=("--dry-run") RSYNC_CMD=( rsync @@ -173,13 +121,7 @@ start_containers END=$(date +%s) -# ---------------------------------------------------------------------------------- -# SUMMARY (HANDLED VIA COMMON OUTPUT LAYER ONLY) -# ---------------------------------------------------------------------------------- - -echo info "Directory: $DIRECTORY" info "Profile: $PROFILE_NAME" info "Duration: $((END-START))s" -info "Status: DONE" -echo "===================" \ No newline at end of file +info "Status: DONE" \ No newline at end of file diff --git a/common.sh b/common.sh index 30c58d7..0ddb6c1 100644 --- a/common.sh +++ b/common.sh @@ -1,9 +1,8 @@ #!/bin/bash # ----------------------------------------------------------------------------------------------- -# ----------------- UNRAID OPS COMMON LIBRARY (CORE FRAMEWORK v1) ------------------------------- +# ----------------- UNRAID OPS COMMON LIBRARY (CORE FRAMEWORK v1 FIXED) ------------------------- # ----------------------------------------------------------------------------------------------- -# ----------------------------- ICON LAYER ----------------------------- ICON_INFO="ℹ️" ICON_WARN="⚠️" ICON_ERROR="❌" @@ -14,7 +13,8 @@ ICON_RETRY="🔁" ICON_SYNC="🔄" ICON_GEAR="⚙️" -# ----------------------------- Output Helpers ----------------------------- +# ----------------------------- Output ----------------------------- + info() { echo "$ICON_INFO [INFO] $*"; } warn() { echo "$ICON_WARN [WARN] $*"; } error() { echo "$ICON_ERROR [ERROR] $*"; } @@ -24,54 +24,45 @@ log() { [[ "${ENABLE_LOGGING:-false}" == true ]] && echo "[LOG] $*" } -# ----------------------------- Argument Parsing ----------------------------- +# ----------------------------- Args ----------------------------- + parse_args() { ENABLE_LOGGING=${ENABLE_LOGGING:-false} DRY_RUN=${DRY_RUN:-false} + SHOW_STATUS=${SHOW_STATUS:-false} - local CLEAN_ARGS=() + CLEAN_ARGS=() for ARG in "$@"; do if [[ "$ARG" == *=* ]]; then - VAR_NAME="${ARG%%=*}" - VAR_VALUE="${ARG#*=}" + VAR="${ARG%%=*}" + VAL="${ARG#*=}" - case "$VAR_NAME" in + case "$VAR" in LOG) - [[ "$VAR_VALUE" == "true" ]] && ENABLE_LOGGING=true - [[ "$VAR_VALUE" == "false" ]] && ENABLE_LOGGING=false + [[ "$VAL" == "true" ]] && ENABLE_LOGGING=true + [[ "$VAL" == "false" ]] && ENABLE_LOGGING=false ;; *) - if declare -p "$VAR_NAME" &>/dev/null; then - printf -v "$VAR_NAME" '%s' "$VAR_VALUE" - log "Set $VAR_NAME=$VAR_VALUE" + if declare -p "$VAR" &>/dev/null; then + printf -v "$VAR" '%s' "$VAL" + log "Set $VAR=$VAL" else - warn "Unknown variable: $VAR_NAME" + warn "Unknown variable: $VAR" fi ;; esac - else case "$ARG" in - --dry-run|-n) - DRY_RUN=true - ;; - --log) - ENABLE_LOGGING=true - ;; - --no-log) - ENABLE_LOGGING=false - ;; - --status|--summary) - SHOW_STATUS=true - ;; + --dry-run|-n) DRY_RUN=true ;; + --log) ENABLE_LOGGING=true ;; + --no-log) ENABLE_LOGGING=false ;; + --status|--summary) SHOW_STATUS=true ;; --help|-h) - echo "Usage: script