poll integration status.ps1
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)][string]$ApiKey,
[Parameter(Mandatory = $true)][string]$BaseUrl,
[Parameter(Mandatory = $true)][string]$RunId,
[Parameter(Mandatory = $true)][string]$PollResultUrl,
[string]$TrackItemIds,
[string]$TrackItemNames,
[int]$ExpectedRunTime = 3600
)
$BaseUrl = $BaseUrl.TrimEnd('/')
$headers = @{
Authorization = "X-API-KEY $ApiKey"
"Content-Type" = "application/json"
}
$terminalStatuses = @("Finished", "Failed", "Stopped")
$reportsDir = Join-Path (Get-Location).Path "reports"
if (-not (Test-Path $reportsDir)) {
New-Item -ItemType Directory -Path $reportsDir -Force | Out-Null
}
function Save-FileFromUrl {
param(
[string]$Url,
[string]$Path
)
if (-not $Url) {
return
}
Invoke-RestMethod -Uri $Url -Headers $headers -Method Get -OutFile $Path
}
Write-Host "Polling Leapwork Performance run $RunId ..."
Start-Sleep -Seconds 10
$startTime = Get-Date
$status = $null
$statusResponse = $null
while ($true) {
$elapsed = [int]((Get-Date) - $startTime).TotalSeconds
if ($elapsed -ge $ExpectedRunTime) {
Write-Warning "Polling timeout reached after $ExpectedRunTime seconds."
break
}
$statusResponse = Invoke-RestMethod -Uri $PollResultUrl -Headers $headers -Method Get
$status = $statusResponse.status
Write-Host "[$elapsed s] Status: $status"
if ($terminalStatuses -contains $status) {
break
}
Start-Sleep -Seconds 5
}
if (-not ($terminalStatuses -contains $status)) {
Write-Host "Stopping run because it did not reach a terminal status in time..."
Invoke-RestMethod -Uri "$BaseUrl/api/integration/stopIntegration?runId=$RunId" -Headers $headers -Method Get | Out-Null
Start-Sleep -Seconds 2
$statusResponse = Invoke-RestMethod -Uri $PollResultUrl -Headers $headers -Method Get
$status = $statusResponse.status
}
Write-Host "Final status: $status"
Write-Host ($statusResponse | ConvertTo-Json -Depth 10)
$dateStamp = Get-Date -Format "yyyyMMdd"
$excelPath = Join-Path $reportsDir "RunMetadata_${dateStamp}_${RunId}.xlsx"
$analysisPath = Join-Path $reportsDir "RunMetadata_${dateStamp}_${RunId}.txt"
Save-FileFromUrl -Url $statusResponse.excelReportUrl -Path $excelPath
Save-FileFromUrl -Url $statusResponse.aiAnalysisReportUrl -Path $analysisPath
if ($status -ne "Finished") {
throw "Integration run did not finish successfully. Final status: $status"
}