Replica Delta Percent Monitor Type

Microsoft.Windows.HyperV.ReplicaDeltaPercentMonitorType (UnitMonitorType)

Replica Delta Percent monitor type.

Element properties:

RunAsDefault
AccessibilityPublic
Support Monitor RecalculateFalse

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource System.Performance.DeltaDataProvider Default
CDOnCritical ConditionDetection System.ExpressionFilter Default
CDOnhealthy ConditionDetection System.ExpressionFilter Default
Computation ConditionDetection System.Computation Default
PerfMapper ConditionDetection System.Performance.DataGenericMapper Default

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
IntervalSecondsint$Config/IntervalSeconds$Interval SecondsInterval Seconds
ErrorLevelPercentageint$Config/ErrorLevelPercentage$Error Level PercentageError Level Percentage

Source Code:

<UnitMonitorType ID="Microsoft.Windows.HyperV.ReplicaDeltaPercentMonitorType" Accessibility="Public">
<MonitorTypeStates>
<MonitorTypeState ID="ReplicationCountPercentHealthy" NoDetection="false"/>
<MonitorTypeState ID="ReplicationCountPercentCritical" NoDetection="false"/>
</MonitorTypeStates>
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="IntervalSeconds" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="ErrorLevelPercentage" type="xsd:integer"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" Selector="$Config/IntervalSeconds$" ParameterType="int"/>
<OverrideableParameter ID="ErrorLevelPercentage" Selector="$Config/ErrorLevelPercentage$" ParameterType="int"/>
</OverrideableParameters>
<MonitorImplementation>
<MemberModules>
<DataSource ID="DS" TypeID="SystemPerf!System.Performance.DeltaDataProvider">
<CounterName>Replication Count</CounterName>
<ObjectName>Hyper-V Replica VM</ObjectName>
<InstanceName>$Target/Property[Type="HVLib!Microsoft.Windows.HyperV.VirtualMachine"]/VirtualMachineName$</InstanceName>
<Frequency>$Config/IntervalSeconds$</Frequency>
<NumSamples>1</NumSamples>
</DataSource>
<ConditionDetection ID="Computation" TypeID="System!System.Computation">
<NumericValue>
<BranchValueExpression>
<!-- Scriptish explanation of flow and calculations below
if (Delta_ReplicationCount > 0 && IntervalSeconds > 0)
{
Const_ReplicationFrequencyInSeconds = 300
Config_IntervalSeconds = $Config/IntervalSeconds$
Delta_ReplicationCount = $Data/Value$

ReplicationsInConfigInterval = Config_IntervalSeconds / 300
Percent_ReplicationCount = 100 * ( Delta_ReplicationCount / ReplicationsInConfigInterval )
Percent_ReplicationCount = 100 * ( 300 * Delta_ReplicationCount / Config_IntervalSeconds )
Percent_MissedReplicationCount = 100 - (30000 * Delta_ReplicationCount / Config_IntervalSeconds )
}
else
{
return 0
}
-->
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Double">Value</XPathQuery>
</ValueExpression>
<Operator>GreaterEqual</Operator>
<ValueExpression>
<Value Type="Double">0.0</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<NumericValue>
<Value>$Config/IntervalSeconds$</Value>
</NumericValue>
</ValueExpression>
<Operator>Greater</Operator>
<ValueExpression>
<Value Type="Double">0.0</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
<TrueValueExpression>
<!--Calculate the Percentage of Missed Replication Count -->
<NumericValue>
<Subtraction>
<NumericValue>
<Value>100</Value>
</NumericValue>
<NumericValue>
<Product>
<NumericValue>
<Division>
<NumericValue>
<XPathQuery Type="Double">Value</XPathQuery>
</NumericValue>
<NumericValue>
<Value>$Config/IntervalSeconds$</Value>
</NumericValue>
</Division>
</NumericValue>
<NumericValue>
<Value>30000</Value>
</NumericValue>
</Product>
</NumericValue>
</Subtraction>
</NumericValue>
</TrueValueExpression>
<FalseValueExpression>
<NumericValue>
<Value>0</Value>
</NumericValue>
</FalseValueExpression>
</BranchValueExpression>
</NumericValue>
</ConditionDetection>
<ConditionDetection ID="PerfMapper" TypeID="SystemPerf!System.Performance.DataGenericMapper">
<ObjectName>Hyper-V Replica VM</ObjectName>
<CounterName>Replication Count Percent</CounterName>
<InstanceName>$Target/Property[Type="HVLib!Microsoft.Windows.HyperV.VirtualMachine"]/VirtualMachineName$</InstanceName>
<Value>$Data/Value$</Value>
</ConditionDetection>
<ConditionDetection ID="CDOnhealthy" TypeID="System!System.ExpressionFilter">
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Double">Value</XPathQuery>
</ValueExpression>
<Operator>Less</Operator>
<ValueExpression>
<Value Type="Double">$Config/ErrorLevelPercentage$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</ConditionDetection>
<ConditionDetection ID="CDOnCritical" TypeID="System!System.ExpressionFilter">
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Double">Value</XPathQuery>
</ValueExpression>
<Operator>GreaterEqual</Operator>
<ValueExpression>
<Value Type="Double">$Config/ErrorLevelPercentage$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</ConditionDetection>
</MemberModules>
<RegularDetections>
<RegularDetection MonitorTypeStateID="ReplicationCountPercentHealthy">
<Node ID="CDOnhealthy">
<Node ID="PerfMapper">
<Node ID="Computation">
<Node ID="DS"/>
</Node>
</Node>
</Node>
</RegularDetection>
<RegularDetection MonitorTypeStateID="ReplicationCountPercentCritical">
<Node ID="CDOnCritical">
<Node ID="PerfMapper">
<Node ID="Computation">
<Node ID="DS"/>
</Node>
</Node>
</Node>
</RegularDetection>
</RegularDetections>
</MonitorImplementation>
</UnitMonitorType>