Нужно правило, которое предупреждает, если определенное количество 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 с.