Ad Widget

Collapse

Отображение на карте значений из профиля

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • winjows
    Junior Member
    • Jun 2011
    • 5

    #1

    Отображение на карте значений из профиля

    Добрый день, столкнулся с такой проблемой, хочу на карте в подписи к узлу вывести не только ip, а еще и местоположение, которое прописано в профиле. Если с первым все просто {ipaddress}, то со вторым ничего не получается, пробовал в разных комбинациях {profile.location}, ничего не помогает. Гугль в решении проблемы тоже не помог.

    Подскажите пожалуйста как этого можно добиться, забивать заново ко всем узлам в примечания не вариант.
  • KipyatkOFF
    Junior Member
    • May 2010
    • 23

    #2
    Добрый день, у меня получилось так сделать, но пришлось ручками править maps.inc.php.
    Немного позже доберусь до сервера, скину код

    Comment

    • winjows
      Junior Member
      • Jun 2011
      • 5

      #3
      Originally posted by kipyatkoff
      Добрый день, у меня получилось так сделать, но пришлось ручками править maps.inc.php.
      Немного позже доберусь до сервера, скину код
      Спасибо большое, буду благодарен.

      Comment

      • KipyatkOFF
        Junior Member
        • May 2010
        • 23

        #4
        Пардон, что долго не выходил на связь. Дел за гланды.

        Местоположение из "Профиля" на карту добавлял следующим образом:

        В файле ../include/maps.inc.php есть функция "resolveMapLabelMacrosAll", в которой выполняется поиск в базе данных значений на основе запроса " $sql = 'SELECT host, dns, ip, useip FROM hosts WHERE hostid='.$selement['elementid']; "
        Я создал аналогичный запрос, только с таблицы hosts_profiles -> " $sql_locat = 'SELECT location FROM hosts_profiles WHERE hostid='.$selement['elementid']; "
        Ниже строчками указана переменная " $db_host = DBfetch(DBselect($sql)); "
        Точно так же создаём свою -> " $db_locat = DBfetch(DBselect($sql_locat)) "
        Ну и в завершении делаем макрос {LOCATION}:
        if($resolveHostMacros){
        $replace = array(
        '{HOSTNAME}' => $db_host['host'],
        '{HOST.DNS}' => $db_host['dns'],
        '{IPADDRESS}' => $db_host['ip'],
        '{HOST.CONN}' => ($db_host['useip'] ? $db_host['ip'] : $db_host['dns']),
        '{LOCATION}' => $db_locat['location'],
        );

        Теперь, если в "Подпись" указать {LOCATION}, то на карте будет отображаться местоположение.

        Вот в принципе и всё. Спасибо за внимание

        Comment

        • winjows
          Junior Member
          • Jun 2011
          • 5

          #5
          Спасибо!

          Большое спасибо все получилось!!!

          Comment

          • Dr_Ceboo
            Junior Member
            • Dec 2011
            • 1

            #6
            Спасибо тоже заработало в zabbix 1.8.8!
            Вопрос стал шире, как теперь то же самое провернут со скриптом. Администрирование->скрипты создал скрипт Инфа следующего содержания echo "IP - " {HOST.CONN} " / Имя - " {HOSTNAME} " / расположение - " {LOCATION}.
            Копал scripts.inc.php функцию script_make_command но это оказалось относится только к заголовку таблици в форме, вместо {LOCATION} стала вылазить адрес, и добавил {HOSTNAME}.

            function script_make_command($scriptid,$hostid){
            $host_db = DBfetch(DBselect('SELECT host,dns,useip,ip FROM hosts WHERE hostid='.$hostid));
            $host_profile_db = DBfetch(DBselect('SELECT location FROM hosts_profiles WHERE hostid='.$hostid));
            $script_db = DBfetch(DBselect('SELECT command FROM scripts WHERE scriptid='.$scriptid));

            if($host_db && $host_profile_db && $script_db){
            $command = $script_db['command'];
            $command = str_replace("{HOST.DNS}", $host_db['dns'],$command);
            $command = str_replace("{IPADDRESS}", $host_db['ip'],$command);
            $command = str_replace("{HOSTNAME}", $host_db['host'],$command);
            $command = str_replace("{LOCATION}", $host_profile_db['location'],$command);
            $command = ($host_db['useip']==0)?
            str_replace("{HOST.CONN}", $host_db['dns'],$command):
            str_replace("{HOST.CONN}", $host_db['ip'],$command);
            }
            else{
            $command = FALSE;
            }

            return $command;

            Но как сделать так чтобы это был "результат"
            Куда дальше копать незнаю.......
            Last edited by Dr_Ceboo; 01-12-2011, 11:07.

            Comment

            Working...