Ad Widget

Collapse

И снова подсчёт значений

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Victor Sklyarov
    Senior Member
    • Apr 2016
    • 184

    #1

    И снова подсчёт значений

    Не могу понять как сделать LifeCount. Есть аппаратные счётчики событий за сутки, 00:00 они обнуляются. Элементы данных, содержащие счётчики, создаются LLD, поскольку в каждом устройстве переменное количество счётчиков. Есть триггеры, тоже созданные LLD, срабатывающие на прирост показаний счётчиков и сбрасывающиеся по событию сброса счётчиков в ноль. Каким образом можно создать Life count, который накапливал бы показания счётчика в момент, предшествующий его сбросу?
  • Semiadmin
    Senior Member
    • Oct 2014
    • 1625

    #2
    Насколько я понял задачу, надо в 23.59.59 получать значение счетчика и добавлять его в сумматор.
    Начиная, если не ошибаюсь, с 5.2.6 можно сделать вычисляемый айтем LifeCount, который будет запускаться по расписанию в оный момент, с формулой:
    sum( LifeCount,#1) + last(counter)

    Comment

    • Victor Sklyarov
      Senior Member
      • Apr 2016
      • 184

      #3
      Где бы об этом почитать?
      Пытаюсь сделать вычисляемый item с ключом LifeCount [{#NUM_TANK}] и с формулой sum(LifeCount[{#NUM_TANK}],#1)+last(offline_count.tank[{#NUM_TANK}])
      Получаю ошибку
      • Ошибочный параметр "/1/params": incorrect expression starting from "sum(LifeCount[{#NUM_TANK}],#1)+last(offline_count.tank[{#NUM_TANK}])". [disc_prototypes.php:603 → CApiWrapper->__call() → CFrontendApiWrapper->callMethod() → CApiWrapper->callMethod() → CFrontendApiWrapper->callClientMethod() → CLocalApiClient->callMethod() → CItemPrototype->create() → CItemPrototype->checkInput() → CItemGeneral->checkInput() → CApiService::exception() in include/classes/api/services/CItemGeneral.php:344]


      Comment

      • Semiadmin
        Senior Member
        • Oct 2014
        • 1625

        #4
        У вас не 5.4 часом? Там другой синтаксис, но суть та же

        Comment

        • Victor Sklyarov
          Senior Member
          • Apr 2016
          • 184

          #5
          Да, у меня 5.4.1 Где посмотреть синтаксис?

          Comment

          • Semiadmin
            Senior Member
            • Oct 2014
            • 1625

            #6
            Очевидно, в документации по 5.4..
            Наверно, будет как-то так:
            sum(//life_count[{#NUM_TANK}],#1)+last(//offline_count.tank[{#NUM_TANK}])

            Comment

            • Victor Sklyarov
              Senior Member
              • Apr 2016
              • 184

              #7
              В документации sum(/host/key,#1) У Вас sum(//key,#1) Два слеша стало потому что нет host? Host подразумевается по умолчанию текущий узел?

              Comment

              • Semiadmin
                Senior Member
                • Oct 2014
                • 1625

                #8
                Да, текущий хост можно опустить, поэтому //
                Last edited by Semiadmin; 25-07-2021, 22:37.

                Comment

                • Victor Sklyarov
                  Senior Member
                  • Apr 2016
                  • 184

                  #9
                  К сожалению, это не работает. Ошибка: Cannot evaluate function: item "/172.XX.XX.XX/offline_count.tank[1]" does not exist at "last(//offline_count.tank[1])" По шагам 1. LLD создаёт вычисляемый элемент life_count[{#NUM_TANK}] 2. Формула для элемента sum(//life_count[{#NUM_TANK}],#1)+last(//offline_count.tank[{#NUM_TANK}]) Первая часть -Sum of collected values within the defined evaluation period, по существу сумма с одним членом -последним элементом, второго слагаемого нет. Первое слагаемое не определено в первый момент поэтому sum() вычислится неопределённым. К нему прибавляем нормальное значение метрики. Будет ли это работать? A calculated item may become unsupported in several cases: no data to calculate a function 3. Почему-то во втором слагаемом last(//offline_count.tank[1]) не появился адрес хоста

                  Comment

                  • Semiadmin
                    Senior Member
                    • Oct 2014
                    • 1625

                    #10
                    Собственно, весь трюк с sum(//item,#1) и заключается в том, что с определенной версии (я это заметил в 5.2.6, в 5.4 работает точно) sum при отсутствии значений стала возвращать 0, а не ошибку.Это легко проверить, создав 2 вычисляемых айтема, item1 с формулой 1, и item2 с формулой sum(//item2,#1) + last(//item1). Получится непрерывно растущий счетчик. Все, что вам нужно - разобраться с LLD и правильно указать Scheduling сustom interval.

                    Comment

                    • Victor Sklyarov
                      Senior Member
                      • Apr 2016
                      • 184

                      #11
                      Проверил, действительно трюк работает. Всё остальное тоже заработало, банальная ошибка в названии last(//item1). Тот случай, когда глаз "замылился". Спасибо за ценную подсказку и обсуждение.

                      Comment

                      Working...