improved
This commit is contained in:
@@ -10,6 +10,7 @@ ICON_ERROR="❌"
|
||||
ICON_SUCCESS="✅"
|
||||
ICON_RUN="🚀"
|
||||
ICON_STOP="🛑"
|
||||
ICON_STOPPED="🟢"
|
||||
ICON_SYNC="🔄"
|
||||
|
||||
# ----------------------------- OUTPUT -----------------------------
|
||||
@@ -55,10 +56,6 @@ parse_args() {
|
||||
--log) ENABLE_LOGGING=true ;;
|
||||
--no-log) ENABLE_LOGGING=false ;;
|
||||
--status|--summary) SHOW_STATUS=true ;;
|
||||
--help|-h)
|
||||
echo "Usage: script <dir> [--dry-run] [--log]"
|
||||
exit 0
|
||||
;;
|
||||
*) CLEAN_ARGS+=("$ARG") ;;
|
||||
esac
|
||||
fi
|
||||
@@ -100,11 +97,8 @@ detect_hosts() {
|
||||
|
||||
# ----------------------------- REMOTE -----------------------------
|
||||
resolve_remote_ip() {
|
||||
log "Resolving remote IP..."
|
||||
REMOTE_SERVER=$(tailscale ip -4 "$REMOTE_SERVER_NAME" 2>/dev/null)
|
||||
|
||||
[[ -z "$REMOTE_SERVER" ]] && error "Failed to resolve remote IP" && exit 1
|
||||
|
||||
info "Remote IP: $REMOTE_SERVER"
|
||||
}
|
||||
|
||||
@@ -118,7 +112,6 @@ stop_containers() {
|
||||
RUNNING_CONTAINERS=()
|
||||
|
||||
for c in "${CRITICAL_CONTAINER_NAMES[@]}"; do
|
||||
log "Checking container: $c"
|
||||
|
||||
STATUS=$(ssh -i "$SSH_KEY" root@"$REMOTE_SERVER" \
|
||||
"docker inspect -f '{{.State.Running}}' $c 2>/dev/null" || echo "false")
|
||||
@@ -133,7 +126,7 @@ stop_containers() {
|
||||
error "Failed to stop $c"
|
||||
fi
|
||||
else
|
||||
log "$c already stopped"
|
||||
echo "$ICON_STOPPED $c already stopped"
|
||||
fi
|
||||
done
|
||||
}
|
||||
@@ -160,13 +153,8 @@ wait_for_rsync() {
|
||||
: "${MAX_RSYNC_PROCS:=2}"
|
||||
: "${SLEEP:=2}"
|
||||
|
||||
for i in $(seq 1 "$RETRY_COUNT"); do
|
||||
|
||||
COUNT=$(ps -eo pid,cmd | grep "[r]sync .*${REMOTE_SERVER:-}" | wc -l || true)
|
||||
|
||||
if [[ -z "$REMOTE_SERVER" ]]; then
|
||||
COUNT=$(pgrep -x rsync | wc -l || true)
|
||||
fi
|
||||
for _ in $(seq 1 "$RETRY_COUNT"); do
|
||||
COUNT=$(pgrep -x rsync | wc -l || true)
|
||||
|
||||
if [[ "$COUNT" -ge "$MAX_RSYNC_PROCS" ]]; then
|
||||
warn "Waiting rsync slot ($COUNT/$MAX_RSYNC_PROCS)"
|
||||
@@ -180,26 +168,47 @@ wait_for_rsync() {
|
||||
exit 1
|
||||
}
|
||||
|
||||
# ----------------------------- PROFILE CONFIG -----------------------------
|
||||
declare -A PROFILE_BW_LIMIT=(
|
||||
[arrs_stack]=5000
|
||||
[critical-data]=9500
|
||||
[gmer4lfe]=8000
|
||||
[important-data]=9500
|
||||
[emby]=8000
|
||||
)
|
||||
|
||||
DEFAULT_RSYNC_OPTS=(
|
||||
--archive
|
||||
--delete
|
||||
--partial
|
||||
--compress
|
||||
)
|
||||
|
||||
# ----------------------------- RSYNC OPTIONS -----------------------------
|
||||
get_rsync_opts() {
|
||||
|
||||
if [[ -n "${PROFILE_RSYNC_OPTS[$PROFILE_NAME]:-}" ]]; then
|
||||
read -r -a RSYNC_OPTS <<< "${PROFILE_RSYNC_OPTS[$PROFILE_NAME]}"
|
||||
log "Using profile rsync opts"
|
||||
else
|
||||
RSYNC_OPTS=("${DEFAULT_RSYNC_OPTS[@]}")
|
||||
log "Using default rsync opts"
|
||||
RSYNC_OPTS=()
|
||||
|
||||
# base profile options
|
||||
RSYNC_OPTS=("${DEFAULT_RSYNC_OPTS[@]}")
|
||||
|
||||
# bwlimit (FIXED + ALWAYS APPLIED)
|
||||
BW_LIMIT="${PROFILE_BW_LIMIT[$PROFILE_NAME]:-0}"
|
||||
|
||||
if [[ "$BW_LIMIT" -gt 0 ]]; then
|
||||
RSYNC_OPTS+=(--bwlimit="$BW_LIMIT")
|
||||
log "bwlimit=${BW_LIMIT}KB/s applied"
|
||||
fi
|
||||
|
||||
# ------------------ CLEAN PROGRESS OUTPUT ------------------
|
||||
# clean progress mode
|
||||
if [[ "${ENABLE_PROGRESS:-false}" == true ]]; then
|
||||
RSYNC_OPTS+=(
|
||||
--info=progress2
|
||||
--quiet
|
||||
--info=progress2,name0,stats0
|
||||
--human-readable
|
||||
--no-inc-recursive
|
||||
--info=progress2,name0,stats0
|
||||
)
|
||||
log "Progress enabled (clean mode)"
|
||||
)
|
||||
log "Progress mode enabled"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -210,8 +219,6 @@ show_status() {
|
||||
echo "Remote: $REMOTE_SERVER_NAME"
|
||||
echo "IP: $REMOTE_SERVER"
|
||||
echo "Profile: $PROFILE_NAME"
|
||||
echo "DryRun: $DRY_RUN"
|
||||
echo "Logging: $ENABLE_LOGGING"
|
||||
echo "Progress: ${ENABLE_PROGRESS:-false}"
|
||||
echo "=================="
|
||||
}
|
||||
Reference in New Issue
Block a user