From ef8ef436cfcefafa588467a7eaefbe28226281ad Mon Sep 17 00:00:00 2001 From: Gmer4Lfe Date: Thu, 21 May 2026 17:25:29 -0400 Subject: [PATCH] Orchestrators echo/log audit pass MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Status conclusions, clean-cycle summaries, skipped-feature lines, and phase completion results → echo across all nine orchestrator scripts. Per-share, per-job, and per-script detail lines inside loops remain log. README-Orchestrators: added Output Tiers section. --- Orchestrators/README-Orchestrators.md | 20 +++++++++++++++++++ Orchestrators/array_started.sh | 2 +- Orchestrators/array_stopping.sh | 2 +- Orchestrators/critical_sync_maintenance.sh | 10 +++++----- Orchestrators/daily_sync_maintenance.sh | 6 +++--- .../intermediate_sync_maintenance.sh | 10 +++++----- Orchestrators/sunday_morning_coffee_report.sh | 6 +++--- Orchestrators/watchdog_orchestrator.sh | 2 +- Orchestrators/weekly_sync_maintenance.sh | 8 ++++---- 9 files changed, 43 insertions(+), 23 deletions(-) diff --git a/Orchestrators/README-Orchestrators.md b/Orchestrators/README-Orchestrators.md index 94ead42..5ce5e65 100644 --- a/Orchestrators/README-Orchestrators.md +++ b/Orchestrators/README-Orchestrators.md @@ -142,6 +142,26 @@ Single notification → one bell per run, not one per job --- +## ━━━ OUTPUT TIERS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +All scripts use a two-tier output model: `echo` lines are always visible; `log` +lines only appear when `--log` is passed. + +**One-shot orchestrators** (`array_started.sh`, `array_stopping.sh`, `sunday_morning_coffee_report.sh`): +without `--log`, section headers, per-phase results, and the final summary are +visible. Per-item detail suppressed. + +**Periodic orchestrators** (`critical_sync_maintenance.sh`, `daily_sync_maintenance.sh`, +`intermediate_sync_maintenance.sh`, `weekly_sync_maintenance.sh`): without `--log`, +phase headers, per-phase completion status, and the final summary are visible. Per-share +and per-job detail suppressed. + +**Daemon orchestrators** (`watchdog_orchestrator.sh`, `transcode_management.sh`): silent +during clean cycles. Only state transitions, errors, and startup-grace expiry shown +without `--log`. + +--- + ## ━━━ SCRIPTS AT A GLANCE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ | Script | What It Orchestrates | Schedule | diff --git a/Orchestrators/array_started.sh b/Orchestrators/array_started.sh index b6968d4..dd82acd 100644 --- a/Orchestrators/array_started.sh +++ b/Orchestrators/array_started.sh @@ -212,6 +212,6 @@ elif [[ "$FAILED" -gt 0 ]]; then notify "Array start on $(hostname) ($MY_ID) — $FAILED script(s) failed: ${FAILED_SCRIPTS[*]}" \ "Array Start" "warning" else - log "$ICON_DONE Status: all $LAUNCHED script(s) launched ✅" + echo "$ICON_DONE Status: all $LAUNCHED script(s) launched ✅" fi echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" \ No newline at end of file diff --git a/Orchestrators/array_stopping.sh b/Orchestrators/array_stopping.sh index d8419f8..6fab5ef 100755 --- a/Orchestrators/array_stopping.sh +++ b/Orchestrators/array_stopping.sh @@ -169,7 +169,7 @@ echo "" if [[ "$DRY_RUN" == true ]]; then warn "DRY RUN — no changes made" elif [[ ${#FAILED[@]} -eq 0 ]]; then - log "$ICON_DONE Status: all $STEP step(s) complete ✅" + echo "$ICON_DONE Status: all $STEP step(s) complete ✅" notify "Array stop complete on $(hostname) ($MY_ID) — $STEP step(s) done" \ "Array Stop" "normal" else diff --git a/Orchestrators/critical_sync_maintenance.sh b/Orchestrators/critical_sync_maintenance.sh index 646c848..a53b8e4 100644 --- a/Orchestrators/critical_sync_maintenance.sh +++ b/Orchestrators/critical_sync_maintenance.sh @@ -120,12 +120,12 @@ PASS=() FAIL=() if ! check_rsync_enabled "CRITICAL"; then - log "Critical rsync disabled — skipping sync, running partnership check only" + echo "Critical rsync disabled — skipping sync, running partnership check only" elif [[ ${#CRITICAL_SYNC_SHARES[@]} -eq 0 ]]; then warn "CRITICAL_RSYNC_ENABLED=true but CRITICAL_SYNC_SHARES is empty for $MY_ID" warn "Check HOST*_CRITICAL_SYNC_SHARES in master_host*.conf" else - log "Critical sync — $MY_ID → $REMOTE_ID — $(date '+%H:%M:%S')" + echo "Critical sync — $MY_ID → $REMOTE_ID — $(date '+%H:%M:%S')" # Build dry-run flag to pass through RSYNC_DRY="" @@ -204,7 +204,7 @@ if [[ "${PARTNERSHIP_ENABLED:-false}" == true ]]; then --check --remote-unseen $PARTNER_DRY fi else - log "Partnership disabled — skipping check" + echo "Partnership disabled — skipping check" fi # ============================================================================================== @@ -219,14 +219,14 @@ if [[ ${#FAIL[@]} -gt 0 ]]; then echo "━━━━━ $ICON_SUMMARY CRITICAL SYNC SUMMARY ━━━━━" echo "$ICON_HOST Identity: $MY_ID ($LOCAL_SERVER_NAME)" echo "$ICON_TIME Duration: $DURATION" - [[ ${#PASS[@]} -gt 0 ]] && log "Synced: ${PASS[*]}" + [[ ${#PASS[@]} -gt 0 ]] && echo "Synced: ${PASS[*]}" echo "$ICON_ERROR Failed: ${FAIL[*]}" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" notify "Critical sync failed on $(hostname) ($MY_ID) — ${FAIL[*]}" \ "Critical Sync" "warning" exit 1 else - log "Critical sync complete — $MY_ID — ${DURATION} — ${#PASS[@]} share(s)" + echo "Critical sync complete — $MY_ID — ${DURATION} — ${#PASS[@]} share(s)" fi exit 0 \ No newline at end of file diff --git a/Orchestrators/daily_sync_maintenance.sh b/Orchestrators/daily_sync_maintenance.sh index 017f783..107bb80 100644 --- a/Orchestrators/daily_sync_maintenance.sh +++ b/Orchestrators/daily_sync_maintenance.sh @@ -213,7 +213,7 @@ echo "━━━ $ICON_SYNC Arr Sync ━━━" ARR_SYNC_SCRIPT="$SCRIPTS_ROOT/Media/arr_sync.sh" if [[ "${ARR_SYNC_ENABLED:-true}" != "true" ]]; then - log "ARR_SYNC_ENABLED=false — skipping" + echo "ARR_SYNC_ENABLED=false — skipping" elif [[ ! -f "$ARR_SYNC_SCRIPT" ]]; then warn "arr_sync.sh not found at $ARR_SYNC_SCRIPT — skipping" JOB_FAIL+=("arr_sync.sh") @@ -221,7 +221,7 @@ else _arr_sync_args=() [[ "$DRY_RUN" == true ]] && _arr_sync_args+=("--dry-run") if bash "$ARR_SYNC_SCRIPT" "${_arr_sync_args[@]}"; then - log "Arr sync complete ✅" + echo "Arr sync complete ✅" JOB_PASS+=("arr_sync.sh") else warn "Arr sync completed with errors — continuing to rsync" @@ -354,7 +354,7 @@ if [[ "$TOTAL_FAIL" -gt 0 ]]; then echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" exit 1 else - log "$ICON_DONE Status: all complete — ${#PASS[@]} share(s) synced, ${#JOB_PASS[@]} job(s) run" + echo "$ICON_DONE Status: all complete — ${#PASS[@]} share(s) synced, ${#JOB_PASS[@]} job(s) run" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" exit 0 fi \ No newline at end of file diff --git a/Orchestrators/intermediate_sync_maintenance.sh b/Orchestrators/intermediate_sync_maintenance.sh index 67230e8..2113af9 100644 --- a/Orchestrators/intermediate_sync_maintenance.sh +++ b/Orchestrators/intermediate_sync_maintenance.sh @@ -162,7 +162,7 @@ echo "━━━ $ICON_SYNC Arr Sync ━━━" ARR_SYNC_SCRIPT="$SCRIPTS_ROOT/Media/arr_sync.sh" if [[ "${ARR_SYNC_ENABLED:-true}" != "true" ]]; then - log "ARR_SYNC_ENABLED=false — skipping" + echo "ARR_SYNC_ENABLED=false — skipping" elif [[ ! -f "$ARR_SYNC_SCRIPT" ]]; then warn "arr_sync.sh not found at $ARR_SYNC_SCRIPT — skipping" JOB_FAIL+=("arr_sync.sh") @@ -170,7 +170,7 @@ else _arr_sync_args=() [[ "$DRY_RUN" == true ]] && _arr_sync_args+=("--dry-run") if bash "$ARR_SYNC_SCRIPT" "${_arr_sync_args[@]}"; then - log "Arr sync complete ✅" + echo "Arr sync complete ✅" JOB_PASS+=("arr_sync.sh") else warn "Arr sync completed with errors — continuing" @@ -192,8 +192,8 @@ SHARE_INDEX=0 ABORT_ALL_SYNCS=false if [[ "$SHARE_COUNT" -eq 0 ]]; then - log "No INTERMEDIATE_SYNC_SHARES configured — skipping" - log "Add shares to INTERMEDIATE_SYNC_SHARES in master.conf to enable mid-day sync" + echo "No INTERMEDIATE_SYNC_SHARES configured — skipping" + echo "Add shares to INTERMEDIATE_SYNC_SHARES in master.conf to enable mid-day sync" elif ! check_rsync_enabled "INTERMEDIATE"; then warn "Intermediate rsync disabled — skipping all $SHARE_COUNT share sync(s)" else @@ -300,7 +300,7 @@ TOTAL_FAIL=$(( ${#FAIL[@]} + ${#JOB_FAIL[@]} )) if [[ "$DRY_RUN" == true ]]; then warn "DRY RUN — no changes made" elif [[ "$TOTAL_FAIL" -eq 0 ]]; then - log "$ICON_DONE Status: all complete ✅ — ${#JOB_PASS[@]} job(s) run, ${#PASS[@]}/$SHARE_COUNT share(s) synced" + echo "$ICON_DONE Status: all complete ✅ — ${#JOB_PASS[@]} job(s) run, ${#PASS[@]}/$SHARE_COUNT share(s) synced" else warn "Status: $TOTAL_FAIL failure(s)" notify "Intermediate sync failed on $(hostname) ($MY_ID) — shares: ${#FAIL[@]}/$SHARE_COUNT failed, jobs: ${#JOB_FAIL[@]} failed" \ diff --git a/Orchestrators/sunday_morning_coffee_report.sh b/Orchestrators/sunday_morning_coffee_report.sh index 9d83f70..d4f56e6 100644 --- a/Orchestrators/sunday_morning_coffee_report.sh +++ b/Orchestrators/sunday_morning_coffee_report.sh @@ -860,7 +860,7 @@ else NOTIFY_SCRIPT="/usr/local/emhttp/plugins/dynamix/scripts/notify" if [[ -x "$NOTIFY_SCRIPT" ]]; then "$NOTIFY_SCRIPT" -s "☕ Weekly Report — $MY_ID" -d "$BODY" -i "normal" 2>/dev/null - log "unRAID notification sent" + echo "unRAID notification sent" fi fi if [[ -n "${DISCORD_WEBHOOK:-}" ]]; then @@ -871,8 +871,8 @@ else PAYLOAD="{\"content\": ${ESCAPED_BODY}}" curl -sf -H "Content-Type: application/json" \ -d "$PAYLOAD" "$DISCORD_WEBHOOK" >/dev/null 2>&1 && \ - log "Discord notification sent" || \ + echo "Discord notification sent" || \ warn "Discord notification failed" fi - log "Report generated — $MY_ID — ${#ISSUES[@]} issue(s) ${#FINDINGS[@]} finding(s)" + echo "Report generated — $MY_ID — ${#ISSUES[@]} issue(s) ${#FINDINGS[@]} finding(s)" fi \ No newline at end of file diff --git a/Orchestrators/watchdog_orchestrator.sh b/Orchestrators/watchdog_orchestrator.sh index 166f93a..aed670a 100755 --- a/Orchestrators/watchdog_orchestrator.sh +++ b/Orchestrators/watchdog_orchestrator.sh @@ -87,7 +87,7 @@ if [[ "$SHOW_STATUS" == true ]]; then if [[ "$UPTIME_S" -lt "$WATCHDOG_STARTUP_GRACE" ]]; then warn "Within startup grace — $(format_duration $UPTIME_S) / $(format_duration $WATCHDOG_STARTUP_GRACE)" else - log "Past startup grace — $(format_duration $UPTIME_S) uptime" + echo "Past startup grace — $(format_duration $UPTIME_S) uptime" fi echo "" diff --git a/Orchestrators/weekly_sync_maintenance.sh b/Orchestrators/weekly_sync_maintenance.sh index b066416..d4d86a7 100644 --- a/Orchestrators/weekly_sync_maintenance.sh +++ b/Orchestrators/weekly_sync_maintenance.sh @@ -231,7 +231,7 @@ if [[ "$WEEKLY_SYNC_UPDATES" == true ]]; then done fi else - log "WEEKLY_SYNC_UPDATES=false — skipping local updates" + echo "WEEKLY_SYNC_UPDATES=false — skipping local updates" fi if [[ "$WEEKLY_SYNC_UPDATES_REMOTE" == true ]]; then @@ -261,7 +261,7 @@ if [[ "$WEEKLY_SYNC_UPDATES_REMOTE" == true ]]; then done fi else - log "WEEKLY_SYNC_UPDATES_REMOTE=false — skipping remote updates" + echo "WEEKLY_SYNC_UPDATES_REMOTE=false — skipping remote updates" fi # ============================================================================================== @@ -352,7 +352,7 @@ else _remainder_args=("--remainder") [[ "$DRY_RUN" == true ]] && _remainder_args+=("--dry-run") if bash "$DOCKER_UPDATE_SCRIPT" "${_remainder_args[@]}"; then - log "Remainder updates complete ✅" + echo "Remainder updates complete ✅" JOB_PASS+=("docker_update.sh --remainder") else warn "Remainder updates completed with errors" @@ -392,7 +392,7 @@ echo "" if [[ "$DRY_RUN" == true ]]; then warn "DRY RUN — no changes made" elif [[ "$TOTAL_FAIL" -eq 0 ]]; then - log "$ICON_DONE Status: all complete ✅ — ${#PASS[@]} share(s) synced, ${#JOB_PASS[@]} job(s) run" + echo "$ICON_DONE Status: all complete ✅ — ${#PASS[@]} share(s) synced, ${#JOB_PASS[@]} job(s) run" else warn "Status: $TOTAL_FAIL failure(s)" notify "Weekly maintenance failed on $(hostname) ($MY_ID) — sync: ${#FAIL[@]}/$SHARE_COUNT failed, jobs: ${#JOB_FAIL[@]} failed" \