Spaces:
Paused
Paused
| param( | |
| [int]$KeepCount = 10 | |
| ) | |
| $ProjectRoot = Split-Path -Parent $MyInvocation.MyCommand.Path | |
| $BackupRoot = Join-Path $ProjectRoot "backups" | |
| $DateStamp = Get-Date -Format "yyyyMMdd_HHmmss" | |
| $BackupDir = Join-Path $BackupRoot $DateStamp | |
| # Files to backup | |
| $DbFile = Join-Path (Join-Path $ProjectRoot "instance") "kpi_dashboard.db" | |
| $UploadsDir = Join-Path $ProjectRoot "uploads" | |
| Write-Host "=== KPI Dashboard Backup ===" -ForegroundColor Cyan | |
| Write-Host "Source: $ProjectRoot" | |
| Write-Host "Target: $BackupDir" | |
| Write-Host "" | |
| # Create backup directory | |
| New-Item -ItemType Directory -Path $BackupDir -Force | Out-Null | |
| # 1. Backup database | |
| if (Test-Path $DbFile) { | |
| Copy-Item -Path $DbFile -Destination (Join-Path $BackupDir "kpi_dashboard.db") | |
| Write-Host "[OK] Database backed up" -ForegroundColor Green | |
| } else { | |
| Write-Host "[WARN] Database not found: $DbFile" -ForegroundColor Yellow | |
| } | |
| # 2. Backup uploads | |
| if (Test-Path $UploadsDir) { | |
| $uploadDest = Join-Path $BackupDir "uploads" | |
| Copy-Item -Path $UploadsDir -Destination $uploadDest -Recurse | |
| Write-Host "[OK] Uploads backed up" -ForegroundColor Green | |
| } else { | |
| Write-Host "[WARN] Uploads directory not found" -ForegroundColor Yellow | |
| } | |
| # 3. Backup config and env | |
| $EnvExample = Join-Path $ProjectRoot ".env.example" | |
| if (Test-Path $EnvExample) { | |
| Copy-Item -Path $EnvExample -Destination (Join-Path $BackupDir ".env.example") | |
| } | |
| # 4. Clean up old backups (keep last $KeepCount) | |
| $AllBackups = Get-ChildItem -Path $BackupRoot -Directory | Sort-Object Name -Descending | |
| if ($AllBackups.Count -gt $KeepCount) { | |
| $ToRemove = $AllBackups | Select-Object -Skip $KeepCount | |
| foreach ($Dir in $ToRemove) { | |
| Remove-Item -Path $Dir.FullName -Recurse -Force | |
| Write-Host "[CLEAN] Removed old backup: $($Dir.Name)" -ForegroundColor DarkYellow | |
| } | |
| } | |
| # Summary | |
| $BackupSize = "{0:N2}" -f ((Get-ChildItem -Path $BackupDir -Recurse | Measure-Object -Property Length -Sum).Sum / 1KB) | |
| Write-Host "" | |
| Write-Host "Backup complete: $BackupDir ($BackupSize KB)" -ForegroundColor Cyan | |
| Write-Host "Total backups: $(@(Get-ChildItem -Path $BackupRoot -Directory).Count)" -ForegroundColor Cyan | |