_Custom MSA P2000 Probe Action Module Volume

Custom.MSA.P2000.ProbeActionModule.Volume (ProbeActionModuleType)

Element properties:

TypeProbeActionModuleType
IsolationAny
AccessibilityInternal
RunAsDefault
OutputTypeSystem.PropertyBagData

Member Modules:

ID Module Type TypeId RunAs 
MyProbe ProbeAction Microsoft.Windows.PowerShellPropertyBagTriggerOnlyProbe Default

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>