mirror of
https://github.com/TZERO78/kopi-docka.git
synced 2026-06-19 07:37:12 +00:00
1d044b2220
- KopiaCommandError: replaces bare RuntimeError in _run(), carries returncode + stderr_tail (UTF-8 safe) - is_connected(force_refresh=True): bypasses 60s cache for pre-flight check; negative result also cached - BackendUnreachableError: new exception in backends/base.py (subclass of ConnectionError) - Pre-flight backend check in backup_unit() before container teardown; containers NOT stopped on failure - BackupErrorDetail dataclass in types.py; BackupMetadata.error_details persisted in JSON (backward-compat) - Verbose failure notifications: phase, exit code, stderr tail in fenced code block (Markdown-injection-safe) - Markdown body_format for all Apprise sends; services without Markdown degrade gracefully - send_connectivity_alert() and send_missed_backup_alert() added to NotificationManager - MissedBackupChecker: time-based overdue detection using MetadataReader; per-unit threshold overrides - Post-run missed-backup check after every backup_unit(); alert suppression via missed_state.json - Doctor section 8 "Backup Freshness": age per unit, OVERDUE units highlighted - Config: notifications.verbose, notifications.preflight_check, alerting.missed_backup.* - Config templates and examples updated; migration guide in INSTALLATION.md Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
68 lines
1.5 KiB
JSON
68 lines
1.5 KiB
JSON
{
|
|
"version": "3.0",
|
|
"kopia": {
|
|
"kopia_params": "filesystem --path /backup/kopia-repository",
|
|
"password": "CHANGE_ME_use_kopi-docka_new-config_wizard",
|
|
"password_file": null,
|
|
"compression": "zstd",
|
|
"encryption": "AES256-GCM-HMAC-SHA256",
|
|
"cache_directory": "/var/cache/kopi-docka"
|
|
},
|
|
"backup": {
|
|
"base_path": "/backup/kopi-docka",
|
|
"parallel_workers": "auto",
|
|
"stop_timeout": 30,
|
|
"start_timeout": 60,
|
|
"task_timeout": 0,
|
|
"update_recovery_bundle": true,
|
|
"recovery_bundle_path": "/backup/recovery",
|
|
"recovery_bundle_retention": 3,
|
|
"exclude_patterns": [
|
|
"*.log",
|
|
"*.tmp",
|
|
"cache/*"
|
|
],
|
|
"hooks": {
|
|
"pre_backup": "/opt/hooks/pre-backup.sh",
|
|
"post_backup": "/opt/hooks/post-backup.sh",
|
|
"pre_restore": null,
|
|
"post_restore": null
|
|
}
|
|
},
|
|
"docker": {
|
|
"socket": "/var/run/docker.sock",
|
|
"compose_timeout": 300
|
|
},
|
|
"retention": {
|
|
"latest": 10,
|
|
"hourly": 0,
|
|
"daily": 7,
|
|
"weekly": 4,
|
|
"monthly": 12,
|
|
"annual": 3
|
|
},
|
|
"logging": {
|
|
"level": "INFO",
|
|
"file": "/var/log/kopi-docka.log",
|
|
"max_size_mb": 100,
|
|
"backup_count": 5
|
|
},
|
|
"notifications": {
|
|
"enabled": false,
|
|
"service": null,
|
|
"url": null,
|
|
"secret_file": null,
|
|
"on_success": true,
|
|
"on_failure": true,
|
|
"verbose": true,
|
|
"preflight_check": true
|
|
},
|
|
"alerting": {
|
|
"missed_backup": {
|
|
"enabled": true,
|
|
"max_age_hours": 26,
|
|
"per_unit": {}
|
|
}
|
|
}
|
|
}
|