functions/Actions/Delay/Invoke-AzureFailureDelay.ps1

function Invoke-AzureFailureDelay {
    [CmdletBinding(SupportsShouldProcess = $true)]
    param (
        [Parameter(Mandatory = $true)]
        [string] $Step,

        [Parameter(Mandatory = $true)]
        [string] $Branch,

        [Parameter(Mandatory = $true)]
        [TimeSpan]$Duration
    )
    Write-PSFMessage -Level Verbose -Message "Starting delay for $Duration."


    $paramUpdateAzureFailureTrace = @{
        ResourceId        = "Delay"
        Step              = $Step
        Branch            = $Branch
        Action            = "urn:csci:microsoft:chaosStudio:timedDelay/1.0"
        ActionStatus      = "InProgress"
        ActionMessage     = ""
        ActionTriggerTime = Get-Date
    }

    Update-AzureFailureTrace @paramUpdateAzureFailureTrace
    if ($PSCmdlet.ShouldProcess("Time Delay", "Delay")) {
        Start-Sleep -Seconds $Duration.TotalSeconds
    }

    $actionStatus = if ($WhatIfPreference) { "WhatIf" } else { "Success" }

    $paramUpdateAzureFailureTrace = @{
        ResourceId         = "Delay"
        Step               = $Step
        Branch             = $Branch
        Action             = "urn:csci:microsoft:chaosStudio:timedDelay/1.0"
        ActionStatus       = $actionStatus
        ActionMessage      = ""
        ActionCompleteTime = Get-Date
    }
    Update-AzureFailureTrace @paramUpdateAzureFailureTrace
}