Как подсчитать сумму DCI для трафика?

Started by Alex, June 15, 2016, 02:11:36 PM

Previous topic - Next topic

Alex

Приветствую!

Есть несколько DCI на ноде для подсчета Inbound и Outbound трафика. К примеру их 3 входящих и 3 исходящих. Мне нужно подсчитать сумму для двух из трех как на вход, так и на выход.
Как это можно реализовать?

Спасибо.

Alex Kirhenshtein

добавить еще один DCI с source=Script.
Скрипт примерно такой:
v1=GetDCIValueByName($node, "TrafficDci1");
v2=GetDCIValueByName($node, "TrafficDci2");
v3=GetDCIValueByName($node, "TrafficDci3");
return v1 + v2 + v3;

Или без скрипта в library - source=Internal, DCI=Dummy, скрипт прописать прямо в Transformation script.

Alex

В этом случае нужно задавать полное название интерфейсов DCI или же можно как-то по маске?

Alex Kirhenshtein

https://wiki.netxms.org/wiki/NXSL:FindAllDCIs

Как-то так (код не проверял):

total = 0;
dciList = FindAllDCIs($node, "System.CPU.Usage(*)");
foreach (dci : dciList) {
  total += GetDCIValue($node, dci->id);
}
return total;


Alex

Выкрутился иначе. Создал два скрипта, один на входящий, второй на исходящий трафик. Ищу по полному названию DCI.

sub main()
{
   // Search for node named "gateway"
   gw_node = FindObject($1);
   
   if (gw_node == null)
      return 0;   // No such node or access denied

   // from here, gw_node can be used in a same way as $node, for example:
   v1 = GetDCIValue(gw_node, FindDCIByDescription(gw_node, "Inbound traffic on COMPANY1"));
   v2 = GetDCIValue(gw_node, FindDCIByDescription(gw_node, "Inbound traffic on COMPANY2"));
   tot = v1 + v2;
   if (tot > 0)
   return tot;
   else
   return 0;
}


Спасибо.