2017-01-11 2 views
0

ich einen einfachen Strom von Status von Objekten haben:Anpassung der Abwesenheit von Ereignissen

define stream statusStream (id string, success bool); 

Ich möchte alle Objekte abzufragen, die seit 5 Minuten „nicht bestanden“ (Erfolg = false) sind: alle Fall statusStream (, false) wo gibt es kein Ereignis (gleiche ID, wahr) innerhalb von 5 Minuten.

Was ist die einfachste Siddhi-Abfrage für diese Art von Job?

Zur Zeit habe ich:

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; 

Antwort

1

Falls Sie bekommen Erfolg == false "-Nachrichten Fehler anzuzeigen, dann versuchen Sie unter Ausführungsplan:

@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; 

Hier wird eine Warnung sein generiert, wenn wir 5 Minuten lang weiterhin 'success == false' Nachrichten erhalten.