Как сделать связь с упавшим узлом в дашборде и его местом на карте. А то тех .поддержка скоро с ума сойдет. чтобы можно было нажать на хост и попасть на карту.Подскажите хоть направление, где копать.
Ad Widget
Collapse
Карты+Дашборд
Collapse
X
-
И еще вопрос в догонку. В подписях к картам можно использовать такой макрос: {host:key.func(param)}. Я добавил {host:IF_MIB__ifHCOutOctets.30.last(0)}. Все показывает ок. Добавил еще одно значение {host:IF_MIB__ifHCInOctets.30.last(0)}. Стал показывать "???". То есть нельзя добавить два и более макроса? А почему? Это вопрос пока без практической составляющей, просто наткнулся на такое...Last edited by iks; 09-12-2010, 14:32.Comment
-
Не совсем так. Если рассматривать maps.inc.php, функцию expand_map_element_label_by_data , то можно увидеть, что в ней вызывается подстановка значений последовательно:
1) в простой макрос: {HOSTNAME}, {HOST.CONN}, {HOST.DNS}, {IPADDRESS} - любое количество вхождений
2) в пользовательскую функцию {hostname:key.min/max/avg/last(...)} - функция написана для многократной подстановки, но на самом деле получается, что подстановка осуществляется только если в одной строке одна функция. В противном случае код не срабатывает*
Т.е. одной строке лейбла можно использовать сочетания любого кол-ва простых макросов и одной пользовательской функции.
Многократная подстановка пользовательских функций меня тоже интересовала, поэтому я слегка покопался в причинах. Насколько я могу судить, основной неприятностью является PCRE-выражение, которое не совсем правильно разбирает строку метки для передачи её частей в функцию выборки из БД, если внутри строки метки присутствует два разбираемых элемента (две пользовательских функции).
Изначально оно представляет собой
При этом не отслеживается начало вхождения новой функции, неверно формируется имя хоста, соотв. в ответе от БД ничего не приходит и подставлять нечего. Скрипт рисует '???'.Code:$pattern = "/{(?P<host>.+):(?P<key>.+)\.(?P<func>.+)\((?P<param>.+)\)}/u";
Я не особо сильный программист, поэтому просто взял кусок кода из zabbix и поэкспериментировал. Пришёл к такому (не исключаю, что можно и попроще):
Теперь у меня на карте корректно отрабатывают такие элементыCode:$pattern="/{((?P<host>.[^{]*):(?P<key>.[^{]*)\.(?P<func>.[^{]*)\((?P<param>.[^{]*)\)[^}]*)}/u";
UL/DL: {rtr:ifHCInOctets[trunk00].last(0)} / {rtr:ifHCOutOctets[trunk00].last(0)}
UPD: поправлено корявое изложениеLast edited by sadman; 14-12-2010, 18:37.Comment
-
Пока спал, подумал и решил, что так будет правильней:
Если "отлавливать" начало следующего выражения, как в предыдущем, а не конец текущего, как в этом, то не проходят конструкции, в которых между пользовательскими функциями нах-ся символы `:`, `.`, `()`, например:Code:$pattern="/{(?P<host>.[^}]*):(?P<key>.[^}]*)\.(?P<func>.[^}]*)\((?P<param>.[^}]*)\)*}/u";
{rtr:ifHCInOctets[trunk00].last(0)}:{rtr:ifHCOutOctets[trunk00].last(0)}
Теперь должно работать гарантированно.Comment
Тут недоработка в плане допустимости создания двух линков или их отображения? Или это сделано с какой-то мне пока непонятной целью?
Comment