Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (Flatly)
  • No Skin
Collapse
Brand Logo

NetXMS Forum

  1. Home
  2. Support (Russian)
  3. как сделать суммирующий график?

как сделать суммирующий график?

Scheduled Pinned Locked Moved Support (Russian)
6 Posts 2 Posters 21.6k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A
    A
    Akira
    wrote on last edited by
    #1

    Туплю.
    Надо сделать график, в котором будет сумма DCI с 30 серверов (активные сессии).
    Т.е. нудо получить одно значение, которое покажет сколько всего сессий.
    Как это сделать?

    1 Reply Last reply
    0
    • V
      V
      Victor Kirhenshtein
      wrote on last edited by
      #2

      Я бы предложил на какой-нибудь ноде сделать 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, тогда будет универсальный скрипт.

      1 Reply Last reply
      0
      • A
        A
        Akira
        wrote on last edited by
        #3

        А можно чуть подробнее, в привязке к моим нуждам.

        1. Где этот скрип прописывать?
              Создать в какой-нибудь ноде DCI и в Tranformation?
              Или в Script Library?
        2. Вот у меня есть дерево SERVERS/TERMINALS
              Как суммировать во всех нодах в этом дереве, которые начинаются на TER00, параметр с именем "Terminal - Active Sessions"?
        1 Reply Last reply
        0
        • V
          V
          Victor Kirhenshtein
          wrote on last edited by
          #4

          Скрипт создавать в 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;
          }
          
          1 Reply Last reply
          0
          • A
            A
            Akira
            wrote on last edited by
            #5

            Сделал в ноде DCI, режим Script, выбрал скрипт (пробовал оба варианта в этой теме)

            Вот эта строка почему-то мешала
            return CalculateTotal(FindObject("SERVERS/TERMINALS"));

            Сделал
            return CalculateTotal(FindObject(12945));

            1 Reply Last reply
            0
            • V
              V
              Victor Kirhenshtein
              wrote on last edited by
              #6

              В FindObject передается имя объекта или его идентификатор. Я не сообразил что SERVERS/TERMINALS скорее всего имелось ввиду контейнер TERMINALS в контейнере SERVERS. Если это так, то надо как параметр передавать строку "TERMINALS".

              1 Reply Last reply
              0

              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
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              • Login

              • Don't have an account? Register

              • Login or register to search.
              Powered by NodeBB Contributors
              • First post
                Last post
              0
              • Categories
              • Recent
              • Tags
              • Popular
              • Users
              • Groups