我已经开始使用Drools Fusion,并且在时间运算符期间遇到了的奇怪问题。出于某种原因,我无法使其工作得很好,例如在运算符正常工作之后。
这是我的事件的声明 - 它只包含特定类型的间隔:
declare WorkingDayInterval @role(event) @timestamp(event_ts_local) @duration(duration_in_seconds) end
这是我的规则:
rule "Idles in Processing period" when $processing : WorkingDayInterval( subcategory == "processing") $longIdle : WorkingDayInterval(this during $processing, subcategory == "idle",duration_in_seconds > 600) then System.out.println ("Bad Idle Event:"); System.out.println ($processing.event_ts_local); System.out.println ($processing.duration_in_seconds); System.out.println ($longIdle.event_ts_local); System.out.println ($longIdle.duration_in_seconds); end
当我跑步时,没有任何事情被解雇。
然而,当我 之后将更改为后,我得到以下结果:
Bad Idle Event: Mon Feb 25 05:19:00 MSK 2013 2350 Mon Feb 25 05:20:00 MSK 2013 901
并查看值我清楚地看到,基于开始时间戳和持续时间,第二个事件在第一个事件中,因此持续时间应该被触发。
这是Drools Fusion中的错误还是我做错了什么?
BTW - 我正在云模式
运行答案 0 :(得分:1)
我认为问题是你假设@duration
是在秒中测量的,而实际上Fusion希望它以毫秒表示。因此,在您的情况下,$processing
事件从05:19:00.00
开始,到05:19:02.35
结束,$longIdle
从05:20:00.00
开始,到05:20:00.90
结束。如您所见,$longIdle during $processing
false 但$longIdle after $processing
true 。
希望它有所帮助,