Veeam Virtualization Extensions Health Service configuration monitor type

Veeam.Virt.Extensions.VMware.HealthServiceRegistry.MonitorType (UnitMonitorType)

Element properties:

RunAsDefault
AccessibilityInternal
Support Monitor RecalculateFalse

Member Modules:

ID Module Type TypeId RunAs 
Reg DataSource System.CommandExecuterPropertyBagSource Default
OkFilter ConditionDetection System.ExpressionFilter Default
ProblemFilter ConditionDetection System.ExpressionFilter Default

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
PersistenceCacheMaximumint$Config/PersistenceCacheMaximum$PersistenceCacheMaximum
PersistenceCheckpointDepthMaximumint$Config/PersistenceCheckpointDepthMaximum$PersistenceCheckpointDepthMaximum
PersistenceVersionStoreMaximumint$Config/PersistenceVersionStoreMaximum$PersistenceVersionStoreMaximum
StateQueueItemsint$Config/StateQueueItems$StateQueueItems
MaximumQueueSizeKbint$Config/MaximumQueueSizeKb$MaximumQueueSizeKb
Frequencyint$Config/Frequency$Frequency

Source Code:

<UnitMonitorType ID="Veeam.Virt.Extensions.VMware.HealthServiceRegistry.MonitorType" Accessibility="Internal">
<MonitorTypeStates>
<MonitorTypeState ID="Ok" NoDetection="false"/>
<MonitorTypeState ID="NotOk" NoDetection="false"/>
</MonitorTypeStates>
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="PersistenceCacheMaximum" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="PersistenceCheckpointDepthMaximum" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="PersistenceVersionStoreMaximum" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="StateQueueItems" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="MaximumQueueSizeKb" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="Frequency" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="MGName" type="xsd:string"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="PersistenceCacheMaximum" Selector="$Config/PersistenceCacheMaximum$" ParameterType="int"/>
<OverrideableParameter ID="PersistenceCheckpointDepthMaximum" Selector="$Config/PersistenceCheckpointDepthMaximum$" ParameterType="int"/>
<OverrideableParameter ID="PersistenceVersionStoreMaximum" Selector="$Config/PersistenceVersionStoreMaximum$" ParameterType="int"/>
<OverrideableParameter ID="StateQueueItems" Selector="$Config/StateQueueItems$" ParameterType="int"/>
<OverrideableParameter ID="MaximumQueueSizeKb" Selector="$Config/MaximumQueueSizeKb$" ParameterType="int"/>
<OverrideableParameter ID="Frequency" Selector="$Config/Frequency$" ParameterType="int"/>
</OverrideableParameters>
<MonitorImplementation>
<MemberModules>
<DataSource ID="Reg" TypeID="System!System.CommandExecuterPropertyBagSource">
<IntervalSeconds>$Config/Frequency$</IntervalSeconds>
<ApplicationName>%windir%\system32\cscript.exe</ApplicationName>
<WorkingDirectory/>
<CommandLine>/nologo $File/GetAgentSettings.js$ "$Config/MGName$"</CommandLine>
<TimeoutSeconds>300</TimeoutSeconds>
<RequireOutput>true</RequireOutput>
<Files>
<File>
<Name>GetAgentSettings.js</Name>
<Contents><Script>

var SCRIPT_NAME = "GetAgentSettings.js";
var SEVERITY_ERROR = 1;
var SEVERITY_WARNING = 2;
var SEVERITY_INFO = 4;
var EVENT_ID = 990;
var ARGUMENT_COUNT = 1;

if (WScript.Arguments.length != ARGUMENT_COUNT) {
WScript.Quit(0);
}
var targetMGName = WScript.Arguments(0);

var HKLM = 0x80000002;
var regPath = "SYSTEM\\CurrentControlSet\\Services\\HealthService\\Parameters";
var regPathMG = "SYSTEM\\CurrentControlSet\\Services\\HealthService\\Parameters\\Management Groups";

var momApi = new ActiveXObject("MOM.ScriptAPI");
var bag = momApi.CreatePropertyBag();

Main();

