Veeam Dropped Network Packets Script Probe Action

Veeam.Virt.Extensions.VMware.Monitoring.DroppedNetworkPackets.ScriptProbe (ProbeActionModuleType)

Element properties:

TypeProbeActionModuleType
IsolationAny
AccessibilityInternal
RunAsDefault
InputTypeSystem.BaseData
OutputTypeSystem.PropertyBagData

Member Modules:

ID Module Type TypeId RunAs 
TopNScriptProbe ProbeAction Veeam.Virt.Extensions.ScriptProbe.PropertyBag Default

Source Code:

<ProbeActionModuleType ID="Veeam.Virt.Extensions.VMware.Monitoring.DroppedNetworkPackets.ScriptProbe" Accessibility="Internal" Batching="false" PassThrough="false">
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="DroppedPacketsTotal" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="HostName" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="InstanceCount" type="xsd:string"/>
</Configuration>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<ProbeAction ID="TopNScriptProbe" TypeID="VeeamVEBaseDisc!Veeam.Virt.Extensions.ScriptProbe.PropertyBag">
<ScriptName>HostDroppedPackets.js</ScriptName>
<Arguments>$Config/DroppedPacketsTotal$ $Config/HostName$ $Config/InstanceCount$</Arguments>
<ScriptBody><Script>// HostDroppedPackets.js
var ARGUMENT_COUNT = 3;

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

var dPackets = convertArg(WScript.Arguments(0));
var hostName = WScript.Arguments(1);
var TopN = convertArg(WScript.Arguments(2));

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

var dPacketsNicName = "";
var dPacketsRX = "";
var dPacketsTX = "";
var switchName = "";
var maxdPackets = -1;
var isDVS = false;

var dict = new ActiveXObject("Scripting.Dictionary");
var keys = new Array();
var wql = "SELECT droppedPacketsTotal, droppedRx, droppedTx, netName, switchName, isDVS FROM HostNetStats WHERE hostName = '" + hostName + "'";
var items = GetObject("winmgmts:\\\\.\\root\\nworks").ExecQuery(wql);
for (var enumItems = new Enumerator(items); !enumItems.atEnd(); enumItems.moveNext()) {
var item = enumItems.item();
var colProps = new Enumerator(item.Properties_);
var currdPackets = 0;
var currNicName = "";
var currRX = 0;
var currTX = 0;
var currSwitchName = "";
for (; !colProps.atEnd(); colProps.moveNext()) {
var p = colProps.item();
if (p.Name == "droppedPacketsTotal")
currdPackets = p.Value;
if (p.Name == "droppedRx")
currRX = p.Value;
if (p.Name == "droppedTx")
currTX = p.Value;
if (p.Name == "netName")
currNicName = p.Value;
if (p.Name == "switchName")
currSwitchName = p.Value;
if (p.Name == "isDVS")
isDVS = p.Value;
}

if (currdPackets &gt; maxdPackets) {
maxdPackets = currdPackets;
dPacketsNicName = currNicName;
dPacketsRX = currRX;
dPacketsTX = currTX;
switchName = currSwitchName;
}

if (currNicName != "" &amp;&amp; currdPackets != "") {
if (!dict.Exists(currNicName)) {
dict.Add(currNicName, currdPackets);
keys.push(currNicName);
}
}
}

keys.sort(function (a, b) {
var avalue = parseInt(dict.Item(a));
var bvalue = parseInt(dict.Item(b));
return avalue &lt; bvalue ? 1 : avalue &gt; bvalue ? -1 : 0;
});

var topNicsText = "";
if (keys.length &gt; 0) {
for (var i = 0; i &lt; keys.length; i++) {
if (i &gt;= TopN)
break;
topNicsText += keys[i] + " - " + dict.Item(keys[i]) + "\r\n";
}
}

var switchTxt = "";
if (switchName != "") {
switchTxt = "This adapter is attached to";
if (isDVS) {
switchTxt += " Distributed";
}
switchTxt += " Virtual Switch " + switchName + ".";
}

bag.AddValue("TotalDroppedPackets", dPackets);
bag.AddValue("NicName", dPacketsNicName);
bag.AddValue("NicDroppedPackets", maxdPackets);
bag.AddValue("NicDroppedRx", dPacketsRX);
bag.AddValue("NicDroppedTx", dPacketsTX);
bag.AddValue("SwitchName", switchTxt);
bag.AddValue("InstanceCount", TopN);
bag.AddValue("Instances", topNicsText);

momApi.Return(bag);


function isNumber(n) {
return !isNaN(parseFloat(n)) &amp;&amp; isFinite(n);
}

function isInt(n) {
return n % 1 === 0;
}

function convertArg(a) {
var replaced = false;
if (a.indexOf(',') &gt; 0) {
var b = a.replace(',', '.');
replaced = true;
} else {
b = a;
}

if (isNumber(b)) {
if (!isInt(b)) {
b = Math.round(b * 100) / 100;
} else {
b = parseInt(b);
}
}

if (replaced) {
b = (b + "").replace('.', ',');
}

return b;
}</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</ProbeAction>
</MemberModules>
<Composition>
<Node ID="TopNScriptProbe"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.PropertyBagData</OutputType>
<InputType>System!System.BaseData</InputType>
</ProbeActionModuleType>