Отключение агентов
-
У меня следующий скрипт пропадает при раскомментировании строки с "// o->flags += 33554432;"
sub EnumerateNodes(rootObject) { //trace(1, " will disable " . rootObject->name); // Walk all child objects foreach(o : GetObjectChildren(rootObject)) { if (classof(o) == "Node") { // Process node object // trace(1, " + " . o->name); if (o->name != "localhost") { if (o->flags < 33554432) { // Error if next will be uncommented // o->flags += 33554432; trace(1, " disabled " . o->name . " " . o->flags); } } else { // trace(1, " IS SERVER " . o->name); } } 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); } } } EnumerateNodes(FindObject(1));Ошибка:
$ nxadm -c "exec DisableAgent" ERROR: Script "DisableAgent" not foundНе могу понять в чем проблема...

Как временное решение - через БД (при остановленном netxmsd):
select NODE_FLAGS from nodes where NODE_FLAGS < 33554432 and PRIMARY_IP != '127.0.0.1'; update nodes set NODE_FLAGS = NODE_FLAGS + 33554432 where NODE_FLAGS < 33554432 and PRIMARY_IP != '127.0.0.1'; commit; -
Строка
o->flags += 33554432;
дает ошибку компиляции, а поскольку команда exec ищет только скомпилированные скрипты, то выдается несколько нелогичное сообщение "script not found".
Ошибка компиляции на самом деле из-за бага в интерпретаторе NXSL - он не понимает += для аттрибутов объектов.
o->flags = o->flags + 33554432;
скомпилируется без ошибок. Кстати, дла выставления и проверки флагов надо использовать битовые операции:
o->flags = o->flags | 33554432;
тогда можно не проверять на текущее значение flags.
Однако главная проблема в том, что сейчас флаги объекта из скриптов менять нельзя (и вообще ничего нельзя) - в NXSL класс Node read-only. Я могу это поменять, но это уже будет в следующем релизе (ну или со снапшота собрать можно будет).
-
Наверное не стоит открывать классы на запись, так как ошибок подобных этой вылезет сразу очень много. А если и открывать, то необходимо проверить приведение типов к классам + проверка ошибок при компиляции скриптов...
Возникает вопрос, как наиболее правильно добавлять подобный функционал? Через API? -
Можно добавить функции или методы в NXSL класс для изменения конкретных флажков или аттрибутов (как сделано например сейчас с ManageObject или RenameObject).
-
-
Добавил новые методы в класс Node: enableAgent, enableConfigurationPoll, enableIcmp, enableSnmp, enableStatusPoll, enableTopologyPoll.
Теперь в скрипте можно написатьo->enableAgent(false);
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