Я пытаюсь реализовать следующий прецедент: Нужно запустить один аварийный сигнал с первой причиной, если несколько аварийных сигналов с таким же свойством поступают с интервалом времени 30 секунд.Drools: пожар одного события для каждого факта в группе с течением времени
Я написал код, но он имеет 2 ряд недостатков:
- Это срабатывает сигнал тревоги для каждого пришел сигнал тревоги в группе со счетом> 1
правило работает только один раз. Если я посылаю сигнал тревоги через одно минутное правило, не срабатывает.
rule "fire rca when at least 2 events arrive in timeWindow" when $alert: AlertEvent(type == Type.RAISE, this.isPropertySet("elementSystemID"), ElementSystemID: alertProperties["elementSystemID"] ) accumulate( $a: AlertEvent(type == Type.RAISE, alertProperties["elementSystemID"] == ElementSystemID, ) over window:time(30s); $cnt: count($a); $cnt > 1 ) then HashMap<String,Object> props = new HashMap<String,Object>(); props.put(AlertConstants.DISPLAY_NAME, "RCA on port"); props.put(AlertConstants.PERCEIVED_SEVERITY, 6); props.put(AlertConstants.ELEMENT_ID, $alert.getProperty("SystemID")); ruleActions.raiseAlert(props, "Alert raised"); end