wearebob
wearebob

Reputation: 415

Siddhi: Ignore duplicate events while pattern active

I have a non-occurring event pattern to detect if a certain condition happens, then alert me if that condition doesn't change within a time limit. The below query could be described as "If value 1 appears for a user, alert me if there is not a new value for that user within 5 seconds":

define stream inStream(name string, value int);
partition with (name of inStream) 
begin 
    from every in=inStream[ value == 1 ]
    -> not inStream[ not(value == 1) ] for 5 sec
    select in.name, in.value
    insert into outStream;
end;

This query works exactly as expected: if I don't receive a value different than 1 within 5 seconds then the query is triggered. The issue arises when there are duplicate events with the value of 1.

If I send the event {name: "bob", value: 1} every second for 10 seconds, I would like to see the query triggered twice, once at 5 seconds, and once at 10 seconds. Right now however I see the query being triggered every second starting at 5 seconds in. Essentially the query (working as it should) is starting the 5 second timer for every event with value 1 it sees. However I would like it to not start that timer (or not output at least) if there is already a timer running.

I attempted to solve this with the following query (simply adding an 'output' line):

define stream inStream(name string, value int);
partition with (name of inStream) 
begin 
    from every in=inStream[ value == 1 ]
    -> not inStream[ not(value == 1) ] for 5 sec
    select in.name, in.value
    output first every 5 sec
    insert into outStream;
end;

I also tried output last and output all.

The queries above did not work as expected: in the case of all and last no events at all were output, in the case of first only a single event was output, not the subsequent ones after the first 5 second block passed.

Is there any way to achieve what I would like? I have a hunch that using time windows or output is the way to solve it, but so far have not been able to get it to work.

Upvotes: 0

Views: 121

Answers (1)

wearebob
wearebob

Reputation: 415

The second query in the original question ends up working as expected. I was previously on Siddhi 4.1.4. After upgrading to Siddhi 5.0.0 the query works as I wanted it to.

Upvotes: 1

Related Questions