From 0248fbb283ec22e0e2c4915ebd70c409e9b50c52 Mon Sep 17 00:00:00 2001 From: FailedProxy Date: Sun, 5 Apr 2026 05:19:47 +0000 Subject: [PATCH] added orcastators --- Orchestrators/daily_sync.sh | 105 ++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 Orchestrators/daily_sync.sh diff --git a/Orchestrators/daily_sync.sh b/Orchestrators/daily_sync.sh new file mode 100644 index 0000000..550621c --- /dev/null +++ b/Orchestrators/daily_sync.sh @@ -0,0 +1,105 @@ +#!/bin/bash +# ----------------------------------------------------------------------------------------------- +# --------------------------------- Daily Sync Orchestrator ------------------------------------ +# ----------------------------------------------------------------------------------------------- +# Runs all bulk media shares sequentially. Scheduled via unRAID User Scripts plugin at 1am. +# Per-share rsync handled by rsync.sh — this script tracks pass/fail and total time only. +# ----------------------------------------------------------------------------------------------- + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +source "$SCRIPT_DIR/../Master.conf" +source "$SCRIPT_DIR/../common.sh" + +RSYNC_SCRIPT="$SCRIPT_DIR/../Rsync/rsync.sh" + +SHARES=( + /mnt/user/Anime_Movies-Old + /mnt/user/Anime_Shows-Old + /mnt/user/Anime_Shows + /mnt/user/Books + /mnt/user/Intros + /mnt/user/Kids_Movies + /mnt/user/Kids_Tv_Shows + /mnt/user/Movies + /mnt/user/Music_Videos + /mnt/user/Nextcloud + /mnt/user/stand-up_comedy + /mnt/user/Tv_Shows +) + +# ----------------------------------------------------------------------------------------------- +# Duration Formatter +# ----------------------------------------------------------------------------------------------- +format_duration() { + local secs=$1 + local mins=$((secs / 60)) + local rem=$((secs % 60)) + [[ $mins -gt 0 ]] && echo "${mins}m${rem}s" || echo "${rem}s" +} + +# ----------------------------------------------------------------------------------------------- +# Tracking +# ----------------------------------------------------------------------------------------------- +PASS=() +FAIL=() +SHARE_TIMES=() +TOTAL_START=$(date +%s) + +# ----------------------------------------------------------------------------------------------- +# Run +# ----------------------------------------------------------------------------------------------- +echo "" +echo "$ICON_SYNC Daily Sync Starting — $(date '+%Y-%m-%d %H:%M:%S')" +echo "Shares: ${#SHARES[@]}" +echo "" + +for SHARE in "${SHARES[@]}"; do + SHARE_NAME=$(basename "$SHARE") + SHARE_START=$(date +%s) + + echo "----------------------------------------" + info "Syncing $SHARE_NAME..." + echo "----------------------------------------" + + if bash "$RSYNC_SCRIPT" "$SHARE"; then + SHARE_END=$(date +%s) + SHARE_TIMES+=("$SHARE_NAME:$((SHARE_END - SHARE_START))") + PASS+=("$SHARE_NAME") + else + SHARE_END=$(date +%s) + SHARE_TIMES+=("$SHARE_NAME:$((SHARE_END - SHARE_START))") + FAIL+=("$SHARE_NAME") + error "$SHARE_NAME failed — continuing to next share" + fi + + echo "" +done + +TOTAL_END=$(date +%s) +TOTAL_DURATION=$((TOTAL_END - TOTAL_START)) + +# ----------------------------------------------------------------------------------------------- +# Summary +# ----------------------------------------------------------------------------------------------- +echo "===== DAILY SYNC SUMMARY =====" +echo "Started: $(date -d @$TOTAL_START '+%Y-%m-%d %H:%M:%S')" +echo "Finished: $(date -d @$TOTAL_END '+%Y-%m-%d %H:%M:%S')" +echo "" +for entry in "${SHARE_TIMES[@]}"; do + SHARE_NAME="${entry%%:*}" + DURATION="${entry##*:}" + if printf '%s\n' "${FAIL[@]}" | grep -qx "$SHARE_NAME"; then + echo " $ICON_ERROR $SHARE_NAME — $(format_duration $DURATION)" + else + echo " $ICON_SUCCESS $SHARE_NAME — $(format_duration $DURATION)" + fi +done +echo "" +echo " Passed: ${#PASS[@]}/${#SHARES[@]}" +echo " Failed: ${#FAIL[@]}/${#SHARES[@]}" +echo " Duration: $(format_duration $TOTAL_DURATION)" +echo "==============================" + +[[ ${#FAIL[@]} -gt 0 ]] && exit 1 +exit 0 \ No newline at end of file