Соответствие отсутствию событий
У меня есть простой поток состояния объектов:
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 минут.