backup-scripts/backup.sh

146 lines
5.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
STR="🏠${HOSTNAME}\n"
# Fonction pour résumer un log rclone avec espacement et emojis variés
summarize_save_log() {
local label="$1"
local emoji="$2"
local file="$3"
[[ ! -f "$file" ]] && return
# 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 "$total_checks" ]] && STR+=" Checks : ${total_checks}\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"
}
summarize_backup_log() {
local label="$1"
local emoji="$2"
local file="$3"
[[ ! -f "$file" ]] && return
if grep -q "unable to create lock in backend" "$file"; then
STR+="🚨 **${label}** - LOCK FAILURE\n Repository is already locked!\n\n"
return
fi
local snapshot=$(grep '^snapshot ' "$file" | awk '{print $2}' | tail -n1)
local date=$(awk -v snap="$snapshot" '$1 == snap {print $2 " " $3}' "$file" | tail -n1)
local source=$(grep ' => ' "$file" | awk '{print $1}' | tail -n1)
local files=$(awk '/^processed / {print $2}' "$file" | tail -n1)
local snapshot=$(grep '^snapshot ' "$file" | awk '{print $2}' | tail -n1)
STR+="${emoji} **${label}**\n"
[[ -n "$date" ]] && STR+=" Date : ${date}\n"
[[ -n "$source" ]] && STR+=" Source : ${source}\n"
[[ -n "$files" ]] && STR+=" Files : ${files}\n"
[[ -n "$snapshot" ]] && STR+=" Snapshot : ${snapshot}\n"
# Partie scan alignée
local scan=$(awk '
BEGIN {pad=" "}
/^Files: *[0-9]+ new/ {
print pad $0
getline; print pad $0
getline; print pad $0
getline; print pad $0
}
' "$file")
local added=$(grep '^Added to the repository:' "$file" | sed 's/^/ /')
if [[ -n "$scan$added" ]]; then
STR+="${scan}\n${added}\n"
fi
STR+="\n"
}
# Fonction pour résumer létat dun backup Velero
summarize_velero() {
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 dinterroger 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"
[[ -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 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"
# 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}"