Ad Widget

Collapse

И опять hosts/templates макросы...

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Jimson
    Senior Member
    • Jan 2008
    • 1327

    #1

    И опять hosts/templates макросы...

    Определяем несколько макросов и пытаемся их использовать ровно как заявлено в документации, а именно подставляем их в Item description. Не работает. В last data видим в названиях items наши макросы, ни какой подстановки не происходит.

    Посмотрел в код, дошел до функции getMacros() в api/classes/class.cusermacro.php, функция получает на входе список макросов и опции в которых нас интерисуют в данной функции или itemid или triggerid, последнии в свою очередь есть условие поиска списка хостов, а по хостам уже будут искаться макросы.

    Короче, делается выборка макросов в массив $hmacros:

    Code:
    # hmacros: Array (
      [100100000000033] => Array (
             [hosts] => Array ( [0] => Array ( [hostid] => 100100000000011 ) )
             [hostmacroid] => 100100000000033
             [hostid] => 100100000000011
             [macro] => {$FSMOUNT0}
             [value] => / )
      [100100000000034] => Array (
             [hosts] => Array ( [0] => Array ( [hostid] => 100100000000011 ) )
             [hostmacroid] => 100100000000034
             [hostid] => 100100000000011
             [macro] => {$FSMOUNT1}
             [value] => /tmp )
    ...skip...skip...
      [100100000000014] => Array (
             [hosts] => Array ( [0] => Array ( [hostid] => 100100000000011 ) )
             [hostmacroid] => 100100000000014
             [hostid] => 100100000000011
             [macro] => {$IFNAME1}
             [value] => em1 )
    )
    затем над этим $hmacros выполняется следующий код:
    Code:
    $host_macros = array();
    foreach($hmacros as $hmacroid => $hmacro){
        $h = reset($hmacro['hosts']);
        $host_macros[$h['hostid']] = $hmacro;
    }
    ksort($host_macros);
    как не сложно догадаться в $host_macros получается нечто такое:

    # host_macros: Array ( [100100000000011] => Array ( [hosts] => Array ( [0] => Array ( [hostid] => 100100000000011 ) ) [hostmacroid] => 100100000000014 [hostid] => 100100000000011 [macro] => {$IFNAME1} [value] => em1 ) )

    иначе говоря один рандомный макрос из всех которые есть на хосте
    ну и понятное дело подстановка ничего не дает потому что найти надо {$FSMOUNT0}, а ищем мы в списке состоящем только из одного макроса {$IFNAME1}

    вот собственно есть у кого мысли или знания на тему того что это за хитрый код перебирающий макросы и "индексирующий" их по hostid?
    для опечатки или банальной ошибки приведенный код слишком сложен, зачем то даже ресетится вложенный array() со списком хостов, я даже не понимаю может ли этот вложенный список когда-либо состоять из более чем одного хоста

    вдруг кто разбирался в коде frontend, а то боюсь на трекере быстро я ответа не получу, а хотелось бы двигаться дальше
    Last edited by Jimson; 26-10-2010, 20:32.
  • zalex_ua
    Senior Member
    Zabbix Certified Trainer
    Zabbix Certified SpecialistZabbix Certified Professional
    • Oct 2009
    • 1286

    #2
    Originally posted by Jimson
    Определяем несколько макросов и пытаемся их использовать ровно как заявлено в документации, а именно подставляем их в Item description. Не работает. В last data видим в названиях items наши макросы, ни какой подстановки не происходит.
    ... мы немного общались в привате, а теперь здесь продолжим:
    а как на счет версии?
    какой макрос глобальный, шаблонный или узла сети?
    Элемент данных откуда? наследуемый от шаблона или принадлежит прямо узлу?
    примеры имен и значений макросов?
    примеры имен Элементов данных которые содержат макросы?
    Зачем лезть в код что либо искать не удостоверившись что все у тебя настроено правильно и другие так же могут подтвердить проблему?
    Многие мои попытки разобраться в коде приводили к одному умозаключеню - это удел разработчиков. Хотя иногда, после ковыряния кода несколько дней можно и найти причину проблемы, но это не эффективно - разработчики сделают это значительно быстрей. Наша задача найти, идентифицировать и четко описать проблему на багтрекере. ИМХО.
    Вот проверил - разрешаются макросы в Последние данные. Без проблем и с наследованием согласно документации.

    Вот то что обещал, больше не замечено где не работает.
    Last edited by zalex_ua; 27-10-2010, 02:07. Reason: добавил ссылку на багрепорт

    Comment

    • Jimson
      Senior Member
      • Jan 2008
      • 1327

      #3
      1.8.4
      по разному, я проверил все варианты, в том числе вариант когда все макросы определяются на хосте
      элемент данных шаблона, но вообще такого понятия в идеалогии забикса нету, в забиксе все элементы данных принадлежат узлу (шаблон это тоже узел, отдельной структуры для шаблонов в базе нету), в том числе "наследованые", это самое "наследование" просто интерфейсная фича, не более того
      макросы:
      {$IFNAME0} = em0
      {$IFNAME1} = em1
      {$FSMOUNT0} = /
      {$FSMOUNT1} = /tmp
      и так далее

      что значит параметры имен ? параметры ключей да есть, испольуются эти же макросы, например, vfs.fs.size[{$FSMOUNT0},pfree]
      сами элементы данных работают правильно и без нареканий, ключам передаются правильные параметры
      проблема только в отображении item_description в GUI

      я удостоверился что все настроено правильно, могу скрины приложить, юнет проблем
      а в код лезть, ну мне так удобнее, что понятно сходу я поправлю, а где то и у себя найду ошибку в процессе отладки кода, как ты правильно заметил, это opensource, а принцип "не лезь куда не приглашали" это принцип работы тех. поддержки микрософта: "ошибка ED65758DBA84X75803, срочно обратитесь в тех поддержку"
      знание внутренностей ПО всегда выгоднее чем их незнание

      "вот - работают" - можно чуть подробнее? у тебя раскрываются юзер макросы в item description при условии что их (макросов) на хосте более одного ?

      P.S. посмотрел код 1.9, там ничего не менялось, работать будет так же как и в 1.8.4
      Last edited by Jimson; 27-10-2010, 08:20.

      Comment

      • Vedmak
        Member
        • Feb 2009
        • 34

        #4
        Если у нас ситуация, когда к одному хосту прилинкованы два темплейта с одинаковыми макросами, то не понятно какой из них надо брать.
        Чтобы не было рандома, макросы сортируются по хостид и всегда берется макрос с темплейта с меньшим хостид.

        Comment

        • Jimson
          Senior Member
          • Jan 2008
          • 1327

          #5
          Originally posted by Vedmak
          Если у нас ситуация, когда к одному хосту прилинкованы два темплейта с одинаковыми макросами, то не понятно какой из них надо брать.
          Чтобы не было рандома, макросы сортируются по хостид и всегда берется макрос с темплейта с меньшим хостид.
          понятно, пойду проверять
          сразу возникают мысли: как вообще заполняется ['hosts'] и зачем, ведь для каждого 'hostmacroid' есть 'hostid', можно сортировать по "hostid'

          и как тогда вообще выкручиваться из сложившийся ситуации? по сути ключ массива должен быть составной, а именно hostid+macro

          Comment

          • zalex_ua
            Senior Member
            Zabbix Certified Trainer
            Zabbix Certified SpecialistZabbix Certified Professional
            • Oct 2009
            • 1286

            #6
            Originally posted by Jimson
            но вообще такого понятия в идеалогии забикса нету, в забиксе все элементы данных принадлежат узлу (шаблон это тоже узел, отдельной структуры для шаблонов в базе нету), в том числе "наследованые", это самое "наследование" просто интерфейсная фича, не
            есть такое понятие! не опускаясь до деталей базы данных (я это знаю), элемент, который наследуется от шаблона, называется шаблонным и нужно не исключать вариант что разрешение макросов в его имени происходит иным способом нежели для элемента данных, который прямо принадлежит узлу

            Originally posted by Jimson
            что значит параметры имен ? параметры ключей да есть, испольуются эти же макросы, например, vfs.fs.size[{$FSMOUNT0},pfree]
            сами элементы данных работают правильно и без нареканий, ключам передаются правильные параметры
            проблема только в отображении item_description в GUI
            Я говорил о ПРИМЕРАХ а не о параметрах. item_description это и есть имя элемента данных, которое может содержать макросы разных уровней.

            Originally posted by Jimson
            а принцип "не лезь куда не приглашали" это принцип работы тех. поддержки микрософта: "ошибка ED65758DBA84X75803, срочно обратитесь в тех поддержку"
            знание внутренностей ПО всегда выгоднее чем их незнание
            я же не говорил вообще "не лезть", я говорил нужно сначала разобраться а потом шуметь что код плохой. Мне вот приходилось иногда глубоко влазить в код чтобы понять почему возникает проблема и мочь на 100% воспроизводить проблему с этим я провозился несколько дней, потому что проблема была трудно воспроизводимой. Без этого я чувствовал что разрабам не докажешь о возможном существовании проблемы. Даже решение предложил - но они сделали по другому, как считают правильно и они правы. Это я и имел ввиду.

            Originally posted by Jimson
            "вот - работают" - можно чуть подробнее? у тебя раскрываются юзер макросы в item description при условии что их (макросов) на хосте более одного ?
            Да специально для тебя пробовал - два разных ! макроса с разных уровней (глобальный, шаблонный, узла сети) в одном Имени элемента данных - все разрешается корректно.

            Comment

            • Jimson
              Senior Member
              • Jan 2008
              • 1327

              #7
              да нет же, надо два макроса на ОДНОМ hostid, те на одном реальном хосте или на одном темплейте (глобальные судя по коду рабочие, они там отдельным кодом проверяются)

              пример банален
              "Free disk space on {$FSMOUNT0}" vfs.fs.size[{$FSMOUNT0},pfree]
              "Free disk space on {$FSMOUNT1}" vfs.fs.size[{$FSMOUNT1},pfree]
              оба макроса определи или в шаблоне или на самом хосте, не важно, можешь элементы деактивировать и в значение макроса вообще пургу написать, пофик, затем перейди на список элементов данных узла и увидишь что макросы в названиях не раскрылись, точнее если макроса было всего два на хосте, то один из них раскроется а второй нет, а если есть еще макросы на хосте то может и ни один из двух тестовых не раскрыться

              Comment

              • zalex_ua
                Senior Member
                Zabbix Certified Trainer
                Zabbix Certified SpecialistZabbix Certified Professional
                • Oct 2009
                • 1286

                #8
                Originally posted by jimson
                да нет же, надо два макроса на ОДНОМ hostid, те на одном реальном хосте или на одном темплейте (глобальные судя по коду рабочие, они там отдельным кодом проверяются)

                пример банален
                "free disk space on {$fsmount0}" vfs.fs.size[{$fsmount0},pfree]
                "free disk space on {$fsmount1}" vfs.fs.size[{$fsmount1},pfree]
                Подтверждаю, если для узла сети определить два макроса, то начинается конечно непонятное. Кое что разрешается, кое что нет. Нужно более детальный анализ. Но проблема точно есть.

                Comment

                Working...