Microsoft.SystemCenter.ApplicationMonitoring.360.Template.Dashboards.DistributedApplicationStateWidgetRefreshScript.ps1 (Resource)

Element properties:

TypeResource
File NameDistributedApplicationStateWidgetRefreshScript.ps1
AccessibilityInternal

Source Code:

<Resource ID="Microsoft.SystemCenter.ApplicationMonitoring.360.Template.Dashboards.DistributedApplicationStateWidgetRefreshScript.ps1" FileName="DistributedApplicationStateWidgetRefreshScript.ps1" Accessibility="Internal"/>

File Content: DistributedApplicationStateWidgetRefreshScript.ps1

Param($Target)


function GetLastPerfCounterValue
{
$performanceDataCollection = $globalClassInstance.GetMonitoringPerformanceData($globalCriteria)

if ($performanceDataCollection.Count -ne 1)
{
return $null
}

$performanceData = $performanceDataCollection[0]

$dataCollection = $performanceData.GetValues($startTime, $endTime)

if ($dataCollection.Count -lt 1)
{
return $null
}

$data = $dataCollection[$dataCollection.Count - 1]

return [Math]::Round($data.SampleValue,4)
}

$id = New-Object Guid($Target["Id"].ToString())

$mpInstance = Get-SCOMClassInstance -Id $id

$instance = $ScriptContext.CreateFromObject($mpInstance, "Id=Id,HealthState=HealthState,DisplayName=DisplayName", $null)

$alertCriteria = New-Object Microsoft.EnterpriseManagement.Monitoring.MonitoringAlertCriteria("Severity = 2 AND ResolutionState = 0")

$reader = $ScriptContext.ManagementGroup.OperationalData.GetPartialMonitoringAlertReader($id, $alertCriteria, [Microsoft.EnterpriseManagement.Common.TraversalDepth]::Recursive, $null, [Microsoft.EnterpriseManagement.Monitoring.MonitoringAlertProperty]::Id)

$count = 0

while ($reader.Read())
{
$count ++;
}

$instance["ActiveCriticalAlerts"] = $count

# These are the criteria used to fetch performance values
$responseTimeCriteria = New-Object Microsoft.EnterpriseManagement.Monitoring.MonitoringPerformanceDataCriteria("CounterName='Average Response Time'")
$requestsPerSecondCriteria = New-Object Microsoft.EnterpriseManagement.Monitoring.MonitoringPerformanceDataCriteria("CounterName='Total Monitored Requests/sec'")

# The perf APIs require a start and end time
$endTime = [DateTime]::UtcNow
$timeDiff = [TimeSpan]::FromHours(2)
$startTime = $endTime - $timeDiff

$globalClassInstance = $mpInstance

$globalCriteria = $responseTimeCriteria
$instance["AverageResponseTime"] = GetLastPerfCounterValue

# The total monitored request/sec counter is targeted on Presentation Tier class
$presentationTierClass = Get-SCOMClass -Name "Microsoft.SystemCenter.ApplicationMonitoring.360.Template.3TierApplication.PresentationTier.Component"
$presentationTierInstances = $mpInstance.GetRelatedMonitoringObjects() | where {$_.IsInstanceOf($presentationTierClass)}

$globalCriteria = $requestsPerSecondCriteria
foreach ($presentationTierInstance in $presentationTierInstances)
{
$globalClassInstance = $presentationTierInstance
$instance["MonitoredRequestsPerSecond"] += GetLastPerfCounterValue
}

$newList = @()

$newList += $instance

$ScriptContext.ReturnCollection.UpdateCollection($newList)