Как получить значения DCI с другой ноды?

Started by kozlov_ao, September 17, 2009, 01:32:05 PM

Previous topic - Next topic

kozlov_ao

Есть скрипт:
GetDCIValue($node, FindDCIByDescription($node, "Number of input bytes on interface INET"));
Можно ли как нибудь в подобных скриптах использовать не $node, а например support_cmp, т.е. имя какой нибудь другой ноды?

Victor Kirhenshtein

Напрямую из скрипта это сделать нельзя. Но есть обходной путь - делается еще один DCI, у которого как proxy выставляется та нода, откуда надо получить значение. Ну а дальше как обычно.

kozlov_ao

Виктор, не получилось.. :(
Мои действия:
Есть две ноды - А и В. На обеих режим прокси включен. Также, на обеих нодах есть DCI "Status". У хоста А ID статуса 4590, у хоста В ID статуса 3662.
На ноде А делаю DCI (Proxy не указываю), в Transformation script делаю:
sub main()
{
$ts = FindDCIByDescription($node, "Status");
return $ts;
}

Все работает. Возвращается значение 4590, т.е. то, что нужно.
В свойствах этого-же DCI добавляю в качестве Proxy ноду В, и все. Значения больше не собираются., а сам DCI становиться красным. При этом, когда DCI покраснел, его трудно удалить. Консоль при удалении, начинает ругаться на Time Out.. Версия агентов и сервера 0.2.24.
Может что неправильно делаю... ???
Не подскажете, что можно сделать? Уже всю голову сломал, но это очень нужно..  :(

Victor Kirhenshtein

Esli noda B postavlena kak proxy dlja DCI nodi A, to nado v svojstvah nodi B dobavit' nodu A v spisok "Trusted Nodes". Eto sdelano dlja bezopasnosti - inache pol'zovatel', u kotorogo est'; prava rabotat' s nodoj A, no net prav rabotat' s nodoj B, cherez proxy mehanizm mog bi nastroit' poluchenie dannih s nodi B. Alternativnij variant - voobsche otkljuchit' etu proverku, vistaviv parametr servera CheckTrustedNodes v 0.

kozlov_ao

Виктор, это опять я... :) простите, но не работает. :(
Проверку отключал, в Trusted Nodes добавлял. Теперь не краснеет. Только ведет себя как-то непонятно.
Если на ноде А оставить скрипт:
sub main()
{
$ts = FindDCIByDescription($node, "Status");
return $ts;
}

то, не важно, добавлена нода В как прокси или нет, выдается значение локального ID статуса, т.е. от ноды А.
Если пробовать вместо $node писать (хоть с кавычками, хоть без) имя ноды В, или ее ID, то выдается результат 0, как будто DCI не найден.

Victor Kirhenshtein

Esli ja pravil'no ponjal, to sejchas na node A dva DCI s identichnimi description'ami - "Status". Poetomu FindDCIByDescription nahodit pervij popavshijsja s takim opisaniem, i eto okazivaetsja lokal'nij. Nado sdelat' unikal'nij description dlja DCI.

kozlov_ao

Я тоже так подумал, поэтому сделал тестовый DCI с Description 1234. Но возврат значения был так-же 0. :( Сейчас обновляюсь на 0.2.27. Может там это лучше получиться сделать.. Как попробую отпишусь.

Нет, не помогло.... Проверял разные скрипты. Искал и по описанию и по имени..

Victor Kirhenshtein

Tol'ko chto zametil - v skripte toze oshibka. FindDCIByDescription nahodit DCI i vozvraschaet sootvetstvujuschij ob'ekt - a znachenie poluchaet funkcija GetDCIValue. T.e. skript dolzen vigljadet' tak:


sub main()
{
$ts = FindDCIByDescription($node, "description here");
return GetDCIValue($node, $ts);
}


Proveril u sebja - rabotaet.

kozlov_ao

Виктор, убейте меня....ну не понимаю, почему у меня не работает. Можете написать пример для тех кто на бронепоезде? Все правильно указано, а результат в итоге - "0"!  :(

Заранее спасибо за помощь!

Может есть какая-нибудь возможность детально посмотреть, что он делает, куда лезет и что пытается найти?

Victor Kirhenshtein

На моей тестовой системе сделано так:

Есть нода NETXMS, на ней я хочу получить DCI со значением статуса с ноды catalyst-2900-central.radensolutions.com.

На скриншоте #1 - trusted nodes для catalyst-2900-central.radensolutions.com;
На скриншоте #2 - last values для catalyst-2900-central.radensolutions.com - видно что статус равен 4;
На скриншоте #3 - DCI, созданный на ноде NETXMS для получения статуса с ноды catalyst-2900-central.radensolutions.com;
На скриншоте #4 - DCI, созданный на ноде NETXMS, в котором я хочу получить статус ноды catalyst-2900-central.radensolutions.com в скрипте; я использовал dummy параметр, но он может быть любым;
На скриншоте #5 - transformation script для этого DCI.

Victor Kirhenshtein

И еще один скриншот (в одном посте можно только 5) - last values для ноды NETXMS. Видно что у параметра dummy значение 4, как и должно быть.

kozlov_ao

Спасибо Виктор! Теперь заработало... Я немного не так делал.. :)
Спасибо еще раз!