36 lines
2.1 KiB
PowerShell
36 lines
2.1 KiB
PowerShell
param(
|
|
[int]$Connections=500,
|
|
[int]$OpenRate=40,
|
|
[int]$Reconnects=50,
|
|
[int]$HoldSeconds=5
|
|
)
|
|
$ErrorActionPreference='Stop'
|
|
$PSNativeCommandUseErrorActionPreference=$true
|
|
if($Connections-lt1-or$Connections-gt5000-or$OpenRate-lt1-or$OpenRate-gt50-or$Reconnects-lt0-or$Reconnects-gt$Connections-or$HoldSeconds-lt1-or$HoldSeconds-gt20){throw 'SSE load parameters exceed the safe local boundary'}
|
|
$root=Split-Path -Parent $PSScriptRoot
|
|
Set-Location -LiteralPath $root
|
|
$tokenUrl='http://localhost:58180/realms/voice-local/protocol/openid-connect/token'
|
|
$eventId=$null
|
|
|
|
function Sql([string]$statement){
|
|
$result=$statement|docker compose exec -T postgres psql -U voice -d voice_platform -v ON_ERROR_STOP=1 -q -t -A
|
|
if($LASTEXITCODE-ne0){throw 'SSE load fixture SQL failed'}
|
|
return ($result|Out-String).Trim()
|
|
}
|
|
|
|
try{
|
|
$eventId=Sql "INSERT INTO web_event(tenant_id,household_id,subject_id,event_type,resource_type,resource_public_id,status,expires_at) SELECT t.id,h.id,sp.id,'story.created','load_fixture',gen_random_uuid(),'ready',now()+interval '15 minutes' FROM tenant t JOIN household h ON h.tenant_id=t.id JOIN subject_profile sp ON sp.tenant_id=t.id AND sp.household_id=h.id WHERE t.public_id='10000000-0000-0000-0000-000000000010'::uuid ORDER BY h.created_at,sp.created_at LIMIT 1 RETURNING id;"
|
|
if($eventId-notmatch'^\d+$'){throw "Invalid SSE fixture event id: $eventId"}
|
|
$token=(Invoke-RestMethod -Method Post -Uri $tokenUrl -ContentType 'application/x-www-form-urlencoded' -Body @{grant_type='password';client_id='voice-platform-web';username='owner';password='LocalOnly123!';scope='openid'}).access_token
|
|
$previous=$env:ACCESS_TOKEN
|
|
try{
|
|
$env:ACCESS_TOKEN=$token
|
|
go run ./cmd/load-sse -url http://localhost:58080/api/v1/events -connections $Connections -open-rate $OpenRate -reconnects $Reconnects -hold "${HoldSeconds}s"
|
|
if($LASTEXITCODE-ne0){throw 'SSE connection load failed'}
|
|
}finally{
|
|
$env:ACCESS_TOKEN=$previous
|
|
}
|
|
}finally{
|
|
if($eventId-match'^\d+$'){try{Sql "DELETE FROM web_event WHERE id=$eventId;"|Out-Null}catch{Write-Warning $_}}
|
|
}
|