2017-02-15 10 views
0

Я использую CEP, чтобы проверить, прибыло ли событие в течение определенного времени (скажем, 1 мин). Если нет, я хочу опубликовать предупреждение.Siddhi проверяет, не произошло ли событие в течение определенного времени?

В частности, машина (сервер) генерирует поток данных heartbeat и отправляет его на CEP. В потоковом потоке содержится идентификатор сервера и временная отметка. Предупреждение должно генерироваться, если данные о сердцебиении не поступают в течение 1 мин.

Возможно ли сделать что-то подобное с CEP? Я видел другие вопросы, связанные с обнаружением, но я все еще не уверен, как подойти к описанному выше сценарию.

ответ

1

Вы можете попробовать это:

define stream heartbeats (serverId string, timestamp long); 

from heartbeats#window.time(1 minute) insert expired events into delayedStream; 

from every e = heartbeats -> e2 = hearbeats[serverId == e.serverId] 
    or expired = delayedStream[serverId == e.serverId] 
within 1 minute 
select e.serverId, e2.serverId as id2, expired.serverId as id3 
insert into tmpStream; 

// every event on tmpStream with a 'expired' match has timeout 
from tmpStream[id3 is not null] 
select serverId 
insert into expiredHearbeats; 
+0

я должен был изменить '[id3 не равно нулю]' в '[нет (id3 равно нулю)]' для того, чтобы план выполнения работы. Чтобы проверить это, я посылаю heartBeats каждые 15 секунд. но поток expiredHearbeats по-прежнему будет заселен через 1 мин (используя регистратор для печати истекших событий) – zlinks

Смежные вопросы