Обнаружить определенное количество событий за определенный промежуток времени, но сработать только один раз - PullRequest
0 голосов
/ 12 июня 2018

Нужно правило, которое предупреждает, если определенное количество BootNotifications (здесь 2) происходит в определенный период времени (здесь 10 с).

Я пришел со следующим правилом:

rule "MonitorNumberOfReboots"
dialect "mvel"
when
    $s : BootNotification()
    Number( intValue >= 2 ) from accumulate ( BootNotification() over window:time (10s), count(1)) 
    not (Command(this before [0s, 1h] $s )) 
then
    Command $c = new Command();
    insertLogical( $c );
    end

Дальнейшее объяснение:

  • Kie-Engine работает в режимах «Stateful», «Stream», «Realtime» и «Equality»

Тестирование:

  • Я проверил правило, добавив BootNotification с интервалом> 10 с => Правило не срабатывает => проверка
  • Я проверил правило, добавив BootNotification с интервалом 2 с => Правило срабатывает много раз=> fail

Вопрос / проблема:

Я не хочу, чтобы правило запускалось много раз.Когда правила запускаются, я вставляю команду.В предложении when я добавил проверку, существует ли Command.Я ожидаю, что правило не срабатывает более одного раза в 1ч.Не работаетДаже после 10 секунд он просто продолжает вставлять экземпляры Command.

Я думал, что проблема может заключаться в выражении «this before [0s, 1h] $ s» в третьей строке оператора when, поэтому я заменил его на

not (Command() over window:time (1h)) 

, но он срабатывает еще чаще, если добавлять BootNotifications каждые 2 с.

...