JobStatusApi.ps1
Class JobStatusApi: ApiClient { # Default constructor JobStatusApi([hashtable]$values) : base ($values) {} [psobject]Status([string]$jobId) { if ([string]::IsNullOrWhiteSpace($jobId)) { throw "Must supply a job id" } # Get the URL to use $url = $this.BuildUrl("jobs\$($jobId)", $False) # Send the GET try { $job = $this.Get($url) LogIt "Job $jobid status: $($job.status) percent done: $($job.overallProgressPercent) parameters $($job.parameters)" return $job } catch { LogIt "GET $url status error: $($_)" return New-Object PSObject -Property @{ status = "Failed" error = $_ additionalInfo = @{ artifacts = @{} } } } } [psobject]WaitFor([string]$jobId, [int]$pollSeconds) { $job = $null do { Start-Sleep $pollSeconds $job = $this.Status($jobId) } until ($job.status -ne 'inProgress') if ($job.status -eq "complete") { LogIt "Job $jobId final status: $($job.status)" } else { LogIt "Job $jobId final status $(Convert-HashToString (Convert-ObjectToHashtable $job)) " throw "Final job $jobId status: $($job.status)" } return @{ status = $job.status artifacts = $job.additionalInfo.artifacts } } SaveArtifacts([psobject]$artifacts, [string]$filenameBase, [string]$platform) { $filename = "$filenameBase.$platform.json" LogIt "Saving artifacts to $filename $(Out-String -InputObject $artifacts)" $False $artifacts | ConvertTo-Json -depth 10 | Out-File $filename } } Function New-JobStatusApi([hashtable]$values) { return [JobStatusApi]::New($values) } |