Поиск закрытых алармов и причин закрытия в БД

Started by enp, July 05, 2013, 01:15:32 PM

Previous topic - Next topic

enp

Здравствуйте!

Получить список алармов из БД (PostgreSQL) можно так:


select
    name,
    message,
    timestamp 'epoch' + creation_time * interval '1 second' as begin,
    timestamp 'epoch' + last_change_time * interval '1 second' as last_change   
from alarms inner join object_properties
    on source_object_id = object_id
order by creation_time desc


Однако я не могу найти поле с отметкой о том, когда аларм был закрыт, а также кем и по какой причине.

enp

Да, искать по БД приходится не от хорошей жизни - в Alarm Log с фильтром по Source удается найти записи до апреля, остальных нет. Хотя в БД с тем же object_id есть записи вплоть до сегодняшнего дня. Что может так влиять на неотображение данных?

Victor Kirhenshtein

Странно. На всякий случай - в лог выдаются первые 400 найденных записей, следующие подгружаются при нажатии "get more data" - действительно больше ничего не выдается?

enp

Спасибо, я просто не увидел кнопочку "get more data" :)

Однако вопрос с выборкой алармов средствами SQL по-прежнему актуален, потому что текущее представление включает слишком много колонок. Актуальность, наверное, потеряется только с решением этой проблемы -  https://www.radensolutions.com/chiliproject/issues/224

Victor Kirhenshtein

Вот такой SQL даст пользователей, которые делали acknowledge, resolve, и terminate:


select
    op.name,
    message,
    creation_time as begin,
    last_change_time as last_change,
    u1.name as user_ack_by,   
    u2.name as user_resolved_by,   
    u3.name as user_term_by   
from alarms
inner join object_properties op
    on source_object_id = object_id
left outer join users u1
    on u1.id=ALARMS.ack_by
left outer join users u2
    on u1.id=ALARMS.resolved_by
left outer join users u3
    on u1.id=ALARMS.term_by
order by creation_time desc


Отдельных timestamp'ов на это нет, при каждом изменении обновляется last_change_time.

enp

Т.е. закрытые алармы - это те, у которых term_by <> 0, и в этом случае дата/время закрытия - last_change_time?

Victor Kirhenshtein

Не совсем так. Надо проверять на alarm_state = 3, term_by может быть равен 0 если аларм был закрыт пользователем admin или системой. last_change_time будет в этом случае содержать время закрытия, да.