Ad Widget

Collapse

LLD Grandstream DP750

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • kharkov_max
    Member
    • Mar 2016
    • 83

    #1

    LLD Grandstream DP750

    Добрый день, прошу помощи с lld
    Есть сип база Grandstream DP750, к ней можно подключить несколько трубок и сип аккаунтов, готового шаблона не нашел (может кто подскажет, если есть), приходится делать самому
    Цель проверять зарегистрирован ли SIP .
    Достучался до АПИ станции, получаю вывод
    Code:
    {
        "response": "success",
        "Account1": {
            "Registered": 1,
            "Profile": 1,
            "Active": 1,
            "HSMode": "HS1"
        },
        "Account2": {
            "Registered": 1,
            "Profile": 1,
            "Active": 1,
            "HSMode": "HS2"
        },
        "Account3": {
            "Registered": 1,
            "Profile": 1,
            "Active": 1,
            "HSMode": "HS3"
        },
        "Account4": {
            "Registered": 1,
            "Profile": 1,
            "Active": 1,
            "HSMode": "HS4"
        },
        "Account5": {
            "Registered": 0,
            "Profile": 1,
            "Active": 0,
            "HSMode": "circular"
        },
        "Account6": {
            "Registered": 0,
            "Profile": 1,
            "Active": 0,
            "HSMode": "circular"
        },
        "Account7": {
            "Registered": 0,
            "Profile": 1,
            "Active": 0,
            "HSMode": "circular"
        },
        "Account8": {
            "Registered": 0,
            "Profile": 1,
            "Active": 0,
            "HSMode": "circular"
        },
        "Account9": {
            "Registered": 0,
            "Profile": 1,
            "Active": 0,
            "HSMode": "circular"
        },
        "Account10": {
            "Registered": 0,
            "Profile": 1,
            "Active": 0,
            "HSMode": "circular"
        }
    }​
    В данном примере вывода, подключено 1x 4 сипа.
    Хочу создать элемент данных, на момент обнаружения, как Account1, к примеру, где HSMode like "HS*" и Registered = 1, либо где Active = 1
    Впал в ступор не пойму как это сделать, заранее спасибо ...

  • Hamardaban
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • May 2019
    • 2713

    #2
    В чем затыка то?
    JSON не подходит для lld? Значит магией JS предобработки нужно его привести к стандартному виду с элементами
    {"Account":"Account1",Registered": 1,"Profile": 1,"Active": 1,"HSMode": "HS1"},​
    Документацию по работе с lld и json читали?
    Делаете правило lld и определяете lld макросы ссылающиеся на элементы в json
    Моду и актив отфильтровываете в фильтрах
    Для Эд который хотите чтоб создавался делаете прототип
    Last edited by Hamardaban; 27-01-2024, 11:20.

    Comment

    • kharkov_max
      Member
      • Mar 2016
      • 83

      #3
      Account1, Account2 и т.д. до 10 может быть, как их перебрать...
      В предобработке $.Account1.Registered - дергается на 1, как в lld перебрать AccountX
      Last edited by kharkov_max; 27-01-2024, 11:15.

      Comment

      • Hamardaban
        Senior Member
        Zabbix Certified SpecialistZabbix Certified Professional
        • May 2019
        • 2713

        #4
        Поняв в чем ваша затыка обновил пост
        lld работает перебором значений определенного элемента json- а у вас уникальны имена.
        поэтому и предложил сначала поработать с ними в js для «нормализации»
        Last edited by Hamardaban; 27-01-2024, 16:24.

        Comment

        • kharkov_max
          Member
          • Mar 2016
          • 83

          #5
          Киньте примерчиком JS. если есть ...

          Comment

          • Hamardaban
            Senior Member
            Zabbix Certified SpecialistZabbix Certified Professional
            • May 2019
            • 2713

            #6
            код для припроцессинга - сделает из вашего json пригодный для LLD.
            Code:
            var js = JSON.parse(value);
            var arr = [];
            for (var key in js) {
              if (js[key] instanceof Object) {
                  var obj = js[key];
                  obj["ID"] = key;
                  arr.push(obj);
             }
            }
            return JSON.stringify(arr)​

            Comment

            • kharkov_max
              Member
              • Mar 2016
              • 83

              #7
              Спасибо, раскидало, вроде как нужно.
              Второй вопрос в LLD добавлена предобработка которую Вы дали, создал llD макрос {#ACTIVE} = $..Active, добавил его в фильтр {#ACTIVE} совпадает с 1
              При тесте LLD получаю вывод в результат всего массива в виде:
              Code:
              [{"Registered":1,"Profile":1,"Active":1,"HSMode":"HS1","Account":"Account1"},{"Registered":1,"Profile":1,"Active":1,"HSMode":"HS2","Account":"Account2"},{"Registered":1,"Profile":1,"Active":1,"HSMode":"HS3","Account":"Account3"},{"Registered":1,"Profile":1,"Active":1,"HSMode":"HS4","Account":"Account4"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account5"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account6"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account7"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account8"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account9"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account10"}]
              Т.е. не фильтрует
              И если в предобработке включить правило тест Json, то тестовое получение данных на этом шаге ругается.
              Last edited by kharkov_max; 30-01-2024, 09:57.

              Comment

              • Hamardaban
                Senior Member
                Zabbix Certified SpecialistZabbix Certified Professional
                • May 2019
                • 2713

                #8
                Во первых наверное всё же {#ACTIVE} => $.Active ?
                А на что тестируете json? какой параметр у припроцессинга?

                Comment

                • kharkov_max
                  Member
                  • Mar 2016
                  • 83

                  #9
                  Изменил макрос на {#ACTIVE} => $.Active, тест изменил на $.Active, тест прошел без ошибки, но вывод без фильтра
                  В выводе так:
                  Code:
                  [{"Registered":1,"Profile":1,"Active":1,"HSMode":"HS1","Account":"Account1"},{"Registered":1,"Profile":1,"Active":1,"HSMode":"HS2","Account":"Account2"},{"Registered":1,"Profile":1,"Active":1,"HSMode":"HS3","Account":"Account3"},{"Registered":1,"Profile":1,"Active":1,"HSMode":"HS4","Account":"Account4"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account5"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account6"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account7"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account8"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account9"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account10"}]
                  Тестил json path на сайте https://jsonpath.com/, так вот тут отрабатывает фильтр по $..Active. а по $.Active вывод пустой...

                  Comment

                  • Hamardaban
                    Senior Member
                    Zabbix Certified SpecialistZabbix Certified Professional
                    • May 2019
                    • 2713

                    #10
                    Тестируйте в предобработке самого заббикса - там всё немного по другому (см документацию)
                    В фильтре используются регулярные выражения - уверены что правильно написали?

                    Comment

                    • Kos
                      Senior Member
                      Zabbix Certified SpecialistZabbix Certified Professional
                      • Aug 2015
                      • 3404

                      #11
                      Originally posted by kharkov_max
                      При тесте LLD получаю вывод в результат всего массива в виде:
                      Code:
                      [{"Registered":1,"Profile":1,"Active":1,"HSMode":"HS1","Account":"Account1"},{"Registered":1,"Profile":1,"Active":1,"HSMode":"HS2","Account":"Account2"},{"Registered":1,"Profile":1,"Active":1,"HSMode":"HS3","Account":"Account3"},{"Registered":1,"Profile":1,"Active":1,"HSMode":"HS4","Account":"Account4"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account5"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account6"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account7"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account8"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account9"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account10"}]
                      Т.е. не фильтрует
                      Это нормально. Фильтрация происходит на следующем этапе - уже при обработке правила LLD.

                      Comment

                      • Hamardaban
                        Senior Member
                        Zabbix Certified SpecialistZabbix Certified Professional
                        • May 2019
                        • 2713

                        #12
                        Originally posted by Kos
                        Фильтрация происходит на следующем этапе - уже при обработке правила LLD.
                        Именно! и фильтрацию я "проверяю" смотря на созданные\под_удаление элементы.

                        Comment

                        • kharkov_max
                          Member
                          • Mar 2016
                          • 83

                          #13
                          Спасибо.
                          А кой далее может быть алгоритм создания прототипа элемента ?
                          Сделать http запрос подставив значение макроса я не могу, опять делать полный запрос и js преобразовывать? или что то типа зависимого элемента можно сделать из уже готовой выборки LLD?
                          Тип прототипа элемента какой теперь должен быть?

                          Comment

                          • Hamardaban
                            Senior Member
                            Zabbix Certified SpecialistZabbix Certified Professional
                            • May 2019
                            • 2713

                            #14
                            Посмотрите в шаблоны который делает разработчик .
                            Логика такая делаете «мастер» ЭД в который получаете все данные разом (можно не хранить), от него зависимое правило обнаружения (немного порезанное чтоб часто не срабатывало) и прототипы в обнаружении как зависимые ЭД тоже ссылаются на этот же мастер ЭД.

                            Comment

                            • kharkov_max
                              Member
                              • Mar 2016
                              • 83

                              #15
                              Вообщем сделал так
                              1. В шаблоне создал элемент данных НЕ LLD. в который забираю портянку с АПИ в ней применил скрипт, и выборку элементов с Active = 1
                              2. Создал LLD определение, дергает ту же АПИ и настроен как и элемент данных, в макросы LLD выбираю Account, HSMode, Registered для формировании в прототипе уникального ключа, имени элемента и значения Registered
                              1. В прототипе сделал зависимый элемент от элемента шаблона п.1 и теперь из полученной портянки пытаюсь вытащить значение Registered где Account = 1 (к примеру), в предобработке к json елемента данных применил js скрипт
                              Code:
                              var els = value.filter((item) => item.Account === "{#ACCOUNT}");
                              var reg = null;
                              if (els.length > 0) {
                                  let el = els[0];
                                  reg = el.Registered;
                              }
                              return reg;​
                              в IDE скрипт отрабатывает нормально
                              Элемент LLD создается с верным именем и ключем, но значение падает в ошибку
                              Code:
                              Preprocessing failed for: [{"Registered":1,"Profile":1,"Active":1,"HSMode":"HS1","Account":"Account1"},{"Registered":1,"Pro...
                              1. Failed: SyntaxError: parse error (line 1)​
                              как я понимаю ругается на json что готовит 1й скрипт в элементе данных
                              Code:
                              [{"Registered":1,"Profile":1,"Active":1,"HSMode":"HS1","Account":"Account1"},{"Registered":1,"Profile":1,"Active":1,"HSMode":"HS2","Account":"Account2"},{"Registered":1,"Profile":1,"Active":1,"HSMode":"HS3","Account":"Account3"},{"Registered":1,"Profile":1,"Active":1,"HSMode":"HS4","Account":"Account4"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account5"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account6"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account7"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account8"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account9"},{"Registered":0,"Profile":1,"Active":0,"HSMode":"circular","Account":"Account10"}]
                              Не пойму что не так плиз хелп ...

                              PS или эта строка не нравится
                              Code:
                              var els = value.filter((item) => item.Account === "{#ACCOUNT}");
                              Last edited by kharkov_max; 31-01-2024, 19:35.

                              Comment

                              Working...