docs: add full-stack runbook and one-click scripts
start-all/stop-all/health-check/test-cdc PowerShell scripts. Compatible with PowerShell 5.1 (ASCII only, no emoji).
This commit is contained in:
98
scripts/stop-all.ps1
Normal file
98
scripts/stop-all.ps1
Normal file
@@ -0,0 +1,98 @@
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Edu stop all application services script
|
||||
.DESCRIPTION
|
||||
Closes all edu-app-* terminal windows (started by start-all.ps1)
|
||||
Optional: kill processes by port (fallback when windows are closed but processes linger)
|
||||
.PARAMETER KillByPort
|
||||
Kill processes by port (fallback when windows are closed but processes still alive)
|
||||
.EXAMPLE
|
||||
.\scripts\stop-all.ps1
|
||||
.\scripts\stop-all.ps1 -KillByPort
|
||||
#>
|
||||
param(
|
||||
[switch]$KillByPort
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Continue"
|
||||
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
Write-Host " Edu Stop All Services" -ForegroundColor Cyan
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
# ===== 1. Close app service terminal windows =====
|
||||
Write-Host "[1/2] Closing app service windows..." -ForegroundColor Yellow
|
||||
|
||||
$appTitles = @(
|
||||
"edu-app-classes",
|
||||
"edu-app-iam",
|
||||
"edu-app-teacher-bff",
|
||||
"edu-app-core-edu",
|
||||
"edu-app-content",
|
||||
"edu-app-msg",
|
||||
"edu-app-data-ana",
|
||||
"edu-app-ai",
|
||||
"edu-app-api-gateway",
|
||||
"edu-app-push-gateway",
|
||||
"edu-app-teacher-portal"
|
||||
)
|
||||
|
||||
$closedCount = 0
|
||||
foreach ($title in $appTitles) {
|
||||
$procs = Get-Process -Name "powershell","pwsh","node","python","uvicorn","go" -ErrorAction SilentlyContinue |
|
||||
Where-Object { $_.MainWindowTitle -like "*$title*" }
|
||||
|
||||
if ($procs) {
|
||||
foreach ($p in $procs) {
|
||||
try {
|
||||
Stop-Process -Id $p.Id -Force -ErrorAction Stop
|
||||
Write-Host " [OK] Closed $title (PID $($p.Id))" -ForegroundColor Green
|
||||
$closedCount++
|
||||
} catch {
|
||||
Write-Host " [WARN] Cannot close $title (PID $($p.Id)): $($_.Exception.Message)" -ForegroundColor Yellow
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Write-Host " [--] $title window not found" -ForegroundColor Gray
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host " Closed $closedCount windows" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# ===== 2. Kill by port (optional) =====
|
||||
if ($KillByPort) {
|
||||
Write-Host "[2/2] Killing processes by port..." -ForegroundColor Yellow
|
||||
|
||||
$ports = @(3000,3001,3002,3003,3004,3005,3006,3007,3008,8080,8081)
|
||||
|
||||
foreach ($port in $ports) {
|
||||
$connections = Get-NetTCPConnection -LocalPort $port -State Listen -ErrorAction SilentlyContinue
|
||||
if ($connections) {
|
||||
foreach ($conn in $connections) {
|
||||
try {
|
||||
$proc = Get-Process -Id $conn.OwningProcess -ErrorAction Stop
|
||||
Stop-Process -Id $conn.OwningProcess -Force -ErrorAction Stop
|
||||
Write-Host " [OK] Port $port -> killed $($proc.ProcessName) (PID $($conn.OwningProcess))" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host " [WARN] Port $port -> cannot kill PID $($conn.OwningProcess)" -ForegroundColor Yellow
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Write-Host " [--] Port $port free" -ForegroundColor Gray
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Write-Host "[2/2] Skipping port kill (use -KillByPort to enable)" -ForegroundColor Gray
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
Write-Host " Stop complete" -ForegroundColor Cyan
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "To stop infrastructure:" -ForegroundColor Yellow
|
||||
Write-Host " docker compose -f infra/docker-compose.yml --profile p6 --profile observability down" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Reference in New Issue
Block a user