lobster_full_engine_validation.ps1 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. # Lobster full engine validation: health + integration + all UI page probes + travel lifecycle chain.
  2. # Usage:
  3. # cd d:\ylrz_saas_new\java\scripts
  4. # .\lobster_full_engine_validation.ps1
  5. # .\lobster_full_engine_validation.ps1 -CompanyId 338 -TenantId 33
  6. # .\lobster_full_engine_validation.ps1 -SkipTravelChain
  7. # .\lobster_full_engine_validation.ps1 -PagesOnly
  8. param(
  9. [string]$ApiBase = "http://127.0.0.1:8006",
  10. [int]$CompanyId = 338,
  11. [int]$TenantId = 33,
  12. [string]$OpsSecret = "lobster-dev-ops",
  13. [switch]$SkipTravelChain,
  14. [switch]$IncludeTravelStress,
  15. [switch]$PagesOnly
  16. )
  17. $ErrorActionPreference = "Stop"
  18. try {
  19. [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
  20. $OutputEncoding = [System.Text.Encoding]::UTF8
  21. } catch { }
  22. $utf8NoBom = New-Object System.Text.UTF8Encoding $false
  23. $reportDir = Join-Path $PSScriptRoot "reports"
  24. if (-not (Test-Path $reportDir)) { New-Item -ItemType Directory -Path $reportDir | Out-Null }
  25. $stamp = Get-Date -Format "yyyyMMdd-HHmmss"
  26. $reportFile = Join-Path $reportDir "lobster-full-engine-validation-$stamp.json"
  27. $travelChainFlag = "true"
  28. if ($SkipTravelChain -eq $true -or $PagesOnly -eq $true) { $travelChainFlag = "false" }
  29. $travelStressFlag = "false"
  30. if ($IncludeTravelStress -eq $true) { $travelStressFlag = "true" }
  31. Write-Host "=== Lobster Full Engine Validation ===" -ForegroundColor Cyan
  32. Write-Host "ApiBase=$ApiBase CompanyId=$CompanyId TenantId=$TenantId includeTravelChain=$travelChainFlag includeTravelStress=$travelStressFlag"
  33. try {
  34. $pingHeaders = @{ "X-Lobster-Ops-Secret" = $OpsSecret }
  35. Invoke-RestMethod -Uri "$ApiBase/api/lobster/admin/phase2/verify/$CompanyId?tenantId=$TenantId" -Headers $pingHeaders -TimeoutSec 15 | Out-Null
  36. Write-Host "OK service reachable" -ForegroundColor Green
  37. } catch {
  38. Write-Host "FAIL service not reachable at $ApiBase" -ForegroundColor Red
  39. Write-Host "Start fs-saas-company on port 8006 first."
  40. exit 1
  41. }
  42. $uri = "$($ApiBase.TrimEnd('/'))/api/lobster/admin/validation/full-engine/${CompanyId}?tenantId=${TenantId}&includeTravelChain=${travelChainFlag}&includeTravelStress=${travelStressFlag}"
  43. $headers = @{
  44. "Content-Type" = "application/json"
  45. "X-Lobster-Ops-Secret" = $OpsSecret
  46. }
  47. Write-Host "POST $uri"
  48. Write-Host "Running full engine validation (pages ~30s; with travel chain 3-5 min)..."
  49. try {
  50. $resp = Invoke-RestMethod -Uri $uri -Method Post -Headers $headers -TimeoutSec 1800
  51. $json = $resp | ConvertTo-Json -Depth 30
  52. [System.IO.File]::WriteAllText($reportFile, $json, $utf8NoBom)
  53. Write-Host "Report saved: $reportFile" -ForegroundColor Green
  54. } catch {
  55. Write-Host "FAIL request error: $($_.Exception.Message)" -ForegroundColor Red
  56. exit 1
  57. }
  58. $passed = $resp.passed
  59. $durationMs = $resp.durationMs
  60. $pageRatio = $resp.requiredPagesPassed
  61. Write-Host ""
  62. Write-Host "Duration: ${durationMs}ms" -ForegroundColor $(if ($passed) { "Green" } else { "Yellow" })
  63. Write-Host "Required pages: $pageRatio" -ForegroundColor $(if ($passed) { "Green" } else { "Yellow" })
  64. if ($resp.sections.pageLinkProbes) {
  65. $pages = $resp.sections.pageLinkProbes.pages
  66. $failedPages = @($pages | Where-Object { $_.required -and -not $_.passed })
  67. if ($failedPages.Count -gt 0) {
  68. Write-Host "Failed required pages:" -ForegroundColor Red
  69. foreach ($p in $failedPages) {
  70. Write-Host " $($p.path) [$($p.probe)] $($p.message)" -ForegroundColor Red
  71. }
  72. } else {
  73. Write-Host "All required UI page probes passed." -ForegroundColor Green
  74. }
  75. }
  76. if ($resp.integrationWarning) {
  77. Write-Host "Integration warning: $($resp.integrationWarning)" -ForegroundColor Yellow
  78. }
  79. if ($resp.failures -and $resp.failures.Count -gt 0) {
  80. Write-Host "Failures ($($resp.failures.Count)):" -ForegroundColor Red
  81. foreach ($f in $resp.failures) {
  82. Write-Host " - $f" -ForegroundColor Red
  83. }
  84. }
  85. if ($passed) {
  86. Write-Host "RESULT: PASS" -ForegroundColor Green
  87. exit 0
  88. } else {
  89. Write-Host "RESULT: FAIL" -ForegroundColor Red
  90. exit 1
  91. }