К примеру, мысобираем агентскую таблицу по параметру 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).