Сиддхи: игнорировать повторяющиеся события при активном шаблоне

У меня есть шаблон непредвиденных событий, чтобы определить, возникает ли определенное условие, а затем предупредить меня, если это условие не изменится в течение установленного времени. Приведенный ниже запрос можно описать как «Если для пользователя отображается значение 1, предупредить меня, если для этого пользователя не будет нового значения в течение 5 секунд»:

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;

Этот запрос работает точно так, как ожидалось: если я не получаю значение, отличное от 1, в течение 5 секунд, то запрос запускается. Проблема возникает, когда есть повторяющиеся события со значением 1.

Если я отправляю событие {name: "bob", value: 1} каждую секунду в течение 10 секунд, я хотел бы, чтобы запрос запускался дважды: один раз в 5 секунд и один раз в 10 секунд. Однако прямо сейчас я вижу, что запрос запускается каждую секунду, начиная с 5 секунд. По сути, запрос (работающий должным образом) запускает 5-секундный таймер для каждого события со значением 1, которое он видит. Однако я бы хотел, чтобы этот таймер не запускался (или, по крайней мере, не выводился), если таймер уже запущен.

Я попытался решить эту проблему с помощью следующего запроса (просто добавив строку с выводом):

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;

Еще пробовал output last и output all.

Вышеупомянутые запросы не работали должным образом: в случае all и last никакие события не выводились вообще, в случае first выводилось только одно событие, а не последующие после прохождения первого 5-секундного блока.

Есть ли способ добиться того, чего я хотел бы? У меня есть подозрение, что использование временных окон или output - способ решить эту проблему, но до сих пор не могу заставить его работать.


person wearebob    schedule 05.06.2019    source источник


Ответы (1)


Второй запрос в исходном вопросе работает должным образом. Я раньше был на Сиддхи 4.1.4. После обновления до Siddhi 5.0.0 запрос работает так, как я хотел.

person wearebob    schedule 05.06.2019