как сделать суммирующий график?
-
-
Я бы предложил на какой-нибудь ноде сделать script DCI. Скрипт пройдется по всем нодам, просуммирует значения, и вернет сумму. Типа такого:
// Hash map to avoid duplicates global processedNodes = %{}; // Find "Entire Network" object and start enumeration from it return CalculateTotal(FindObject(1)); // This function walks object tree recursively starting from given root sub CalculateTotal(rootObject) { sum = 0.0; // Walk all child objects foreach(o : GetObjectChildren(rootObject)) { if (classof(o) == "Node") { if (processedNodes[o->id] == null) { v = GetDCIValueByName(o, "System.CPU.Usage"); if (v != null) sum += real(v); processedNodes[o->id] = 1; // actual value is irrelevant, it's just a flag } } else if (classof(o) == "NetObj") { // For all other objects, go down the tree // There can be additional checks for object class, like // if (o->type == 5) sum += CalculateTotal(o); } } return sum; }Конечно надо поставить корректное имя параметра в GetDCIValueByName. Можно его также передавать как параметр DCI, тогда будет универсальный скрипт.
-
А можно чуть подробнее, в привязке к моим нуждам.
- Где этот скрип прописывать?
Создать в какой-нибудь ноде DCI и в Tranformation?
Или в Script Library? - Вот у меня есть дерево SERVERS/TERMINALS
Как суммировать во всех нодах в этом дереве, которые начинаются на TER00, параметр с именем "Terminal - Active Sessions"?
- Где этот скрип прописывать?
-
Скрипт создавать в ScriptLibrary. Конкретный скрипт будет такой (я так понял что название верхнего контейнера "SERVERS/TERMINALS"):
// Hash map to avoid duplicates global processedNodes = %{}; // Find "Entire Network" object and start enumeration from it return CalculateTotal(FindObject("SERVERS/TERMINALS")); // This function walks object tree recursively starting from given root sub CalculateTotal(rootObject) { sum = 0.0; // Walk all child objects foreach(o : GetObjectChildren(rootObject)) { if (classof(o) == "Node") { if ((processedNodes[o->id] == null) && (o->name ilike "TER00*")) { v = GetDCIValueByDescription(o, "Terminal - Active Sessions"); if (v != null) sum += real(v); processedNodes[o->id] = 1; // actual value is irrelevant, it's just a flag } } else if (classof(o) == "NetObj") { // For all other objects, go down the tree // There can be additional checks for object class, like // if (o->type == 5) sum += CalculateTotal(o); } } return sum; } -
-
В FindObject передается имя объекта или его идентификатор. Я не сообразил что SERVERS/TERMINALS скорее всего имелось ввиду контейнер TERMINALS в контейнере SERVERS. Если это так, то надо как параметр передавать строку "TERMINALS".
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login