CoreOps/Stats/Get-SDPVolumeStats.ps1

class sdpvolumestats {
    [string] $blockSize
    [string] $iopsAvg
    [string] $iopsMax
    [string] $throughputAvg
    [string] $throughputMax
    [string] $throughputAvgInMB
    [string] $throughputMaxInMB
    [string] $latencyInnter 
    [string] $latencyOuter
    [string] $peerName
    [datetime] $timestamp
    [string] $resolution
    [string] $rw
    [string] $volumeName
}


function Get-SDPVolumeStats {
    param(
        [parameter(ValueFromPipelineByPropertyName)]
        [Alias('pipeId')]
        [int] $id,
        [parameter()]
        [switch] $bsBreakdown,
        [parameter()]
        [switch] $rwBreakdown,
        [parameter()]
        [datetime] $fromTime,
        [parameter()]
        [int] $dataPoints,
        [parameter()]
        [ValidateSet('5m','1h')]
        [string] $resolution,
        [parameter()]
        [string] $k2context = "k2rfconnection"
    )

    <#
        .SYNOPSIS

        .EXAMPLE
            Get-SDPVolume -name TestVOL | Get-SDPVolumeStats

        .DESCRIPTION

        .NOTES
        Authored by J.R. Phillips (GitHub: JayAreP)

        .LINK
        https://github.com/silk-us/silk-sdp-powershell-sdk

    #>


    begin {
        $endpoint = "stats/volumes"
    }

    process {
        # Special Ops

        if ($id) {
            Remove-variable endpoint
            $endpoint = 'stats/volumes/' + $id
            $PSBoundParameters.remove('id') | Out-Null
        }

        if ($bsBreakdown) {
            $PSBoundParameters.remove('bsBreakdown') | Out-Null
            $PSBoundParameters.__bs_breakdown = $true
        }

        if ($rwBreakdown) {
            $PSBoundParameters.remove('rwBreakdown') | Out-Null
            $PSBoundParameters.__rw_breakdown = $true
        }
        
        if ($fromTime) {
            $PSBoundParameters.remove('fromTime') | Out-Null
            $paramTime = Convert-SDPTimeStampTo -timestamp $fromTime
            $paramTimeStamp = (Convert-SDPTimeStampFrom -timestamp $paramTime).toString()
            $PSBoundParameters.__from_time = $paramTime
            Write-Verbose "Using $paramTimeStamp as UTC time"
        }

        if ($dataPoints) {
            $PSBoundParameters.remove('dataPoints') | Out-Null
            $PSBoundParameters.__datapoints = $dataPoints.ToString()
        }
        if ($resolution) {
            $PSBoundParameters.remove('resolution') | Out-Null
            $PSBoundParameters.__resolution = $resolution
        }

        # Query

        Write-Verbose "Collecting Stats for $endpoint"
        
        $results = Invoke-SDPRestCall -endpoint $endpoint -method GET -parameterList $PSBoundParameters -k2context $k2context -strictURI -strictString -noLimit
        # $results = Invoke-SDPRestCall -endpoint $endpoint -method GET -k2context $k2context
        
        $eventArray = @()

        foreach ($i in $results) {
            # Object
            # Build an instance of the class
            $classSDPvolumeStats = [sdpvolumestats]::new()

            # Populate the class object
            $classSDPvolumeStats.blockSize = $i.bs
            $classSDPvolumeStats.iopsAvg = $i.iops_avg
            $classSDPvolumeStats.iopsMax = $i.iops_max
            $classSDPvolumeStats.throughputAvg = $i.throughput_avg
            $classSDPvolumeStats.throughputMax = $i.throughput_max
            $classSDPvolumeStats.throughputAvgInMB = [math]::Round(($i.throughput_avg / 1mb),2)
            $classSDPvolumeStats.throughputMaxInMB = [math]::Round(($i.throughput_max / 1mb),2)
            $classSDPvolumeStats.latencyInnter = $i.latency_inner
            $classSDPvolumeStats.latencyOuter = $i.latency_outer
            $classSDPvolumeStats.peerName = $i.peer_k2_name
            $classTimeStamp = Convert-SDPTimeStampFrom -timestamp $i.timestamp
            $classSDPvolumeStats.timestamp = $classTimeStamp
            $classSDPvolumeStats.resolution = $i.resolution
            $classSDPvolumeStats.rw = $i.rw
            $classSDPvolumeStats.volumeName = $i.volume_name

            $eventArray += $classSDPvolumeStats
        }
        
        
        return $eventArray
    }
}