added a toggle to check disk for pool only shares
This commit is contained in:
@@ -0,0 +1,175 @@
|
||||
#!/bin/bash
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
# --------------------------------- Media Management Orchestrator ------------------------------
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
# Runs all media maintenance scripts sequentially in the order defined in Master.conf.
|
||||
# Each job in MEDIA_MAINTENANCE_JOBS is a script path with an optional argument.
|
||||
# Scripts are resolved relative to the ecosystem root directory.
|
||||
#
|
||||
# To add a new job — edit MEDIA_MAINTENANCE_JOBS in Master.conf:
|
||||
# "Media/my_new_script.sh" — script with no argument
|
||||
# "Media/media_cleaner.sh profile" — script with argument
|
||||
#
|
||||
# Order matters — permissions runs before cleaners so files are correctly owned first.
|
||||
# Each job runs independently — a failure in one does not stop the others.
|
||||
# Supports --dry-run — passes through to all child scripts.
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
ECOSYSTEM_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
|
||||
source "$ECOSYSTEM_ROOT/Master.conf"
|
||||
source "$ECOSYSTEM_ROOT/common.sh"
|
||||
|
||||
parse_args "$@"
|
||||
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
# ━━━ $ICON_GEAR Setup ━━━
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
echo ""
|
||||
echo "━━━ $ICON_GEAR Setup ━━━"
|
||||
|
||||
if [[ "$EUID" -ne 0 ]]; then
|
||||
error "Must be run as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
success "Running as root"
|
||||
[[ "$DRY_RUN" == true ]] && warn "DRY RUN — passing --dry-run to all child scripts"
|
||||
|
||||
# Validate job list
|
||||
if [[ ${#MEDIA_MAINTENANCE_JOBS[@]} -eq 0 ]]; then
|
||||
warn "MEDIA_MAINTENANCE_JOBS is empty in Master.conf — nothing to run"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
# ━━━ $ICON_SUMMARY Status ━━━
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
if [[ "$SHOW_STATUS" == true ]]; then
|
||||
echo ""
|
||||
echo "━━━━━ $ICON_SUMMARY STATUS ━━━━━"
|
||||
echo "$ICON_CLEAN Jobs to run: ${#MEDIA_MAINTENANCE_JOBS[@]}"
|
||||
local_idx=1
|
||||
for job in "${MEDIA_MAINTENANCE_JOBS[@]}"; do
|
||||
echo " $local_idx. $job"
|
||||
((local_idx++))
|
||||
done
|
||||
echo "$ICON_GEAR Dry Run: $DRY_RUN"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
# Tracking
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
PASS=()
|
||||
FAIL=()
|
||||
JOB_TIMES=()
|
||||
TOTAL_START=$(date +%s)
|
||||
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
# JOB RUNNER
|
||||
# Splits each MEDIA_MAINTENANCE_JOBS entry into script path + optional argument.
|
||||
# Resolves script relative to ecosystem root. Passes --dry-run if active.
|
||||
# Records pass/fail and duration for summary.
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
run_job() {
|
||||
local entry="$1"
|
||||
|
||||
# Split entry into script path and optional argument
|
||||
local script_rel arg=""
|
||||
read -r script_rel arg <<< "$entry"
|
||||
|
||||
local script="$ECOSYSTEM_ROOT/$script_rel"
|
||||
local label
|
||||
label="$(basename "$script_rel" .sh)${arg:+ $arg}"
|
||||
|
||||
local job_start
|
||||
job_start=$(date +%s)
|
||||
|
||||
echo ""
|
||||
echo "━━━ $ICON_CLEAN $label ━━━"
|
||||
|
||||
if [[ ! -f "$script" ]]; then
|
||||
error "$script not found — skipping"
|
||||
FAIL+=("$label")
|
||||
JOB_TIMES+=("$label:0")
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ ! -x "$script" ]]; then
|
||||
warn "$script is not executable — attempting to fix"
|
||||
chmod +x "$script"
|
||||
fi
|
||||
|
||||
local dry_flag=""
|
||||
[[ "$DRY_RUN" == true ]] && dry_flag="--dry-run"
|
||||
|
||||
# Run script with optional argument and optional dry-run flag
|
||||
if bash "$script" $arg $dry_flag; then
|
||||
local job_end
|
||||
job_end=$(date +%s)
|
||||
PASS+=("$label")
|
||||
JOB_TIMES+=("$label:$((job_end - job_start))")
|
||||
success "$label complete"
|
||||
else
|
||||
local job_end
|
||||
job_end=$(date +%s)
|
||||
FAIL+=("$label")
|
||||
JOB_TIMES+=("$label:$((job_end - job_start))")
|
||||
error "$label failed — continuing to next job"
|
||||
fi
|
||||
}
|
||||
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
# ━━━ $ICON_CLEAN Media Management ━━━
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
echo ""
|
||||
echo "━━━ $ICON_CLEAN Media Management — $(date '+%Y-%m-%d %H:%M:%S') ━━━"
|
||||
echo "$ICON_SUMMARY Jobs: ${#MEDIA_MAINTENANCE_JOBS[@]}"
|
||||
echo ""
|
||||
|
||||
JOB_INDEX=1
|
||||
for job in "${MEDIA_MAINTENANCE_JOBS[@]}"; do
|
||||
info "Job $JOB_INDEX of ${#MEDIA_MAINTENANCE_JOBS[@]}: $job"
|
||||
run_job "$job"
|
||||
((JOB_INDEX++))
|
||||
done
|
||||
|
||||
TOTAL_END=$(date +%s)
|
||||
TOTAL_DURATION=$((TOTAL_END - TOTAL_START))
|
||||
JOB_COUNT=$(( ${#PASS[@]} + ${#FAIL[@]} ))
|
||||
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
# ━━━ $ICON_SUMMARY Summary ━━━
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
echo ""
|
||||
echo "━━━━━ $ICON_SUMMARY MEDIA MANAGEMENT SUMMARY ━━━━━"
|
||||
echo "$ICON_TIME Started: $(date -d @$TOTAL_START '+%Y-%m-%d %H:%M:%S')"
|
||||
echo "$ICON_TIME Finished: $(date -d @$TOTAL_END '+%Y-%m-%d %H:%M:%S')"
|
||||
echo ""
|
||||
|
||||
for entry in "${JOB_TIMES[@]}"; do
|
||||
label="${entry%%:*}"
|
||||
duration="${entry##*:}"
|
||||
if printf '%s\n' "${FAIL[@]}" | grep -qx "$label"; then
|
||||
echo " $ICON_ERROR $label — $(format_duration $duration)"
|
||||
else
|
||||
echo " $ICON_DONE $label — $(format_duration $duration)"
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo " $ICON_SUCCESS Passed: ${#PASS[@]}/$JOB_COUNT"
|
||||
echo " $ICON_ERROR Failed: ${#FAIL[@]}/$JOB_COUNT"
|
||||
echo " $ICON_TIME Duration: $(format_duration $TOTAL_DURATION)"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
|
||||
if [[ ${#FAIL[@]} -gt 0 ]]; then
|
||||
notify "Media management completed with failures on $(hostname) — failed: ${FAIL[*]}" "Media Management" "warning"
|
||||
exit 1
|
||||
else
|
||||
notify "Media management complete on $(hostname) — ${#PASS[@]}/$JOB_COUNT jobs in $(format_duration $TOTAL_DURATION)" "Media Management" "normal"
|
||||
exit 0
|
||||
fi
|
||||
Reference in New Issue
Block a user