Ad Widget

Collapse

Получить продолжительность обрыва api 3.0.2

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Coroners
    Junior Member
    • Oct 2017
    • 9

    #1

    Получить продолжительность обрыва api 3.0.2

    Всем доброго времени суток и заранее спасибо всем кто загляну в это сообщение.
    Есть необходимость через API получать данные в своей программе написанной на C#. Всё в общем то хорошо за исключением момента когда дело доходит до вычисления продолжительности отсутствия узла (обрыв связи, не пингуется, упал сервис и т.д.) Получаю следующий фрагмент Json

    [5] => Array
    (
    [eventid] => 3255023
    [source] => 0
    [object] => 0
    [objectid] => 16423
    [clock] => 1507484844
    [value] => 1
    [acknowledged] => 0
    [ns] => 269766317
    [acknowledges] => 0
    )
    [value] => 1- указывает на проблемность и тут все верно всё бьёт с веб интерфейсом
    [clock] => 1507484844 - указывает на начало времени когда произошёл (зафиксирован) обрыв, тут тоже порядок 09.10.2017 01:47:24
    а вот как я понимаю [ns] => 269766317 указывает сколько узел отсутствовал в сети, возможно и ошибаюсь но как не кручу не могу ни какими вычислениями получить 3м 2с, может не в ту сторону смотрю ? может кто то направит как выяснить (вычислить) сколько узел находился в обрыве потому как в веб интерфейсе
    09.10.2017 01:47:24 - Пропала связь c СУБД ПУ (IP 30.69) - ПРОБЛЕМА - Высокая - 3м 2с
    Вот как при помощи апи вычеслить что он отсутствовал 3 минуты 2 секунды ума не приложу. Прошу направить (апи зачитано до дыр), подсказать, может есть пример и т.д. буду рад любой помощи 2 дня бьюсь так и смог - идеи закончились.
    Всем заранее спасибо.
  • Semiadmin
    Senior Member
    • Oct 2014
    • 1625

    #2
    Насколько я понимаю, ns - уточняющая поправка к clock в наносекундах.
    С ее помощью время события можно при желании уточнить до, скажем, 09.10.2017 01:47:24.27

    Comment

    • Coroners
      Junior Member
      • Oct 2017
      • 9

      #3
      Согласно написанному в API (https://www.zabbix.com/documentation...ти)
      clock - штамп времени - Время, когда событие было создано.
      ns - целое число Наносекунды, когда событие было создано.

      Заводит меня в тупик если к первому вопросов нету, то ко второму куча - разницей оно быть не может между началом и концом, так как никакие математические действия над наносекундами желаемого результата не принесли. Если это уточняющая составляющая то (плохо знаю забикс а точнее совсем не знаю) не знаю где она может пригодится ну разве что для повышения точности.
      И всё таки он как то же рассчитывает время, а вот как большая загадка. Выпросил себе группу дебагеров, но и там ответа не нашёл. (доступов до самого забикса нету, только веб интерфейс с правами пользака).

      Comment

      • Coroners
        Junior Member
        • Oct 2017
        • 9

        #4
        С другой стороны, конечно можно запросить все события за определённое время и составить 2 коллекции в первой скажем value = 1 -то есть с проблемами во второй value =0 без проблем всё это отсортировать по времени и как вариант из первой брать таймштапм начала обрыво а из второй вытягивать тайм штамп когда событие стало ОК в итоге получится разность что и будет продолжительностью, но это как что на мой взгляд решение через "костыль" должно же быть более просто и элегантное решиние без создания кучи коллекций и гоняния по ним цыклов.

        Comment

        • Semiadmin
          Senior Member
          • Oct 2014
          • 1625

          #5
          Думаю, что это элегантное решение - в версиях 3.2 - 3.4. Там кроме объекта Event имеется объект Problem, у которого есть не только clock, но и r_clock.
          Last edited by Semiadmin; 10-10-2017, 21:22.

          Comment

          • Coroners
            Junior Member
            • Oct 2017
            • 9

            #6
            Semiadmin спасибо огромное за ваши ответы и участие, но к сожалению перейти пока на другие версии мы не можем да и не от меня это зависит. Придётся всё таки делать списками и крутить их.

            Comment

            • Coroners
              Junior Member
              • Oct 2017
              • 9

              #7
              В общем проблема решена, пришлось сделать вот так:
              Получаем данные с эвента в нужном промежутке времени - все проблемные и не проблемные
              Разбиваем полученные данные на 2 листа в первом данные с проблемой Value =1 во втором с выходом из проблемы Value = 0
              Оба списка сортируем в обратном порядке по времени
              Далее бежим циклом по первому списку и вложенным циклом по второму и сравниваем на сопоставление значений по (итему - берем значение из эвента и так гарантированно определяем события на одном узле) если значения итема совпала выдерам дату начала события и найденный конец, минусуем одно от другого и получаем промежуток, далее промежуток времени переводим в минуты и если они >0 это наше событие если время отрицательное значит не наше и этот элемент удаляем из списка и бежим далее если нашли наш элемент то вычисляем данные и после этого убираем его из списка №2 в итоге все события ложатся кучно и 1 в 1 попадают как в забиксе, если нужна будет реализация на c# пишите выложу

              Comment

              Working...