Мониторинг APC

Started by comfortal, November 18, 2021, 02:17:45 PM

Previous topic - Next topic

comfortal

Получилось вот так:

if (classof($object) == "Node" and capabilities == "0x00000001")
{
  $object->enableEtherNetIP(false);
  $object->enableAgent(false);
  $node->rename($node->ipAddr);
  $node->setAlias($node->snmpSysName);
}
/* Для принтеров Kyocera установить alias из SysLocation */
if (classof($object) == "Node" and $node->snmpOID == ".1.3.6.1.4.1.1347.41") $node->setAlias($node->snmpSysLocation);

Появились еще вопросы:

  • Правильно я понял, что указывая capabilities == "0x00000001" скрипт будет выбирать устройства только с SNMP?
  • Как там же получить значение oid=.1.3.6.1.4.1.318.1.1.1.1.1.2.0 и вставить его в алиас, просто в ИПБ APC у нас не везде используется SysLocation

Filipp Sudanov

В capabilites кроме младшего бита, который isSNMP могут быть взведены еще какие-то биты. Поэтому лучше проверять накладывая битовую маску бинарным and:
if ($node->capabilities & 0x00000001)

Пример чтения значения по SNMP есть тут: https://www.netxms.org/documentation/nxsl-latest/#_read_snmp_value_from_node



comfortal

Почему то у меня ошибка в строке: transport = FindObject($1)->createSNMPTransport();

Error 14 in line 40: Function or operation argument is not an object

Filipp Sudanov

Для дебага эту строчку можно переписать так:

trace(0, "$1: " . $1)
o = FindObject($1);
trace(0, "Found object: " . o->name);
transport = o->createSNMPTransport();

здесь мы сначала проверим, что в $1 есть название или ID объекта а потом проверим, что FindObject действительно смог найти объект. А $1 вообще откуда в вашем скрипте должне был присвоен? Если это configuration poll, то там выставляются $node и $object и надо так:

transport = $node->createSNMPTransport();

comfortal

Спасибо, сделал так:

transport = $node->createSNMPTransport();
      if (transport == null)
         {
             println "Failed to create SNMP transport, exit";
             return 1;
         }

   value = SNMPGetValue(transport, ".1.3.6.1.4.1.318.1.1.1.1.1.2.0");
      if (value == null)
         {
             println "Failed to issue SNMP GET request";
             return 2;
         }
         else
         {
             $node->setAlias(value);
             return 0;
         }
И получил то что мне нужно, просто в программировании несилен и просто скопировал строчки из предложенного примера, а $1 оказывается пусто