PureArrayDashboardLatencyData (Resource)

Element properties:

TypeResource
File NamePureArrayDashboardLatencyData.ps1
AccessibilityInternal

Source Code:

<Resource FileName="PureArrayDashboardLatencyData.ps1" ID="PureArrayDashboardLatencyData" Accessibility="Internal" HasNullStream="false"/>

File Content: PureArrayDashboardLatencyData.ps1

$ScriptName = "PureArrayDashboardLatencyData.ps1"


# Reference shared code
$SharedLibKey = Get-ItemProperty "HKLM:\SOFTWARE\PureStorage\SCOM\SharedLibPath"
$SharedLibPath = $SharedLibKey.'(default)'
. "$SharedLibPath"

LoadOperationsManagerModule $ScriptName

$whoami = whoami
$momapi = New-Object -comObject "Mom.ScriptAPI"
Log $ScriptName $GLOBAL:INFO_LEVEL "Starting script. Running as ($whoami)"
LoadPowerShellSDK $ScriptName

function SetPerfCounterLastValue($dataObject, $instance, $criteria, $counterName, $startTime, $endTime)
{
$performanceDataCollection = $instance.GetMonitoringPerformanceData($criteria)
Log $ScriptName $GLOBAL:VERBOSE_LEVEL $performanceDataCollection
$valueReader = $performanceDataCollection.GetValueReader($startTime, $endTime)
$counter = 0
$sum = 0
while ($valueReader.Read()) {
$counter += 1
$sum += $valueReader.GetMonitoringPerformanceDataValue().SampleValue
}
if ($counter -eq 0) {
Log $ScriptName $GLOBAL:WARNING_LEVEL "No perf data for $counterName"
return $null
}
$perfValue = $sum / $counter
$dataObject[$counterName] = [string]([Math]::Round($perfValue * 0.001, 4)) + ' ms'
Log $ScriptName $GLOBAL:VERBOSE_LEVEL "Value for counter $counterName is $perfValue ."
}

$class = Get-SCOMClass -Name PureStorage.FlashArray.PureArray
$pureArrays = Get-SCOMClassInstance -Class $class

# The perf APIs require a start and end time
# In this case, we specify current time as end time and two hours ago as start time.
$endTime = [DateTime]::UtcNow
$timeDiff = [TimeSpan]::FromHours(1)
$startTime = $endTime - $timeDiff

foreach ($pureArray in $pureArrays)
{
# Create a data object for the each database specifying the database object and the properties to include.
$dataObject = $ScriptContext.CreateFromObject($pureArray, "Id=Id,DisplayName=DisplayName", "ArrayName=ArrayName")
# Call function to add the performance data to the data object.
$readPerfCriteria = New-Object Microsoft.EnterpriseManagement.Monitoring.MonitoringPerformanceDataCriteria("CounterName='Read Latency'")
SetPerfCounterLastValue $dataObject $pureArray $readPerfCriteria 'Read Latency' $startTime $endTime
$writePerfCriteria = New-Object Microsoft.EnterpriseManagement.Monitoring.MonitoringPerformanceDataCriteria("CounterName='Write Latency'")
SetPerfCounterLastValue $dataObject $pureArray $writePerfCriteria 'Write Latency' $startTime $endTime
$ScriptContext.ReturnCollection.Add($dataObject)
}