From 186d5de9744125e139c4bd404565ddbacd1a3cb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Tue, 6 May 2025 17:35:56 +0200 Subject: [PATCH] fix: velero date and long files --- backup.sh | 89 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 65 insertions(+), 24 deletions(-) diff --git a/backup.sh b/backup.sh index 5fe5728..7de235d 100755 --- a/backup.sh +++ b/backup.sh @@ -10,18 +10,43 @@ summarize_save_log() { [[ ! -f "$file" ]] && return - local date=$(grep -oP '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}' "$file" | head -n1) - local source=$(grep ' => ' "$file" | cut -d' ' -f1 | tail -n1) - local total_checks=$(grep -oP 'Checks:\s+\K[0-9]+' "$file" | tail -n1) - local total_transferred=$(grep -oP 'Transferred:\s+\K[0-9]+' "$file" | tail -n1) - local total_size=$(grep -oP 'Transferred:\s+\K[\d.]+\s+\w+ / [\d.]+\s+\w+' "$file" | tail -n1) - local elapsed=$(grep -oP 'Elapsed time:\s+\K[0-9m\.s]+' "$file" | tail -n1) + # On prend d'abord les 100 premières lignes puis les 1000 dernières + local snippet + snippet=$( { head -n100 "$file"; tail -n1000 "$file"; } ) + + # On travaille sur ce snippet pour extraire date / source / etc. + local date source total_checks total_transferred total_size elapsed + + date=$(printf "%s\n" "$snippet" \ + | grep -oP '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}' \ + | head -n1) + + source=$(printf "%s\n" "$snippet" \ + | grep ' => ' \ + | awk '{print $1}' \ + | tail -n1) + + total_checks=$(printf "%s\n" "$snippet" \ + | grep -oP 'Checks:\s*\K[0-9]+' \ + | tail -n1) + + total_transferred=$(printf "%s\n" "$snippet" \ + | grep -oP 'Transferred:\s*\K[0-9]+' \ + | tail -n1) + + total_size=$(printf "%s\n" "$snippet" \ + | grep -oP 'Transferred:\s*\K[\d.]+\s+\w+\s*/\s*[\d.]+\s+\w+' \ + | tail -n1) + + elapsed=$(printf "%s\n" "$snippet" \ + | grep -oP 'Elapsed time:\s*\K[0-9m\.s]+' \ + | tail -n1) STR+="${emoji} **${label}**\n" - [[ -n "$date" ]] && STR+=" Date : ${date}\n" - [[ -n "$source" ]] && STR+=" Source : ${source}\n" + [[ -n "$date" ]] && STR+=" Date : ${date}\n" + [[ -n "$source" ]] && STR+=" Source : ${source}\n" [[ -n "$total_checks" ]] && STR+=" Checks : ${total_checks}\n" - [[ -n "$total_transferred" ]] && STR+=" Files : ${total_transferred}\n" + [[ -n "$total_transferred" ]]&& STR+=" Files : ${total_transferred}\n" [[ -n "$total_size" ]] && STR+=" Size : ${total_size}\n" [[ -n "$elapsed" ]] && STR+=" Time : ${elapsed}\n" STR+="\n" @@ -71,34 +96,50 @@ summarize_backup_log() { STR+="\n" } +# Fonction pour résumer l’état d’un backup Velero summarize_velero() { - local label="$1" emoji="$2" file="$3" - [[ ! -f "$file" ]] && return + local label="$1" + local emoji="$2" + local backup_name="$3" + + # On récupère la description du backup + local desc + if ! desc=$(cat /var/log/velero.log 2>/dev/null); then + STR+="🚨 **${label}** - impossible d’interroger velero\n\n" + return + fi + + # On extrait la ligne « Completed: YYYY-MM-DD HH:MM:SS ... » + local completed_raw completed + completed_raw=$(printf "%s\n" "$desc" | grep '^Completed:' | head -n1 | sed 's/^Completed:[[:space:]]*//') + # On tronque pour ne garder date+heure sans fuseau + completed=$(printf "%s\n" "$completed_raw" | awk '{printf "%s %s", $1, $2}') + + # On peut aussi extraire Totals et Phase si besoin… + local total_items items_backed + total_items=$(printf "%s\n" "$desc" | grep 'Total items to be backed up' | awk '{print $NF}') + items_backed=$(printf "%s\n" "$desc" | grep '^Items backed up' | awk '{print $NF}') STR+="${emoji} **${label}**\n" - # grab totals and phase - local total backed phase - total=$(grep 'Total items to be backed up' "$file" | awk '{print $NF}') - backed=$(grep '^Items backed up' "$file" | awk '{print $NF}') - phase=$(grep '^Phase:' "$file" | awk '{print $2}') - [[ -n "$total" ]] && STR+=" Total : ${total}\n" - [[ -n "$backed" ]] && STR+=" Backed: ${backed}\n" - [[ -n "$phase" ]] && STR+=" Phase : ${phase}\n\n" + [[ -n "$completed" ]] && STR+=" Completed : ${completed}\n" + [[ -n "$total_items" ]] && STR+=" Total : ${total_items}\n" + [[ -n "$items_backed" ]]&& STR+=" Backed : ${items_backed}\n" + STR+="\n" } - +export KUBECONFIG="/var/snap/microk8s/current/credentials/client.config" summarize_save_log "Copy 1" "💾" "/var/log/save.log" summarize_save_log "Copy 2" "💾" "/var/log/save2.log" summarize_save_log "Copy 3" "💾" "/var/log/save3.log" summarize_backup_log "Back 1" "📼" "/var/log/backup.log" summarize_backup_log "Back 2" "📼" "/var/log/backup2.log" summarize_backup_log "Back 3" "📼" "/var/log/backup3.log" -/home/user/scripts/admin.sh velero info backup-complet-cluster2-$(cat /var/log/lastfilename) > /var/log/velero.log +/home/user/scripts/admin.sh velero info backup-complet-cluster2-$(cat /var/log/lastfilename) > /var/log/velero.log 2>&1 summarize_velero "Velero" "📦" "/var/log/velero.log" # Nettoyage des caractères ANSI éventuels STR=$(echo -e "$STR" | sed -r 's/\x1B\[[0-9;]*[a-zA-Z]//g') -#echo -en "$STR" +echo -en "$STR" # Envoi de la requête POST avec la chaîne formatée -curl -X POST https://n8n.kube.ia86.cc/webhook/6f4afe18-8d4c-485a-90d0-b0e4f6243d77 \ - --data-urlencode "save=${STR}" +#curl -X POST https://n8n.kube.ia86.cc/webhook/6f4afe18-8d4c-485a-90d0-b0e4f6243d77 \ +# --data-urlencode "save=${STR}"