Соответствие отсутствию событий

У меня есть простой поток состояния объектов:

define stream statusStream (id string, success bool);

Я хочу запросить все объекты, которые "не удалось" (success=false) с 5 минут: все события statusStream (, false), где нет события (тот же идентификатор, true) в течение 5 минут.

Какой самый простой запрос сиддхи для такой работы?

В настоящее время у меня есть:

define stream statusStream (id string, success bool);

from statusStream[ success == false ]#window.time(5 minutes)
insert expired events into expiredStatusStream;

from every status = statusStream[ success == false ]
  -> ackStatus = statusStream[ success == true and id == status.id]
    or expiredStatus = expiredStatusStream[ id == status.id ]
select status.id, ackStatus.id as ackId
into filteredStatusStream;

from filteredStatusStream[ ackStatus.id is null ]
insert into failedStatusStream;

1 ответ

Если вы получаете сообщения "success == false", указывающие на ошибку, попробуйте выполнить план ниже:

@Import('statusStream:1.0.0')
define stream statusStream (id string, success bool);

@Export('alertStream:1.0.0')
define stream alertStream (alert string);

from statusStream
select id, success, time:timestampInMilliseconds() as ts
insert into statusStreamWithTS;

from every e1=statusStreamWithTS[success==false], statusStreamWithTS[success==false]*, e2=statusStreamWithTS[success==false AND (e2.ts - e1.ts) >= 500000]
select 'some message' as alert
insert into alertStream;

Здесь будет сгенерировано предупреждение, если мы продолжим получать сообщения "success == false" в течение 5 минут.

Другие вопросы по тегам