<span style='color:#006400'><#
.SYNOPSIS
Get the different protocol latencies for a specified volume.
.DESCRIPTION
Get the different protocol latencies for a specified volume.
.PARAMETER Volume
Volume to retrieve the latency.
.PARAMETER Protocol
Protocol to collect latency for valid values are 'all','nfs','cifs','san','fcp','iscsi'
.PARAMETER Interval
The interval between iterations in seconds, default is 15 seconds
.PARAMETER Count
the number of iterations to execute, default is infinant
.PARAMETER Controller
NetApp Controller to query.
.EXAMPLE
.Get-NaVolumeLatency.ps1 -Volume vol0
Get the average latency for all protocols on vol0
.EXAMPLE
Get-NaVol | .Get-NaVolumeLatency.ps1 -Interval 5 -count 5 | ft
Get the average latency for all protocols, all volumes, 5 samples, 5 seconds apart.
.EXAMPLE
.Get-NaVolumeLatency.ps1 -Volume vol0 -protocol nfs
Get the NFS latency for vol0
#></span>
<span style='color:#a9a9a9'>[</span><span style='color:#add8e6'>cmdletBinding</span><span style='color:#000000'>(</span><span style='color:#000000'>)</span><span style='color:#a9a9a9'>]</span>
<span style='color:#00008b'>Param</span><span style='color:#000000'>(</span>
<span style='color:#a9a9a9'>[</span><span style='color:#add8e6'>Parameter</span><span style='color:#000000'>(</span><span style='color:#000000'>Mandatory</span><span style='color:#a9a9a9'>=</span><span style='color:#ff4500'>$true</span><span style='color:#a9a9a9'>,</span>
<span style='color:#000000'>HelpMessage</span><span style='color:#a9a9a9'>=</span><span style='color:#8b0000'>"Volume name to retrieve latency counters from."</span><span style='color:#a9a9a9'>,</span>
<span style='color:#000000'>ValueFromPipelineByPropertyName</span><span style='color:#a9a9a9'>=</span><span style='color:#ff4500'>$true</span><span style='color:#a9a9a9'>,</span>
<span style='color:#000000'>ValueFromPipeLine</span><span style='color:#a9a9a9'>=</span><span style='color:#ff4500'>$true</span>
<span style='color:#000000'>)</span><span style='color:#a9a9a9'>]</span>
<span style='color:#a9a9a9'>[</span><span style='color:#add8e6'>Alias</span><span style='color:#000000'>(</span><span style='color:#8b0000'>"Name"</span><span style='color:#000000'>)</span><span style='color:#a9a9a9'>]</span>
<span style='color:#008080'>[string]</span>
<span style='color:#ff4500'>$Volume</span>
<span style='color:#a9a9a9'>,</span>
<span style='color:#a9a9a9'>[</span><span style='color:#add8e6'>Parameter</span><span style='color:#000000'>(</span><span style='color:#000000'>Mandatory</span><span style='color:#a9a9a9'>=</span><span style='color:#ff4500'>$false</span><span style='color:#000000'>)</span><span style='color:#a9a9a9'>]</span>
<span style='color:#a9a9a9'>[</span><span style='color:#add8e6'>ValidateSet</span><span style='color:#000000'>(</span><span style='color:#8b0000'>'all'</span><span style='color:#a9a9a9'>,</span><span style='color:#8b0000'>'nfs'</span><span style='color:#a9a9a9'>,</span><span style='color:#8b0000'>'cifs'</span><span style='color:#a9a9a9'>,</span><span style='color:#8b0000'>'san'</span><span style='color:#a9a9a9'>,</span><span style='color:#8b0000'>'fcp'</span><span style='color:#a9a9a9'>,</span><span style='color:#8b0000'>'iscsi'</span><span style='color:#000000'>)</span><span style='color:#a9a9a9'>]</span>
<span style='color:#008080'>[string]</span>
<span style='color:#ff4500'>$Protocol</span><span style='color:#a9a9a9'>=</span><span style='color:#8b0000'>'all'</span>
<span style='color:#a9a9a9'>,</span>
<span style='color:#a9a9a9'>[</span><span style='color:#add8e6'>Parameter</span><span style='color:#000000'>(</span><span style='color:#000000'>Mandatory</span><span style='color:#a9a9a9'>=</span><span style='color:#ff4500'>$false</span><span style='color:#000000'>)</span><span style='color:#a9a9a9'>]</span>
<span style='color:#008080'>[int]</span>
<span style='color:#ff4500'>$Interval</span><span style='color:#a9a9a9'>=</span><span style='color:#800080'>15</span>
<span style='color:#a9a9a9'>,</span>
<span style='color:#a9a9a9'>[</span><span style='color:#add8e6'>Parameter</span><span style='color:#000000'>(</span><span style='color:#000000'>Mandatory</span><span style='color:#a9a9a9'>=</span><span style='color:#ff4500'>$false</span><span style='color:#000000'>)</span><span style='color:#a9a9a9'>]</span>
<span style='color:#008080'>[string]</span>
<span style='color:#ff4500'>$count</span>
<span style='color:#a9a9a9'>,</span>
<span style='color:#a9a9a9'>[</span><span style='color:#add8e6'>Parameter</span><span style='color:#000000'>(</span><span style='color:#000000'>Mandatory</span><span style='color:#a9a9a9'>=</span><span style='color:#ff4500'>$false</span><span style='color:#000000'>)</span><span style='color:#a9a9a9'>]</span>
<span style='color:#008080'>[NetApp.Ontapi.Filer.NaController]</span>
<span style='color:#ff4500'>$Controller</span><span style='color:#a9a9a9'>=</span><span style='color:#000000'>(</span><span style='color:#ff4500'>$CurrentNaController</span><span style='color:#000000'>)</span>
<span style='color:#000000'>)</span>
<span style='color:#00008b'>Begin</span>
<span style='color:#000000'>{</span>
<span style='color:#00008b'>IF</span> <span style='color:#000000'>(</span><span style='color:#ff4500'>$Protocol</span> <span style='color:#a9a9a9'>-eq</span> <span style='color:#8b0000'>'all'</span><span style='color:#000000'>)</span>
<span style='color:#000000'>{</span>
<span style='color:#ff4500'>$Counters</span> <span style='color:#a9a9a9'>=</span> <span style='color:#000000'>@(</span>
<span style='color:#000000'>@{</span>
<span style='color:#000000'>Counter</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>'read_latency'</span>
<span style='color:#000000'>Base</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>''</span>
<span style='color:#000000'>unit</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>''</span>
<span style='color:#000000'>}</span>
<span style='color:#a9a9a9'>,</span>
<span style='color:#000000'>@{</span>
<span style='color:#000000'>Counter</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>'write_latency'</span>
<span style='color:#000000'>Base</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>''</span>
<span style='color:#000000'>unit</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>''</span>
<span style='color:#000000'>}</span>
<span style='color:#a9a9a9'>,</span>
<span style='color:#000000'>@{</span>
<span style='color:#000000'>Counter</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>'other_latency'</span>
<span style='color:#000000'>Base</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>''</span>
<span style='color:#000000'>unit</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>''</span>
<span style='color:#000000'>}</span>
<span style='color:#a9a9a9'>,</span>
<span style='color:#000000'>@{</span>
<span style='color:#000000'>Counter</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>'avg_latency'</span>
<span style='color:#000000'>Base</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>''</span>
<span style='color:#000000'>unit</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>''</span>
<span style='color:#000000'>}</span>
<span style='color:#000000'>)</span>
<span style='color:#000000'>}</span>
<span style='color:#00008b'>Else</span>
<span style='color:#000000'>{</span>
<span style='color:#ff4500'>$Counters</span> <span style='color:#a9a9a9'>=</span> <span style='color:#000000'>@(</span>
<span style='color:#000000'>@{</span>
<span style='color:#000000'>Counter</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>"$($Protocol.ToLower())_read_latency"</span>
<span style='color:#000000'>Base</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>''</span>
<span style='color:#000000'>unit</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>''</span>
<span style='color:#000000'>}</span>
<span style='color:#a9a9a9'>,</span>
<span style='color:#000000'>@{</span>
<span style='color:#000000'>Counter</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>"$($Protocol.ToLower())_write_latency"</span>
<span style='color:#000000'>Base</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>''</span>
<span style='color:#000000'>unit</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>''</span>
<span style='color:#000000'>}</span>
<span style='color:#a9a9a9'>,</span>
<span style='color:#000000'>@{</span>
<span style='color:#000000'>Counter</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>"$($Protocol.ToLower())_other_latency"</span>
<span style='color:#000000'>Base</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>''</span>
<span style='color:#000000'>unit</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>''</span>
<span style='color:#000000'>}</span>
<span style='color:#000000'>)</span>
<span style='color:#000000'>}</span>
<span style='color:#00008b'>foreach</span> <span style='color:#000000'>(</span><span style='color:#ff4500'>$c</span> <span style='color:#00008b'>in</span> <span style='color:#ff4500'>$Counters</span><span style='color:#000000'>)</span>
<span style='color:#000000'>{</span>
<span style='color:#0000ff'>Get-NaPerfCounter</span> <span style='color:#000080'>-Name</span> <span style='color:#8b0000'>'volume'</span> <span style='color:#000080'>-Controller</span> <span style='color:#ff4500'>$Controller</span> <span style='color:#a9a9a9'>|</span>
<span style='color:#0000ff'>Where-Object</span> <span style='color:#000000'>{</span><span style='color:#ff4500'>$_</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>name</span> <span style='color:#a9a9a9'>-eq</span> <span style='color:#ff4500'>$c</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>Counter</span><span style='color:#000000'>}</span> <span style='color:#a9a9a9'>|</span>
<span style='color:#0000ff'>ForEach-Object</span> <span style='color:#000000'>{</span>
<span style='color:#ff4500'>$c</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>Base</span> <span style='color:#a9a9a9'>=</span> <span style='color:#ff4500'>$_</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>BaseCounter</span>
<span style='color:#ff4500'>$c</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>unit</span> <span style='color:#a9a9a9'>=</span> <span style='color:#00008b'>switch</span> <span style='color:#000000'>(</span><span style='color:#ff4500'>$_</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>unit</span><span style='color:#000000'>)</span> <span style='color:#000000'>{</span>
<span style='color:#8b0000'>"microsec"</span> <span style='color:#000000'>{</span><span style='color:#800080'>10000</span><span style='color:#000000'>}</span>
<span style='color:#8b0000'>"millisec"</span> <span style='color:#000000'>{</span><span style='color:#800080'>1</span><span style='color:#000000'>}</span>
<span style='color:#000000'>}</span>
<span style='color:#000000'>}</span>
<span style='color:#000000'>}</span>
<span style='color:#000000'>}</span>
<span style='color:#00008b'>Process</span>
<span style='color:#000000'>{</span>
<span style='color:#006400'># Check if volume exists.</span>
<span style='color:#00008b'>if</span> <span style='color:#000000'>(</span><span style='color:#a9a9a9'>-Not</span> <span style='color:#000000'>(</span><span style='color:#000000'>(</span><span style='color:#0000ff'>get-navol</span> <span style='color:#000080'>-Controller</span> <span style='color:#ff4500'>$Controller</span><span style='color:#a9a9a9'>|</span><span style='color:#0000ff'>select</span> <span style='color:#000080'>-ExpandProperty</span> <span style='color:#8a2be2'>Name</span><span style='color:#000000'>)</span> <span style='color:#a9a9a9'>-contains</span> <span style='color:#ff4500'>$Volume</span><span style='color:#000000'>)</span><span style='color:#000000'>)</span> <span style='color:#000000'>{</span>
<span style='color:#0000ff'>Write-Warning</span> <span style='color:#8b0000'>"$volume doesn't exist!"</span>
<span style='color:#00008b'>break</span><span style='color:#000000'>;</span>
<span style='color:#000000'>}</span>
<span style='color:#ff4500'>$iteration</span> <span style='color:#a9a9a9'>=</span> <span style='color:#800080'>0</span>
<span style='color:#ff4500'>$first</span> <span style='color:#a9a9a9'>=</span> <span style='color:#ff4500'>$null</span>
<span style='color:#006400'>#loop untill we're done or Cntr ^c </span>
<span style='color:#00008b'>while</span> <span style='color:#000000'>(</span><span style='color:#000000'>(</span><span style='color:#a9a9a9'>!</span><span style='color:#ff4500'>$Count</span><span style='color:#000000'>)</span> <span style='color:#a9a9a9'>-or</span> <span style='color:#000000'>(</span><span style='color:#ff4500'>$iteration</span> <span style='color:#a9a9a9'>-le</span> <span style='color:#ff4500'>$count</span><span style='color:#000000'>)</span><span style='color:#000000'>)</span>
<span style='color:#000000'>{</span>
<span style='color:#ff4500'>$second</span> <span style='color:#a9a9a9'>=</span> <span style='color:#0000ff'>New-Object</span> <span style='color:#8a2be2'>Collections.HashTable</span>
<span style='color:#0000ff'>Get-NaPerfData</span> <span style='color:#000080'>-Name</span> <span style='color:#8a2be2'>volume</span> <span style='color:#000000'>`
</span> <span style='color:#000080'>-Instances</span> <span style='color:#ff4500'>$Volume</span> <span style='color:#000000'>`
</span> <span style='color:#000080'>-Controller</span> <span style='color:#ff4500'>$Controller</span> <span style='color:#000000'>`
</span> <span style='color:#000080'>-Counters</span> <span style='color:#000000'>(</span><span style='color:#ff4500'>$Counters</span><span style='color:#a9a9a9'>|</span><span style='color:#0000ff'>%</span><span style='color:#000000'>{</span><span style='color:#ff4500'>$_</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>base</span><span style='color:#a9a9a9'>,</span><span style='color:#ff4500'>$_</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>counter</span><span style='color:#000000'>}</span><span style='color:#000000'>)</span> <span style='color:#a9a9a9'>|</span>
<span style='color:#0000ff'>Select-Object</span> <span style='color:#000080'>-ExpandProperty</span> <span style='color:#8a2be2'>Counters</span> <span style='color:#a9a9a9'>|</span>
<span style='color:#0000ff'>ForEach-Object</span> <span style='color:#000000'>{</span>
<span style='color:#ff4500'>$second</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>add</span><span style='color:#000000'>(</span><span style='color:#ff4500'>$_</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>Name</span><span style='color:#a9a9a9'>,</span><span style='color:#ff4500'>$_</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>value</span><span style='color:#000000'>)</span>
<span style='color:#000000'>}</span>
<span style='color:#00008b'>if</span> <span style='color:#000000'>(</span><span style='color:#ff4500'>$first</span> <span style='color:#a9a9a9'>-and</span> <span style='color:#ff4500'>$second</span><span style='color:#000000'>)</span>
<span style='color:#000000'>{</span>
<span style='color:#ff4500'>$results</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>""</span> <span style='color:#a9a9a9'>|</span> <span style='color:#0000ff'>Select-Object</span> <span style='color:#000080'>-Property</span> <span style='color:#000000'>(</span><span style='color:#ff4500'>$Counters</span><span style='color:#a9a9a9'>|</span><span style='color:#0000ff'>%</span><span style='color:#000000'>{</span><span style='color:#ff4500'>$_</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>base</span><span style='color:#a9a9a9'>,</span><span style='color:#ff4500'>$_</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>counter</span><span style='color:#000000'>}</span><span style='color:#000000'>)</span>
<span style='color:#00008b'>foreach</span> <span style='color:#000000'>(</span><span style='color:#ff4500'>$v</span> <span style='color:#00008b'>in</span> <span style='color:#ff4500'>$Counters</span><span style='color:#000000'>)</span>
<span style='color:#000000'>{</span>
<span style='color:#00008b'>IF</span> <span style='color:#000000'>(</span><span style='color:#ff4500'>$second</span><span style='color:#a9a9a9'>[</span><span style='color:#ff4500'>$v</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>Base</span><span style='color:#a9a9a9'>]</span> <span style='color:#a9a9a9'>-gt</span> <span style='color:#ff4500'>$first</span><span style='color:#a9a9a9'>[</span><span style='color:#ff4500'>$v</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>Base</span><span style='color:#a9a9a9'>]</span><span style='color:#000000'>)</span>
<span style='color:#000000'>{</span>
<span style='color:#006400'>#calculate the average over our interval</span>
<span style='color:#ff4500'>$avg</span> <span style='color:#a9a9a9'>=</span> <span style='color:#000000'>(</span><span style='color:#ff4500'>$second</span><span style='color:#a9a9a9'>[</span><span style='color:#ff4500'>$v</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>Counter</span><span style='color:#a9a9a9'>]</span> <span style='color:#a9a9a9'>-</span> <span style='color:#ff4500'>$first</span><span style='color:#a9a9a9'>[</span><span style='color:#ff4500'>$v</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>Counter</span><span style='color:#a9a9a9'>]</span><span style='color:#000000'>)</span><span style='color:#a9a9a9'>/</span><span style='color:#000000'>(</span><span style='color:#ff4500'>$second</span><span style='color:#a9a9a9'>[</span><span style='color:#ff4500'>$v</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>Base</span><span style='color:#a9a9a9'>]</span> <span style='color:#a9a9a9'>-</span> <span style='color:#ff4500'>$first</span><span style='color:#a9a9a9'>[</span><span style='color:#ff4500'>$v</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>Base</span><span style='color:#a9a9a9'>]</span><span style='color:#000000'>)</span>
<span style='color:#006400'>#conver to ms</span>
<span style='color:#ff4500'>$results</span><span style='color:#a9a9a9'>.</span><span style='color:#8b0000'>"$($v.Base)"</span> <span style='color:#a9a9a9'>=</span> <span style='color:#008080'>[math]</span><span style='color:#a9a9a9'>::</span><span style='color:#000000'>Round</span><span style='color:#000000'>(</span><span style='color:#000000'>(</span><span style='color:#000000'>(</span><span style='color:#ff4500'>$second</span><span style='color:#a9a9a9'>[</span><span style='color:#ff4500'>$v</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>Base</span><span style='color:#a9a9a9'>]</span> <span style='color:#a9a9a9'>-</span> <span style='color:#ff4500'>$first</span><span style='color:#a9a9a9'>[</span><span style='color:#ff4500'>$v</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>Base</span><span style='color:#a9a9a9'>]</span><span style='color:#000000'>)</span><span style='color:#a9a9a9'>/</span><span style='color:#ff4500'>$Interval</span><span style='color:#000000'>)</span><span style='color:#000000'>)</span>
<span style='color:#ff4500'>$results</span><span style='color:#a9a9a9'>.</span><span style='color:#8b0000'>"$($v.Counter)"</span> <span style='color:#a9a9a9'>=</span> <span style='color:#000000'>(</span><span style='color:#8b0000'>"{0} ms"</span> <span style='color:#a9a9a9'>-f</span> <span style='color:#008080'>[math]</span><span style='color:#a9a9a9'>::</span><span style='color:#000000'>Round</span><span style='color:#000000'>(</span><span style='color:#ff4500'>$avg</span><span style='color:#a9a9a9'>/</span><span style='color:#ff4500'>$v</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>unit</span><span style='color:#000000'>)</span><span style='color:#000000'>)</span>
<span style='color:#000000'>}</span>
<span style='color:#00008b'>Else</span>
<span style='color:#000000'>{</span>
<span style='color:#ff4500'>$results</span><span style='color:#a9a9a9'>.</span><span style='color:#8b0000'>"$($v.Base)"</span> <span style='color:#a9a9a9'>=</span> <span style='color:#800080'>0</span>
<span style='color:#ff4500'>$results</span><span style='color:#a9a9a9'>.</span><span style='color:#8b0000'>"$($v.Counter)"</span> <span style='color:#a9a9a9'>=</span> <span style='color:#8b0000'>"0 ms"</span>
<span style='color:#000000'>}</span>
<span style='color:#000000'>}</span>
<span style='color:#0000ff'>Write-Output</span> <span style='color:#ff4500'>$results</span><span style='color:#a9a9a9'>|</span> <span style='color:#0000ff'>Add-Member</span> <span style='color:#8a2be2'>NoteProperty</span> <span style='color:#8b0000'>'Volume'</span> <span style='color:#ff4500'>$Volume</span> <span style='color:#000080'>-PassThru</span>
<span style='color:#000000'>}</span>
<span style='color:#0000ff'>Start-Sleep</span> <span style='color:#000080'>-Seconds</span> <span style='color:#ff4500'>$Interval</span>
<span style='color:#ff4500'>$first</span> <span style='color:#a9a9a9'>=</span> <span style='color:#ff4500'>$second</span><span style='color:#a9a9a9'>.</span><span style='color:#000000'>clone</span><span style='color:#000000'>(</span><span style='color:#000000'>)</span>
<span style='color:#ff4500'>$iteration</span><span style='color:#a9a9a9'>++</span>
<span style='color:#000000'>}</span>
<span style='color:#000000'>}</span>