#!/bin/bash
# irelydata retry-failed — докачка двух недостающих файлов после дауна сервера
# 2026-09-04: сервер ушёл в троттлинг/даун после ~66GB; ждём восстановления
set -u
OUTDIR=/root/ir-assessment/redteam/irelydata/downloads
LOG=$OUTDIR/retry_failed.log
cd "$OUTDIR" || exit 1
: > "$LOG"

URLS=(
  "https://ch4.hostserviceapp.com/leE3LVPB85/SCHAFERPROPANEUAP01_022824.bak"
  "https://ch4.hostserviceapp.com/zthfe9AsuI/FEHRENBACHEROILUAP01_INITIAL.bak"
)

for round in 1 2 3 4 5 6 7 8; do
    pending=0
    for url in "${URLS[@]}"; do
        fname="${url##*/}"
        # skip if server reports full size already on disk
        remote_size=$(timeout 60 curl -sI --max-time 50 "$url" | awk -F'[:\r]' '/^[Cc]ontent-[Ll]ength/{gsub(/ /,"",$2);print $2}')
        local_size=0; [ -f "$fname" ] && local_size=$(stat -c%s "$fname")
        if [ -n "$remote_size" ] && [ "$remote_size" -gt 0 ] && [ "$local_size" = "$remote_size" ]; then
            echo "=== $(date -Iseconds) COMPLETE $fname size=$local_size (matches remote)" >> "$LOG"
            continue
        fi
        pending=1
        echo "=== $(date -Iseconds) ROUND$round $fname local=$local_size remote=${remote_size:-NA}" >> "$LOG"
        timeout 7100 curl -fSL -C - --connect-timeout 60 --max-time 7000 \
            -o "$fname" "$url" >> "$LOG" 2>&1
        echo "=== $(date -Iseconds) ROUND$round $fname curl_rc=$? new_size=$(stat -c%s "$fname" 2>/dev/null || echo 0)" >> "$LOG"
    done
    [ "$pending" = "0" ] && break
    # exponential backoff: 2,4,8,16,32,60,60 min
    case $round in
        1) sleep 120 ;; 2) sleep 240 ;; 3) sleep 480 ;; 4) sleep 960 ;;
        5) sleep 1920 ;; *) sleep 3600 ;;
    esac
done

echo "=== $(date -Iseconds) HASHING-RETRY" >> "$LOG"
for url in "${URLS[@]}"; do fname="${url##*/}"; [ -f "$fname" ] && sha256sum "$fname"; done > "$OUTDIR/sha256_retry.txt" 2>>"$LOG"
echo "=== $(date -Iseconds) DONE-RETRY" >> "$LOG"
