| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- # Analyze 404 and 500 errors in detail - categorize root causes
- $companyUrl = "http://localhost:8006"
- # Login
- $loginBody = '{"tenantCode":"T202605253515","username":"admin","password":"admin123"}'
- $loginResp = Invoke-WebRequest -Uri "$companyUrl/login" -Method POST -ContentType "application/json" -Body $loginBody -UseBasicParsing
- $loginJson = $loginResp.Content | ConvertFrom-Json
- $token = $loginJson.token
- Write-Host "Token OK"
- $headers = @{ Authorization = "Bearer $token" }
- # Read the test results
- $content = Get-Content "d:\ylrz\saasadminui\api_test_results.txt" -Raw
- $sections = $content -split "=== "
- # Parse 404 and 500
- $notFound = @()
- $serverErr = @()
- foreach ($section in $sections) {
- if ($section.StartsWith("404 Not Found")) {
- $notFound = ($section -split "`n" | Where-Object { $_.Trim() -ne "" -and $_ -notmatch "^404 Not Found" })
- } elseif ($section.StartsWith("500 Server Error")) {
- $serverErr = ($section -split "`n" | Where-Object { $_.Trim() -ne "" -and $_ -notmatch "^500 Server Error" })
- }
- }
- # Analyze 404: categorize by issue type
- Write-Host "=== 404 Analysis ==="
- Write-Host "Total 404s: $($notFound.Count)"
- # Category 1: Trailing / paths (e.g. /ad/ vs /ad)
- $trailingSlashPaths = $notFound | Where-Object { $_ -match "//\s" -or $_ -match "/\s+\|" }
- Write-Host "Trailing slash paths: $($trailingSlashPaths.Count)"
- # Category 2: CamelCase entity paths (e.g. /ad/AdDyAccount vs /ad/adDyAccount)
- $camelCasePaths = $notFound | Where-Object { $_ -match "/[A-Z][a-z]+[A-Z]" }
- Write-Host "CamelCase entity paths: $($camelCasePaths.Count)"
- # Category 3: Module paths that might not exist
- $modulePaths = @{}
- foreach ($line in $notFound) {
- if ($line -match "^\s*/([^/]+)/") {
- $mod = $Matches[1]
- if (-not $modulePaths.ContainsKey($mod)) { $modulePaths[$mod] = 0 }
- $modulePaths[$mod]++
- }
- }
- # Test some specific 500 errors to understand the error message
- Write-Host "`n=== Sample 500 Error Details ==="
- $sample500 = $serverErr | Select-Object -First 10
- foreach ($line in $sample500) {
- if ($line -match "^\s*(/\S+)") {
- $path = $Matches[1]
- try {
- $resp = Invoke-WebRequest -Uri "$companyUrl$path" -Method GET -Headers $headers -UseBasicParsing -TimeoutSec 5
- $body = $resp.Content | ConvertFrom-Json
- Write-Host "$path => code=$($body.code) msg=$($body.msg)"
- } catch {
- $err = $_.Exception.Message
- if ($err -match "500") {
- # Try to get response body for 500
- try {
- $errResp = Invoke-WebRequest -Uri "$companyUrl$path" -Method GET -Headers $headers -UseBasicParsing -TimeoutSec 5 -ErrorAction Stop
- Write-Host "$path => $($errResp.Content.Substring(0, [Math]::Min(200, $errResp.Content.Length)))"
- } catch {
- Write-Host "$path => HTTP 500 (no response body available)"
- }
- } else {
- Write-Host "$path => $err"
- }
- }
- }
- }
- # Test some specific 404 errors to understand
- Write-Host "`n=== Sample 404 Error Details ==="
- # Test /ad module paths (case sensitivity check)
- $testCases = @(
- "/ad/AdDyAccount/list",
- "/ad/adDyAccount/list",
- "/ad/ad_dy_account/list",
- "/his/doctor/list",
- "/his/doctor/export",
- "/his/healthRecord/list",
- "/his/healthrecord/list",
- "/company/companyUser/list",
- "/companyUser/list",
- "/store/store/list",
- "/store/storeProduct/list",
- "/course/courseDomainName/list"
- )
- foreach ($path in $testCases) {
- try {
- $resp = Invoke-WebRequest -Uri "$companyUrl$path" -Method GET -Headers $headers -UseBasicParsing -TimeoutSec 5
- $body = $resp.Content | ConvertFrom-Json
- Write-Host "$path => code=$($body.code) msg=$($body.msg)"
- } catch {
- $err = $_.Exception.Message
- if ($err -match "(\d{3})") {
- Write-Host "$path => HTTP $($Matches[1])"
- } else {
- Write-Host "$path => $err"
- }
- }
- }
- # Count 404 paths that have a corresponding path with different casing
- Write-Host "`n=== Case Sensitivity Check ==="
- $lowercasePaths = @{}
- foreach ($line in $notFound) {
- if ($line -match "^\s*(/\S+)") {
- $path = $Matches[1]
- $lower = $path.ToLower()
- if (-not $lowercasePaths.ContainsKey($lower)) {
- $lowercasePaths[$lower] = @()
- }
- $lowercasePaths[$lower] += $path
- }
- }
- $caseConflicts = $lowercasePaths.GetEnumerator() | Where-Object { $_.Value.Count -gt 1 }
- Write-Host "Paths with case variants: $($caseConflicts.Count)"
- $caseConflicts | Select-Object -First 10 | ForEach-Object {
- Write-Host " $($_.Key): $($_.Value -join ', ')"
- }
|