Источник данных из таблицы

Started by andrey_D, November 29, 2020, 10:12:22 AM

Previous topic - Next topic

andrey_D

Подскажите пожалуйста
Есть графический линк между оборудованием и необходимо что бы на линке было значение из таблицы как это сделать?
Таблица из mac адресов со значениями мощность передачи, скорость на канале это для примера. Выбираю в качестве источника значение таблицы но значение не появляется.
Как добавить к значению единицу измерения к примеру выбираю источник скорость передачи данных, на линке появляется значение 100, как добавить мбит/с?

Victor Kirhenshtein

Quote from: andrey_D on November 29, 2020, 10:12:22 AM
Подскажите пожалуйста
Есть графический линк между оборудованием и необходимо что бы на линке было значение из таблицы как это сделать?

Табличные данные на карте не поддерживаются сейчас. Странно что он дает выбрать таблицу в списке. Сейчас единственный вариант - сделать скриптовый DCI, который будет доставать нужную ячейку из таблицы, и его уже добавлять на карту.

Quote from: andrey_D on November 29, 2020, 10:12:22 AM
Как добавить к значению единицу измерения к примеру выбираю источник скорость передачи данных, на линке появляется значение 100, как добавить мбит/с?

В свойствах источника есть строка форматированию, это стандартный Java формат с одним дополнением - можно использовать %*s для автоматической подстановки мультипликаторов. Если надо просто поставить суффикс мбит/с, то строка формата может быть

%s мбит/с


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

%*sбит/с


andrey_D


В свойствах источника есть строка форматированию, это стандартный Java формат с одним дополнением - можно использовать %*s для автоматической подстановки мультипликаторов. Если надо просто поставить суффикс мбит/с, то строка формата может быть

%s мбит/с

Спасибо за ответ!

А можно подробнее про скрипт для значений из таблицы




Filipp Sudanov

К примеру, мысобираем агентскую таблицу по параметру Agent.SubAgents. Сам этот табличный DCI назван "Loaded subagents". И там какие-то такие данные:
| NAME                | VERSION             | FILE                |
+---------------------+---------------------+---------------------+
| Linux               | 4.0.484             | linux.nsm           |
| PORTCHECK           | 4.0.484             | portcheck.nsm       |
| DBQUERY             | 4.0.484             | dbquery.nsm         |
| FILEMGR             | 4.0.484             | filemgr.nsm         |
| PING                | 4.0.484             | ping.nsm            |
| SSH                 | 4.0.484             | ssh.nsm             |
| VMGR                | 4.0.484             | vmgr.nsm            |


И мы хотим иметь DCI, в котором будет версия субагента PING. Делаем в script library скрипт:
table=GetDCIValueByDescription($node, "Loaded subagents");
if (table!=NULL)
{
  col=1;
  for (i=0; i < table->rowCount; i++)
  {
    if (table->get(i, 0) == "PING")
    {
      return table->get(i, 1);
    }
  }
}
return null;


Делаем на ноде новый DCI, выбираем тип Script, в поле parameter пишем имя под которым мы сохранили скрипт. Этот скрипт будет доставать из нашего табличного DCI значение из 1-й колонки (колонки считаются от 0) из той строки, где в 0-й колонке написано "PING".
Но сейчас у нас прямо в скрипте прописано, что именно брать, а хотелось бы, чтоб скрипт был универсальным, а мы бы ему сообщали параметрами. что именно нам нужно.

//  $1 - Table name
//  $2 - Column name from where to return the value
//  $3 - Column name where to search
//  $4 - Value to search

table=GetDCIValueByDescription($node, $1);

if (table!=NULL)
{
  col_return = table->getColumnIndex($2);
  col_search = table->getColumnIndex($3);
  if (col_search >=0 and col_return >= 0)
  {
    for (i=0; i < table->rowCount; i++)
    {
      if (table->get(i, col_search) == $4)
      {
        return table->get(i, col_return);
      }
    }
  }
}
return null;

Параметр нашего скриптового DCI теперь должне быть таким: GetTableCell(Loaded subagents, VERSION, NAME, PING).