Files
miyagi-backup-v3/lib/pbs-status.sh
T

104 lines
3.2 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.
#!/usr/bin/env bash
# Eigenständiges Script: schreibt PBS-Backup-Status als lokale Check_MK-Spooldatei.
# Wird von miyagi-backup.sh (write_pbs_status()) als eigener Prozess aufgerufen.
# Erwartet folgende Umgebungsvariablen: PBSHOST, BACKUPSTOREPBS, PBS_REPO_USER,
# PBS_PASSWORD, PBSBACKUP_STATUS (optional), SPOOL_MAXAGE_PBS_STATUS (optional).
set -uo pipefail
IFS=$'\n\t'
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
}
epoch_to_str() {
local epoch="$1"
case "$(uname -s)" in
FreeBSD) date -r "$epoch" "+%Y-%m-%d %H:%M:%S" ;;
*) date -d "@$epoch" "+%Y-%m-%d %H:%M:%S" ;;
esac
}
if [[ -z "${SPOOL_MAXAGE_PBS_STATUS:-}" ]]; then
log "SPOOL_MAXAGE_PBS_STATUS nicht gesetzt – PBS-Status-Ausgabe übersprungen."
exit 1
fi
spool_file="/var/lib/check_mk_agent/spool/${SPOOL_MAXAGE_PBS_STATUS}_checkpbs_local"
repo="${PBS_REPO_USER:-}@${PBSHOST:-}:${BACKUPSTOREPBS:-}"
if ! command -v proxmox-backup-client >/dev/null 2>&1; then
log "proxmox-backup-client nicht installiert – PBS-Status-Ausgabe übersprungen."
exit 0
fi
if [[ -z "${PBS_REPO_USER:-}" || -z "${PBS_PASSWORD:-}" ]]; then
log "PBS_REPO_USER oder PBS_PASSWORD nicht gesetzt – PBS-Status-Ausgabe übersprungen."
exit 1
fi
tmpfile=$(mktemp)
echo "<<<local>>>" > "$tmpfile"
now=$(date +%s)
# === Schwellenwert(e) parsen ===
warn_threshold=0
crit_threshold=86400 # Default kritisch ab 24h
if [[ -n "${PBSBACKUP_STATUS:-}" ]]; then
IFS=',' read -r t1 t2 <<< "$PBSBACKUP_STATUS"
if [[ "$t1" =~ ^[0-9]+$ && -z "$t2" ]]; then
# Nur ein Wert vorhanden
crit_threshold=$t1
log "Verwende einfachen Schwellenwert: CRIT=${crit_threshold}s"
elif [[ "$t1" =~ ^[0-9]+$ && "$t2" =~ ^[0-9]+$ ]]; then
warn_threshold=$t1
crit_threshold=$t2
log "Verwende gestaffelte Schwellenwerte: WARN=${warn_threshold}s, CRIT=${crit_threshold}s"
else
log "WARNUNG: Ungültiges PBSBACKUP_STATUS-Format – Fallback: CRIT=${crit_threshold}s"
fi
fi
# Backup-Daten extrahieren (direkt vom Skript-Host gegen PBSHOST, mit PBS_PASSWORD authentifiziert)
PBS_PASSWORD="$PBS_PASSWORD" proxmox-backup-client list --repository "$repo" --output-format json 2>/dev/null | \
grep -E '"backup-id"|"backup-type"|"backup-time"' | \
sed -E 's/[",]//g; s/^ *//' > "$tmpfile.json"
backup_type="" backup_id="" backup_time=""
while read -r line; do
case "$line" in
backup-type:*)
backup_type="${line#*: }"
;;
backup-id:*)
backup_id="${line#*: }"
;;
backup-time:*)
backup_time="${line#*: }"
if [[ -n "$backup_type" && -n "$backup_id" && -n "$backup_time" ]]; then
age=$((now - backup_time))
timestamp=$(epoch_to_str "$backup_time")
if (( age < warn_threshold )); then
status=0
elif (( age < crit_threshold )); then
status=1
else
status=2
fi
msg="$backup_type/$backup_id last backup $timestamp (age: $((age / 3600))h)"
echo "$status PBS_${backup_type}_${backup_id} - $msg" >> "$tmpfile"
# Reset
backup_type="" backup_id="" backup_time=""
fi
;;
esac
done < "$tmpfile.json"
rm -f "$tmpfile.json"
mv "$tmpfile" "$spool_file"
log "PBS Backup Status lokal geschrieben: $spool_file"