Вопрос по DCI

Started by inspirit, September 05, 2012, 03:02:36 PM

Previous topic - Next topic

inspirit

Скажите

если я знаю DCI name - например "Serial Number"
и его значение - 205003573

То как я могу определить к какой ноде он принадлежит? может скрипт какой ?

Заранее спасибо.

SKYnv

Quote from: inspirit on September 05, 2012, 03:02:36 PM
Скажите

если я знаю DCI name - например "Serial Number"
и его значение - 205003573

То как я могу определить к какой ноде он принадлежит? может скрипт какой ?

Заранее спасибо.
http://wiki.netxms.org/wiki/NXSL_Function_Reference#Data_Collection

поэкспериментируйте с данными функциями.


Victor Kirhenshtein

Quote from: inspirit on September 05, 2012, 03:02:36 PM
Скажите

если я знаю DCI name - например "Serial Number"
и его значение - 205003573

То как я могу определить к какой ноде он принадлежит? может скрипт какой ?

Заранее спасибо.

А в какой ситуации это нужно?

inspirit

ситуация проста. Знаем что в Netxms есть коммутутаторы которые стоят по городу. Через autoaply template к ним автоматически привязываются DCI при добавлении и в том числе опрос Serial Number. Ну и как водится \проектный отдел\ потерял документы по этому оборудованию и знает только его серийник. Вопрос - как узнать что это за оборудование и где оно стоит ? )) Руками искать среди сотен коммутаторов в поисках нужного серийника - как то некруто. Вот и родилась мысль )

SKYnv

#4
Quote from: inspirit
ситуация проста. Знаем что в Netxms есть коммутутаторы которые стоят по городу. Через autoaply template к ним автоматически привязываются DCI при добавлении и в том числе опрос Serial Number. Ну и как водится \проектный отдел\ потерял документы по этому оборудованию и знает только его серийник. Вопрос - как узнать что это за оборудование и где оно стоит ? )) Руками искать среди сотен коммутаторов в поисках нужного серийника - как то некруто. Вот и родилась мысль )
а, у меня похожая ситуация. Но я пойду другим немножко путем.

1) создаем нодам кастом атрибут > Serial
2) далее скриптом обходим все ноды и записываем в этот кастом атрибут нужное значение. Ну и попутно можно вывести инфу о ноде айпи и т.д. прямо в консоль.
Ну и поиск также можно организовать, перебор нод и сравнением."

плюс пролобирую еще вывод кастом атрибутов на овервиф таб https://www.netxms.org/forum/e-eoe-o-koaot-netxms/overview-tab/
Ну и неплохо бы еще функцию добавить CreateCustomAttribute($node,"attr_name")

Victor Kirhenshtein

Можно написать такой скрипт (в Script Library):


// Find "Entire Network" object and start enumeration from it
println "Searching node with serial number '" . $1 . "'...";
EnumerateNodes(FindObject(1), $1);
println "Node with serial number " . $1 . " not found";

// This function walks object tree recursively starting from given root
sub EnumerateNodes(rootObject, serialNumber)
{
    // Walk all child objects
    foreach(o : GetObjectChildren(rootObject))
    {
        if (classof(o) == "Node")
        {
            // Process node object
value = GetDCIValueByDescription(o, "Serial number");
            if (value == serialNumber)
            {
            println "Node found: " . o->name;
            exit;
            }
        }
        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)
            EnumerateNodes(o, serialNumber);
        }
    }
}


и запустить его с консоли сервера (или через nxadm) командой exec:


netxmsd: exec FindBySerial 1200
Searching node with serial number '1200'...
Node found: 10.8.0.9
INFO: Script finished with rc=0

netxmsd: exec FindBySerial 1201
Searching node with serial number '1201'...
Node with serial number 1201 not found
INFO: Script finished with rc=0


(у меня скрипт назван FindBySerial)

println в консоли будет работать только в 1.2.3-rc5 и выше, для предыдущих версий надо использовать trace и смотреть результат в логе.

Victor Kirhenshtein

Quote from: SKYnv on September 05, 2012, 06:02:01 PM
Ну и неплохо бы еще функцию добавить CreateCustomAttribute($node,"attr_name")

http://wiki.netxms.org/wiki/NXSL:SetCustomAttribute :)

SKYnv

#7
Quote from: Victor Kirhenshtein on September 05, 2012, 06:15:15 PM
Quote from: SKYnv on September 05, 2012, 06:02:01 PM
Ну и неплохо бы еще функцию добавить CreateCustomAttribute($node,"attr_name")

http://wiki.netxms.org/wiki/NXSL:SetCustomAttribute :)

Да, но там написано
SetCustomAttribute($node, "non_existing_attribute", "new value") -> NULL
а нужно
SetCustomAttribute($node, "non_existing_attribute", "new value") -> Attribute not found. Create ne attribute with name "non_existing_attribute"

для создания, а не изменения атрибутов ))

Victor Kirhenshtein

Там написано "Previous value of custom attribute or NULL if attribute was not defined before.". Т.е. если атрибут уже был, функция вернет его старое значение, а если его не было, то создаст и вернет NULL. У меня в примерах после стрелочки -> идет результат вызова функции - в данном случае это и будет NULL (предполагая что это чистая система).

SKYnv

Quote from: Victor Kirhenshtein on September 05, 2012, 06:23:54 PM
Там написано "Previous value of custom attribute or NULL if attribute was not defined before.". Т.е. если атрибут уже был, функция вернет его старое значение, а если его не было, то создаст и вернет NULL. У меня в примерах после стрелочки -> идет результат вызова функции - в данном случае это и будет NULL (предполагая что это чистая система).
хм, тогда извиняйте проглядел. Или когда экспериментировал где-то не сошлось что-то. Спасибо.

Тогда мой способ заполнения информации можно тоже смело применять ) Вот ещебы овервиф подкрутить ;)

inspirit

У меня при выполнении данного скрипта пишет

ERROR: Script finished with error: Error 14 in line 10: Function or operation argument is not an object.

Что за.. ошибся где ?

SKYnv

Quote from: inspirit on September 05, 2012, 08:37:59 PM
У меня при выполнении данного скрипта пишет

ERROR: Script finished with error: Error 14 in line 10: Function or operation argument is not an object.

Что за.. ошибся где ?

Это значит что где-то с аргументами ошибся
для отлаки можешь return'ов понаткать в коде или println

Victor Kirhenshtein

Quote from: inspirit on September 05, 2012, 08:37:59 PM
У меня при выполнении данного скрипта пишет

ERROR: Script finished with error: Error 14 in line 10: Function or operation argument is not an object.

Что за.. ошибся где ?

Скорее всего параметр сервера CheckTrustedNodes выставлен в 1. Поставьте в 0 (сервер надо быдет рестартануть после этого), должно заработать. Подробнее про CheckTrustedNodes здесь: http://wiki.netxms.org/wiki/SG:Security_Issues.

inspirit

Все получилось. Спасибо.