Converged Switch Memory Performance Collection Rule

UCPManagementPack.ConvergedSwitchMemoryPerformanceCollectionRule (Rule)

Element properties:

TargetUCPManagementPack.ConvergedSwitch
CategoryPerformanceCollection
EnabledTrue
Alert GenerateFalse
RemotableTrue

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource UCPManagementPack.TimedPowerShell.PerformanceProvider System.PrivilegedMonitoringAccount
CollectToDB WriteAction Microsoft.SystemCenter.CollectPerformanceData Default
CollectToDW WriteAction Microsoft.SystemCenter.DataWarehouse.PublishPerformanceData Default

Source Code:

<Rule ID="UCPManagementPack.ConvergedSwitchMemoryPerformanceCollectionRule" Target="UCPManagementPack.ConvergedSwitch" Enabled="true" ConfirmDelivery="false" Remotable="true" Priority="Normal" DiscardLevel="100">
<Category>PerformanceCollection</Category>
<DataSources>
<DataSource ID="DS" TypeID="UCPManagementPack.TimedPowerShell.PerformanceProvider" RunAs="System!System.PrivilegedMonitoringAccount">
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<ScriptName>ConvergedSwitchMemoryPerformanceDataSource.ps1</ScriptName>
<ScriptBody><Script>

param($sourceId, $managedEntityId, $managementIps, $domain, $username, $password)

$api = new-object -comObject 'MOM.ScriptAPI'

$bag = $api.CreatePropertyBag()

# Make sure credentials are set
if ($username -and $password) {

add-type "using System.Net; using System.Security.Cryptography.X509Certificates; public class TrustAllCertsPolicy : ICertificatePolicy { public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) { return true; } }"

[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy

$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "$domain`\$username", $secstr

$from = ((Get-Date).ToUniversalTime().AddMinutes(-20))
$resourceName = "$Target/Property[Type='UCPManagementPack.ConvergedSwitch']/Name$"
$url = "https://$managementIps/monitoring/performance?resourceType=ConvergedSwitch&amp;globalResourceId=$resourceName&amp;performanceCounterNames=MemoryUsage&amp;fromTime=$from"

$api.LogScriptEvent("ConvergedSwitchMemoryPerformanceDataSource.ps1", 104, 0, "Getting converged switch memory performance data from $url for $resourceName")

try {
$result = Invoke-RestMethod -Uri $url -Credential $cred
$val = [Decimal]::ToDouble($result.PerformanceCounterData[$result.PerformanceCounterData.Count - 1].Value)
$api.LogScriptEvent("ConvergedSwitchMemoryPerformanceDataSource.ps1", 104, 0, "Memory performance $val")
$bag.AddValue("CounterName", "Memory Usage")
$bag.AddValue("Value", $val)

$api.LogScriptEvent("ConvergedSwitchMemoryPerformanceDataSource.ps1", 104, 0, "Finished converged switch memory performance data for $resourceName")
} catch {
$api.LogScriptEvent("ConvergedSwitchMemoryPerformanceDataSource.ps1", 104, 0, "Error getting performance data from $url")
}
} else {
$api.LogScriptEvent("ConvergedSwitchMemoryPerformanceDataSource.ps1", 104, 0, "Credentials not provided!")
}

$bag

</Script></ScriptBody>
<ManagementIps>$Target/Host/Host/Property[Type='UCPManagementPack.Pod']/ManagementIp$</ManagementIps>
<TimeoutSeconds>30</TimeoutSeconds>
<SourceId>$MPElement$</SourceId>
<ManagedEntityId>$Target/Id$</ManagedEntityId>
<ObjectName>Converged Network</ObjectName>
<CounterName>$Data/Property[@Name='CounterName']$</CounterName>
<InstanceName/>
<Value>$Data/Property[@Name='Value']$</Value>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="CollectToDB" TypeID="SC!Microsoft.SystemCenter.CollectPerformanceData"/>
<WriteAction ID="CollectToDW" TypeID="MSDL!Microsoft.SystemCenter.DataWarehouse.PublishPerformanceData"/>
</WriteActions>
</Rule>