Skip to content

Commit d4123aa

Browse files
authored
Merge pull request #52 from r3st0r3/master
Optimized Wait-PveTaskIsFinished
2 parents 2769ff2 + e8d90e5 commit d4123aa

File tree

1 file changed

+83
-11
lines changed

1 file changed

+83
-11
lines changed

Corsinvest.ProxmoxVE.Api/Corsinvest.ProxmoxVE.Api.psm1

Lines changed: 83 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ Millisecond wait next check
459459
.PARAMETER Timeout
460460
Millisecond timeout
461461
.OUTPUTS
462-
Bool. Return tas is running.
462+
Bool. $True Return task is done within Timeout, $False if not
463463
#>
464464
[OutputType([bool])]
465465
[CmdletBinding()]
@@ -479,21 +479,88 @@ Bool. Return tas is running.
479479

480480
process {
481481
$isRunning = $true;
482-
if ($wait -le 0) { $wait = 500; }
483-
if ($timeOut -lt $wait) { $timeOut = $wait + 5000; }
482+
if ($Wait -le 0) { $Wait = 500; }
483+
if ($Timeout -lt $Wait) { $Timeout = $Wait + 5000; }
484484
$timeStart = [DateTime]::Now
485-
$waitTime = $timeStart
486485

487-
while ($isRunning -and ($timeStart - [DateTime]::Now).Milliseconds -lt $timeOut) {
488-
$now = [DateTime]::Now
489-
if (($now - $waitTime).TotalMilliseconds -ge $wait) {
490-
$waitTime = $now;
491-
$isRunning = Get-PveTaskIsRunning -PveTicket $PveTicket -Upid $Upid
492-
}
486+
while ($isRunning -and ([DateTime]::Now - $timeStart).TotalMilliseconds -lt $Timeout) {
487+
$isRunning = Get-PveTaskIsRunning -PveTicket $PveTicket -Upid $Upid
488+
Start-Sleep -Milliseconds $Wait
489+
}
490+
491+
#check timeout
492+
return ([DateTime]::Now - $timeStart).TotalMilliseconds -lt $Timeout
493+
}
494+
}
495+
496+
function Wait-PveTaskIsFinishedWithProgress {
497+
<#
498+
.DESCRIPTION
499+
Wait for a task to finish, show Powershell Progressbar while waiting
500+
.PARAMETER PveTicket
501+
Ticket data connection.
502+
.PARAMETER Upid
503+
Upid task e.g UPID:pve1:00004A1A:0964214C:5EECEF11:vzdump:134:root@pam:
504+
.PARAMETER Wait
505+
Millisecond wait next check
506+
.PARAMETER Timeout
507+
Millisecond timeout
508+
.PARAMETER ProgressActivityText
509+
Acitivity (Text) for Write-Progress, defaults to Upid when empty
510+
.PARAMETER ProgressStatusText
511+
Status-Text for Write-Progress, default is "Waiting...", is shown in front of remaining time and percent
512+
.PARAMETER ProgessActivityId
513+
Id for Write-Progress, change when other Write-Progress is already shown
514+
.OUTPUTS
515+
Bool. $True Return task is done within Timeout, $False if not
516+
#>
517+
[OutputType([bool])]
518+
[CmdletBinding()]
519+
Param(
520+
[Parameter(ValueFromPipeline, ValueFromPipelineByPropertyName)]
521+
[PveTicket]$PveTicket,
522+
523+
[Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
524+
[string]$Upid,
525+
526+
[Parameter(ValueFromPipeline, ValueFromPipelineByPropertyName)]
527+
[int]$Wait = 500,
528+
529+
[Parameter(ValueFromPipeline, ValueFromPipelineByPropertyName)]
530+
[int]$Timeout = 10000,
531+
532+
[Parameter(ValueFromPipeline, ValueFromPipelineByPropertyName)]
533+
[string]$ProgressActivityText,
534+
535+
[Parameter(ValueFromPipeline, ValueFromPipelineByPropertyName)]
536+
[string]$ProgressStatusText = "Waiting...",
537+
538+
[Parameter(ValueFromPipeline, ValueFromPipelineByPropertyName)]
539+
[int]$ProgessActivityId = 1
540+
)
541+
542+
process {
543+
$isRunning = $true;
544+
if ($Wait -le 0) { $Wait = 500; }
545+
if ($Timeout -lt $Wait) { $Timeout = $Wait + 5000; }
546+
if ($null -eq $ProgressActivityText -OR $ProgressActivityText -eq "") { $ProgressActivityText = $Upid; }
547+
$timeStart = [DateTime]::Now
548+
$waitTimeMs = $timeStart
549+
$timePercent = 0
550+
551+
while ($isRunning -and ([DateTime]::Now - $timeStart).TotalMilliseconds -lt $Timeout) {
552+
$waitTimeMs = $([DateTime]::Now - $timeStart).TotalMilliseconds
553+
$timePercent = $waitTimeMs * (100 / $Timeout)
554+
Write-Progress -Id $ProgessActivityId -Activity $ProgressActivityText -Status "$($ProgressStatusText) ($([Math]::Round($waitTimeMs/1000))/$([Math]::Round($Timeout/1000)) Seconds)" -PercentComplete $timePercent
555+
$isRunning = Get-PveTaskIsRunning -PveTicket $PveTicket -Upid $Upid
556+
Start-Sleep -Milliseconds $Wait
493557
}
494558

559+
# end Write-Progress
560+
Write-Progress -Id $ProgessActivityId -Activity $ProgressActivityText -Completed
561+
495562
#check timeout
496-
return ($timeStart - [DateTime]::Now).Milliseconds -lt $timeOut
563+
return ([DateTime]::Now - $timeStart).TotalMilliseconds -lt $Timeout
497564
}
498565
}
499566

@@ -32855,3 +32922,8 @@ PveResponse. Return response.
3285532922
}
3285632923

3285732924

32925+
32926+
32927+
32928+
32929+

0 commit comments

Comments
 (0)