69 lines
1.7 KiB
PowerShell
69 lines
1.7 KiB
PowerShell
#!/usr/bin/env pwsh
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$SummaryFile
|
|
)
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
if (-not (Test-Path $SummaryFile)) {
|
|
throw "Summary file not found: $SummaryFile"
|
|
}
|
|
|
|
$summary = Get-Content -Raw -Path $SummaryFile | ConvertFrom-Json
|
|
$metrics = $summary.metrics
|
|
|
|
if (-not $metrics) {
|
|
throw 'Invalid k6 summary file: missing metrics object.'
|
|
}
|
|
|
|
$endpoints = @('overview', 'analytics', 'chat_log', 'users')
|
|
|
|
function Get-MetricValue {
|
|
param(
|
|
[object]$Metric,
|
|
[string]$Key
|
|
)
|
|
|
|
if (-not $Metric) {
|
|
return $null
|
|
}
|
|
if (-not $Metric.values) {
|
|
return $null
|
|
}
|
|
|
|
$value = $Metric.values.$Key
|
|
if ($null -ne $value) {
|
|
return [double]$value
|
|
}
|
|
return $null
|
|
}
|
|
|
|
$globalDuration = Get-MetricValue -Metric $metrics.http_req_duration -Key 'p(95)'
|
|
$globalFailRate = Get-MetricValue -Metric $metrics.http_req_failed -Key 'rate'
|
|
|
|
Write-Output "k6 Summary: $SummaryFile"
|
|
if ($null -ne $globalDuration) {
|
|
Write-Output ("Global p95 duration (ms): {0:N2}" -f $globalDuration)
|
|
}
|
|
if ($null -ne $globalFailRate) {
|
|
Write-Output ("Global failure rate: {0:P2}" -f $globalFailRate)
|
|
}
|
|
Write-Output ''
|
|
|
|
$rows = foreach ($endpoint in $endpoints) {
|
|
$durationMetricName = "http_req_duration{endpoint:$endpoint}"
|
|
$failMetricName = "http_req_failed{endpoint:$endpoint}"
|
|
|
|
$durationP95 = Get-MetricValue -Metric $metrics.$durationMetricName -Key 'p(95)'
|
|
$failRate = Get-MetricValue -Metric $metrics.$failMetricName -Key 'rate'
|
|
|
|
[PSCustomObject]@{
|
|
Endpoint = $endpoint
|
|
P95Ms = if ($null -ne $durationP95) { [math]::Round($durationP95, 2) } else { $null }
|
|
FailurePct = if ($null -ne $failRate) { [math]::Round($failRate * 100, 4) } else { $null }
|
|
}
|
|
}
|
|
|
|
$rows | Format-Table -AutoSize | Out-String | Write-Output
|