Я пытаюсь создать отчет для базы данных Icinga2.
Я хочу видеть состояние раз в день на хост для каждой услуги.
У меня есть следующая структура данных:
Колонки:
State_Time> Время, когда состояние объекта мониторинга изменилось с A на B
State> Состояние, в котором находится объект (A, B ..)
Last_State> Состояние, в котором находился объект до текущего времени
Имя хоста> Имя объекта хоста
Servicename> Имя объекта службы
Я хочу, чтобы отчет выглядел примерно так:
host | service | day | State A % | State B %
a.b.c | srvxyz |1.1.1| 70 | 30
Так что я в основном могу видеть, как доступность была в процентах.
Из того, что я думаю как-то мне нужно:
- Группировка по имени хоста, Группировка по имени службы, Группировка по дате поля DateTime
- Рассчитать и суммировать время каждого события до предыдущего в зависимости от состояния
Что у меня пока есть:
select
sum(state_time_usec),
max(name1),
max(name2),
max(date(state_time)),
max(state)
from
icinga_statehistory
inner join icinga_objects on icinga_objects.object_id = icinga_statehistory.object_id
group by icinga_objects.object_id,date(state_time),state
order by state_time desc
Но я не знаю, как начать с вычисления предыдущего ряда. Можете ли вы указать мне направление или у вас есть идеи?
Спасибо!