{
"event": "PreToolUse",
"tool_name": "Write",
"tool_input": {
"file_path": "\/var\/www\/scripts\/verify-prod-backup.sh",
"content": "#!\/bin\/bash\n# Verifikation: Prueft ob Prod-Backup vollstaendig angekommen ist\n# Laeuft taeglich um 08:00 auf ki\/st\n\nBACKUP_DIR=\"\/backup\/prod\/daily\/$(date +%Y-%m-%d)\"\nMAIL_TO=\"i@karlkratz.de\"\nERRORS=()\n\n# 1. Backup-Verzeichnis vorhanden?\nif [ ! -d \"$BACKUP_DIR\" ]; then\n echo \"ALARM: Kein Prod-Backup fuer heute ($(date +%Y-%m-%d)) gefunden!\" \\\n | mail -s \"[BACKUP ALARM] Prod-Backup fehlt $(date +%Y-%m-%d)\" \"$MAIL_TO\"\n exit 1\nfi\n\n# 2. Mindestanzahl DB-Dumps\nDB_COUNT=$(find \"$BACKUP_DIR\/databases\/mariadb\/\" -name \"*.sql.gz\" 2>\/dev\/null | wc -l)\nif [ \"$DB_COUNT\" -lt 40 ]; then\n ERRORS+=(\"Nur $DB_COUNT DB-Dumps (erwartet: 45+)\")\nfi\n\n# 3. Redis-Dump vorhanden?\nif [ ! -f \"$BACKUP_DIR\/databases\/redis\/dump.rdb.gz\" ]; then\n ERRORS+=(\"Redis-Dump fehlt\")\nfi\n\n# 4. Qdrant-Snapshots vorhanden?\nQDRANT_COUNT=$(find \"$BACKUP_DIR\/databases\/qdrant\/\" -name \"*.snapshot\" 2>\/dev\/null | wc -l)\nif [ \"$QDRANT_COUNT\" -lt 10 ]; then\n ERRORS+=(\"Nur $QDRANT_COUNT Qdrant-Snapshots (erwartet: 80+)\")\nfi\n\n# 5. Mail-Backup vorhanden?\nif [ ! -f \"$BACKUP_DIR\/mail\/vmail.tar.gz\" ]; then\n ERRORS+=(\"vmail-Backup fehlt\")\nfi\n\n# 6. Configs vorhanden?\nCONFIG_COUNT=$(find \"$BACKUP_DIR\/configs\/\" -name \"*.tar.gz\" 2>\/dev\/null | wc -l)\nif [ \"$CONFIG_COUNT\" -lt 10 ]; then\n ERRORS+=(\"Nur $CONFIG_COUNT Config-Archive (erwartet: 15+)\")\nfi\n\n# 7. Credentials vorhanden?\nif [ ! -f \"$BACKUP_DIR\/credentials\/credentials.tar.gz.gpg\" ] && [ ! -f \"$BACKUP_DIR\/credentials\/credentials.tar.gz\" ]; then\n ERRORS+=(\"Credentials-Backup fehlt\")\nfi\n\n# 8. Speicherplatz-Check\nFREE_GB=$(df \/backup --output=avail | tail -1 | awk '{print int($1\/1024\/1024)}')\nif [ \"$FREE_GB\" -lt 100 ]; then\n ERRORS+=(\"Nur noch ${FREE_GB} GB frei auf \/backup\/\")\nfi\n\n# Ergebnis\nif [ ${#ERRORS[@]} -gt 0 ]; then\n error_text=$(printf '- %s\\n' \"${ERRORS[@]}\")\n echo -e \"Prod-Backup Verifikation: ${#ERRORS[@]} Probleme\\n\\n${error_text}\\n\\nBackup-Dir: $BACKUP_DIR\" \\\n | mail -s \"[BACKUP WARNUNG] Unvollstaendiges Prod-Backup $(date +%Y-%m-%d)\" \"$MAIL_TO\"\n exit 1\nfi\n\nexit 0\n"
}
}
{
"tool_response": {
"type": "create",
"filePath": "\/var\/www\/scripts\/verify-prod-backup.sh",
"content": "#!\/bin\/bash\n# Verifikation: Prueft ob Prod-Backup vollstaendig angekommen ist\n# Laeuft taeglich um 08:00 auf ki\/st\n\nBACKUP_DIR=\"\/backup\/prod\/daily\/$(date +%Y-%m-%d)\"\nMAIL_TO=\"i@karlkratz.de\"\nERRORS=()\n\n# 1. Backup-Verzeichnis vorhanden?\nif [ ! -d \"$BACKUP_DIR\" ]; then\n echo \"ALARM: Kein Prod-Backup fuer heute ($(date +%Y-%m-%d)) gefunden!\" \\\n | mail -s \"[BACKUP ALARM] Prod-Backup fehlt $(date +%Y-%m-%d)\" \"$MAIL_TO\"\n exit 1\nfi\n\n# 2. Mindestanzahl DB-Dumps\nDB_COUNT=$(find \"$BACKUP_DIR\/databases\/mariadb\/\" -name \"*.sql.gz\" 2>\/dev\/null | wc -l)\nif [ \"$DB_COUNT\" -lt 40 ]; then\n ERRORS+=(\"Nur $DB_COUNT DB-Dumps (erwartet: 45+)\")\nfi\n\n# 3. Redis-Dump vorhanden?\nif [ ! -f \"$BACKUP_DIR\/databases\/redis\/dump.rdb.gz\" ]; then\n ERRORS+=(\"Redis-Dump fehlt\")\nfi\n\n# 4. Qdrant-Snapshots vorhanden?\nQDRANT_COUNT=$(find \"$BACKUP_DIR\/databases\/qdrant\/\" -name \"*.snapshot\" 2>\/dev\/null | wc -l)\nif [ \"$QDRANT_COUNT\" -lt 10 ]; then\n ERRORS+=(\"Nur $QDRANT_COUNT Qdrant-Snapshots (erwartet: 80+)\")\nfi\n\n# 5. Mail-Backup vorhanden?\nif [ ! -f \"$BACKUP_DIR\/mail\/vmail.tar.gz\" ]; then\n ERRORS+=(\"vmail-Backup fehlt\")\nfi\n\n# 6. Configs vorhanden?\nCONFIG_COUNT=$(find \"$BACKUP_DIR\/configs\/\" -name \"*.tar.gz\" 2>\/dev\/null | wc -l)\nif [ \"$CONFIG_COUNT\" -lt 10 ]; then\n ERRORS+=(\"Nur $CONFIG_COUNT Config-Archive (erwartet: 15+)\")\nfi\n\n# 7. Credentials vorhanden?\nif [ ! -f \"$BACKUP_DIR\/credentials\/credentials.tar.gz.gpg\" ] && [ ! -f \"$BACKUP_DIR\/credentials\/credentials.tar.gz\" ]; then\n ERRORS+=(\"Credentials-Backup fehlt\")\nfi\n\n# 8. Speicherplatz-Check\nFREE_GB=$(df \/backup --output=avail | tail -1 | awk '{print int($1\/1024\/1024)}')\nif [ \"$FREE_GB\" -lt 100 ]; then\n ERRORS+=(\"Nur noch ${FREE_GB} GB frei auf \/backup\/\")\nfi\n\n# Ergebnis\nif [ ${#ERRORS[@]} -gt 0 ]; then\n error_text=$(printf '- %s\\n' \"${ERRORS[@]}\")\n echo -e \"Prod-Backup Verifikation: ${#ERRORS[@]} Probleme\\n\\n${error_text}\\n\\nBackup-Dir: $BACKUP_DIR\" \\\n | mail -s \"[BACKUP WARNUNG] Unvollstaendiges Prod-Backup $(date +%Y-%m-%d)\" \"$MAIL_TO\"\n exit 1\nfi\n\nexit 0\n",
"structuredPatch": [],
"originalFile": null
}
}