_Custom MSA P2000 Probe Action Module Volume
Custom.MSA.P2000.ProbeActionModule.Volume (ProbeActionModuleType)
Element properties:
Member Modules:
Source Code:
<ProbeActionModuleType ID="Custom.MSA.P2000.ProbeActionModule.Volume" Accessibility="Internal" Batching="false" PassThrough="false">
<Configuration>
<xsd:element minOccurs="1" name="folderPath" type="xsd:string"/>
</Configuration>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<ProbeAction ID="MyProbe" TypeID="Windows!Microsoft.Windows.PowerShellPropertyBagTriggerOnlyProbe">
<ScriptName>RuleProbeActionMSAgetVolumeData.ps1</ScriptName>
<ScriptBody><Script>
param([string]$folderPath)
$Debug=$true
$api = New-Object -ComObject 'MOM.ScriptAPI'
$filePath="$folderPath\show__volume_statistics.xml"
if (test-path $filepath) {
[xml]$getcontxml = get-content $filepath
}
else {
while (($i -lt 2) -and ($getcontxml -eq $null)){
$i++
start-sleep -seconds 5
if (test-path $filepath) {
[xml]$getcontxml = get-content $filepath
}
}
}
if ($GetContXML -ne $null){
$ObjectXMLElements=$GetContXML.RESPONSE.OBJECT
foreach ($objElement in $ObjectXMLElements) {
$volumeNameGet=($objElement.property | ? {$_.name -eq 'volume-name'}).'#text'
if ($volumeNameGet -ne $null){
$propBag = $api.CreatePropertyBag()
[double]$MegaBytesPerSecond=($objElement.property | ? {$_.name -eq 'bytes-per-second-numeric'}).'#text'/1048576
[double]$IOPS=($objElement.property | ? {$_.name -eq 'iops'}).'#text'
[long]$numberOfReads=($objElement.property | ? {$_.name -eq 'number-of-reads'}).'#text'
[long]$numberOfWrites=($objElement.property | ? {$_.name -eq 'number-of-writes'}).'#text'
[long]$writeCacheHits=($objElement.property | ? {$_.name -eq 'write-cache-hits'}).'#text'
[long]$writecacheMisses=($objElement.property | ? {$_.name -eq 'write-cache-misses'}).'#text'
[long]$readCacheHits=($objElement.property | ? {$_.name -eq 'read-cache-hits'}).'#text'
[long]$readCacheMisses=($objElement.property | ? {$_.name -eq 'read-cache-misses'}).'#text'
[long]$smallDestages=($objElement.property | ? {$_.name -eq 'small-destages'}).'#text'
[long]$fullStripeWriteDestages=($objElement.property | ? {$_.name -eq 'full-stripe-write-destages'}).'#text'
[long]$readAheadOperations=($objElement.property | ? {$_.name -eq 'read-ahead-operations'}).'#text'
[double]$writeCacheSpace=($objElement.property | ? {$_.name -eq 'write-cache-space'}).'#text'
[double]$writecachePercent=($objElement.property | ? {$_.name -eq 'write-cache-percent'}).'#text'
if ($volumeNameGet -ne $null){
$propBag.addValue('volumeName', $volumeNameGet)
}else {$propBag.addValue('volumeName', $volumeNameGet)}
if ($MegaBytesPerSecond -ne $null){
$propBag.addValue('volumeBytesPerSecond',$MegaBytesPerSecond)
}else {$propBag.addValue('volumeBytesPerSecond',$MegaBytesPerSecond)}
if ($IOPS -ne $null){
$propBag.addValue('volumeIOPS', $IOPS)
}else {$propBag.addValue('volumeIOPS', $IOPS)}
if ($numberOfReads -ne $null){
$propBag.addValue('volumeNumberOfReads', $numberOfReads)
}else {$propBag.addValue('volumeNumberOfReads', $numberOfReads)}
if ($numberOfWrites -ne $null){
$propBag.addValue('volumeNumberOfWrites', $numberOfWrites)
}else {$propBag.addValue('volumeNumberOfWrites', $numberOfWrites)}
if ($writeCacheHits -ne $null){
$propBag.addValue('volumeWriteCacheHits', $writeCacheHits)
}else {$propBag.addValue('volumeWriteCacheHits', $writeCacheHits)}
if ($writecacheMisses -ne $null){
$propBag.addValue('volumeWriteCacheMisses', $writecacheMisses)
}else {$propBag.addValue('volumeWriteCacheMisses', $writecacheMisses)}
if ($readCacheHits -ne $null){
$propBag.addValue('volumeReadCacheHits', $readCacheHits)
}else {$propBag.addValue('volumeReadCacheHits', $readCacheHits)}
if ($readCacheMisses -ne $null){
$propBag.addValue('volumeReadCacheMisses', $readCacheMisses)
}else {$propBag.addValue('volumeReadCacheMisses', $readCacheMisses)}
if ($smallDestages -ne $null){
$propBag.addValue('volumeSmallDestages', $smallDestages)
}else {$propBag.addValue('volumeSmallDestages', $smallDestages)}
if ($fullStripeWriteDestages -ne $null){
$propBag.addValue('volumeFullStripeWriteDestages', $fullStripeWriteDestages)
}else {$propBag.addValue('volumeFullStripeWriteDestages', $fullStripeWriteDestages)}
if ($readAheadOperations -ne $null){
$propBag.addValue('volumeReadAheadOperations', $readAheadOperations)
}else {$propBag.addValue('volumeReadAheadOperations', $readAheadOperations)}
if ($writeCacheSpace -ne $null){
$propBag.addValue('volumeWriteCacheSpace', $writeCacheSpace)
}else {$propBag.addValue('volumeWriteCacheSpace', $writeCacheSpace)}
if ($writecachePercent -ne $null){
$propBag.addValue('volumeWriteCachePercent', $writecachePercent)
}else {$propBag.addValue('volumeWriteCachePercent', $writecachePercent)}
$propBag
}
}
}else {
If ($Debug) {
$api.LogScriptEvent(`
'MSA vDisk Perf Collection Failed',805,2, "`n`nScript Name: RuleProbeActionMSAgetVolumeData.ps1"`
+"`nPath: " + $folderPath`
+"`n`nMost Probable Cause: Volumes XML File Was Not Found"`
)
}
}
</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>folderPath</Name>
<Value>$config/folderPath$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>240</TimeoutSeconds>
</ProbeAction>
</MemberModules>
<Composition>
<Node ID="MyProbe"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.PropertyBagData</OutputType>
<TriggerOnly>true</TriggerOnly>
</ProbeActionModuleType>