function Main() {
var persistenceVersionStoreMax = 0;
var persistenceCacheMax = 0;
var persistenceCheckpointDepthMax = 0;
var stateQueueItems = 0;
var maxQueueSizeKb = 0;

var locator = new ActiveXObject("WbemScripting.SWbemLocator");
try {
var svc = locator.ConnectServer(null, "root\\default");
var reg = svc.Get("StdRegProv");

var method = reg.Methods_.Item("GetDWORDValue");
var inParam = method.InParameters.SpawnInstance_();
inParam.hDefKey = HKLM;
inParam.sSubKeyName = regPath;
inParam.sValueName = "Persistence Version Store Maximum";

var outParam = reg.ExecMethod_(method.Name, inParam);
if (outParam.uValue != null)
persistenceVersionStoreMax = outParam.uValue;

inParam.sValueName = "Persistence Cache Maximum";

outParam = reg.ExecMethod_(method.Name, inParam);
if (outParam.uValue != null)
persistenceCacheMax = outParam.uValue;

inParam.sValueName = "Persistence Checkpoint Depth Maximum";

outParam = reg.ExecMethod_(method.Name, inParam);
if (outParam.uValue != null)
persistenceCheckpointDepthMax = outParam.uValue;

inParam.sValueName = "State Queue Items";

outParam = reg.ExecMethod_(method.Name, inParam);
if (outParam.uValue != null)
stateQueueItems = outParam.uValue;

var enumKeyMethod = reg.Methods_.Item("EnumKey");
var enumKeyInParam = enumKeyMethod.InParameters.SpawnInstance_();
enumKeyInParam.hDefKey = HKLM;
enumKeyInParam.sSubKeyName = regPathMG;


outParam = reg.ExecMethod_(enumKeyMethod.Name, enumKeyInParam);
if (outParam.sNames != null) {
var enumValuesMethod = reg.Methods_.Item("EnumValues");
var enumValuesInParam = enumValuesMethod.InParameters.SpawnInstance_();
enumValuesInParam.hDefKey = HKLM;

var vbArr = new VBArray(outParam.sNames);
var mgArray = vbArr.toArray();

for (var i = 0; i &lt; mgArray.length; i++) {
var mgName = mgArray[i];
if (mgName.toLowerCase() == targetMGName.toLowerCase()) {
enumValuesInParam.sSubKeyName = regPathMG + "\\" + mgName;
outParam = reg.ExecMethod_(enumValuesMethod.Name, enumValuesInParam);
if (outParam.sNames != null) {
vbArr = new VBArray(outParam.sNames);
var queueSizeArray = vbArr.toArray();
for (var j = 0; j &lt; queueSizeArray.length; j++) {
if (queueSizeArray[j].toString().toLowerCase() == "maximumqueuesizekb".toLowerCase()) {
inParam.sSubKeyName = regPathMG + "\\" + mgName;
inParam.sValueName = "maximumQueueSizeKb";
outParam = reg.ExecMethod_(method.Name, inParam);
if (outParam.uValue != null)
maxQueueSizeKb = outParam.uValue;
}
}
}
}
}
}
} catch (e) {
LogScriptEvent(e.Message, SEVERITY_ERROR);
}

bag.AddValue("PersistenceVersionStoreMax", persistenceVersionStoreMax);
bag.AddValue("PersistenceCacheMax", persistenceCacheMax);
bag.AddValue("PersistenceCheckpointDepthMax", persistenceCheckpointDepthMax);
bag.AddValue("StateQueueItems", stateQueueItems);
bag.AddValue("MaxQueueSizeKb", maxQueueSizeKb);
momApi.Return(bag);
}

function LogScriptEvent(message_in, severity_in) {
momApi.LogScriptEvent(SCRIPT_NAME, EVENT_ID, severity_in, message_in);
}

</Script></Contents>
<Unicode>false</Unicode>
</File>
</Files>
</DataSource>
<ConditionDetection ID="OkFilter" TypeID="System!System.ExpressionFilter">
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Integer">Property[@Name="PersistenceVersionStoreMax"]</XPathQuery>
</ValueExpression>
<Operator>GreaterEqual</Operator>
<ValueExpression>
<Value Type="Integer">$Config/PersistenceVersionStoreMaximum$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Integer">Property[@Name="PersistenceCacheMax"]</XPathQuery>
</ValueExpression>
<Operator>GreaterEqual</Operator>
<ValueExpression>
<Value Type="Integer">$Config/PersistenceCacheMaximum$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Integer">Property[@Name="PersistenceCheckpointDepthMax"]</XPathQuery>
</ValueExpression>
<Operator>GreaterEqual</Operator>
<ValueExpression>
<Value Type="Integer">$Config/PersistenceCheckpointDepthMaximum$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Integer">Property[@Name="StateQueueItems"]</XPathQuery>
</ValueExpression>
<Operator>GreaterEqual</Operator>
<ValueExpression>
<Value Type="Integer">$Config/StateQueueItems$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Integer">Property[@Name="MaxQueueSizeKb"]</XPathQuery>
</ValueExpression>
<Operator>GreaterEqual</Operator>
<ValueExpression>
<Value Type="Integer">$Config/MaximumQueueSizeKb$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</ConditionDetection>
<ConditionDetection ID="ProblemFilter" TypeID="System!System.ExpressionFilter">
<Expression>
<Or>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Integer">Property[@Name="PersistenceVersionStoreMax"]</XPathQuery>
</ValueExpression>
<Operator>Less</Operator>
<ValueExpression>
<Value Type="Integer">$Config/PersistenceVersionStoreMaximum$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Integer">Property[@Name="PersistenceCacheMax"]</XPathQuery>
</ValueExpression>
<Operator>Less</Operator>
<ValueExpression>
<Value Type="Integer">$Config/PersistenceCacheMaximum$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Integer">Property[@Name="PersistenceCheckpointDepthMax"]</XPathQuery>
</ValueExpression>
<Operator>Less</Operator>
<ValueExpression>
<Value Type="Integer">$Config/PersistenceCheckpointDepthMaximum$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Integer">Property[@Name="StateQueueItems"]</XPathQuery>
</ValueExpression>
<Operator>Less</Operator>
<ValueExpression>
<Value Type="Integer">$Config/StateQueueItems$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Integer">Property[@Name="MaxQueueSizeKb"]</XPathQuery>
</ValueExpression>
<Operator>Less</Operator>
<ValueExpression>
<Value Type="Integer">$Config/MaximumQueueSizeKb$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</Or>
</Expression>
</ConditionDetection>
</MemberModules>
<RegularDetections>
<RegularDetection MonitorTypeStateID="Ok">
<Node ID="OkFilter">
<Node ID="Reg"/>
</Node>
</RegularDetection>
<RegularDetection MonitorTypeStateID="NotOk">
<Node ID="ProblemFilter">
<Node ID="Reg"/>
</Node>
</RegularDetection>
</RegularDetections>
</MonitorImplementation>
</UnitMonitorType>