Java Drools融合规则的滑动窗口

Java Drools融合规则的滑动窗口,java,drools,complex-event-processing,drools-fusion,Java,Drools,Complex Event Processing,Drools Fusion,我正在制作一个应用程序,其中来自虚拟机的与CPU使用率、内存使用率、磁盘使用率等相关的数据每5秒通过间隔HTTP请求收集一次。收集的数据如下所示: timeStamp (long): 1533554434 memUsagePerc (double): 5.384678498028317 cpuUsagePerc (double): 24.8756219 diskSizePerc (double): 31.880938915483163 diskUtilPerc (double): 1.05058

我正在制作一个应用程序,其中来自虚拟机的与CPU使用率、内存使用率、磁盘使用率等相关的数据每5秒通过间隔HTTP请求收集一次。收集的数据如下所示:

timeStamp (long): 1533554434
memUsagePerc (double): 5.384678498028317
cpuUsagePerc (double): 24.8756219
diskSizePerc (double): 31.880938915483163
diskUtilPerc (double): 1.0505864
我创建了一些关于Drools Fusion的规则,试图了解以下内容: 例如,当CPU使用率在过去10秒内达到10%以上时,然后在屏幕上打印一些内容,但我的问题是,即使我在规则中输入了
over window:time(Xs)
命令,但即使
X秒
尚未通过,规则仍会被触发。以下是CPU使用的规则:

declare Netdata
    @role( event )
end
rule "CPU usage over 10%"
    salience -1
    when
        $cpu : Netdata(cpuUsagePerc > 10)
        over window:time (10s)
        from entry-point Netdata
    then
        System.out.println("CPU usage over 10%");
end
Netdata
是从HTTP响应收集所有数据并每次创建对象的类。然后,Drools Fusion使用该对象。 请注意,没有
over window:time(Xs)
部分的更为“虚拟”的规则也被触发。此外,屏幕上出现以下错误,在
窗口旁边:时间(Xs)
JAVA\u标识符预期,得到“窗口”


我正在使用Drools 5.1.1版。

这是一个关于滑动窗口的常见错误概念。它们不是固定的,而是滑动的。这意味着即使t 据我所知,对于您正在尝试的操作,没有现成的支持。我过去所做的是手动创建一个“bucket”事实来收集事件,然后使用这些bucket而不是单个事件来编写规则


在OP评论后编辑。

关于Drools中滑动窗口的一些说明:


  • Drools中的时间滑动窗口不会在开火前等待配置的任何大小。例如,像
    window:time(10s)
    这样的窗口应该解释为
    0s。我不太理解你的建议。我的问题可能不够清楚,所以我要重新措辞。我每5秒收集一次数据,并且我希望仅当CPU使用率在过去10秒内超过10%时才会触发该规则(上述规则),因此,如果收集的最后两个数据显示CPU超过10%,而不是每次CPU达到10%以上时才触发该规则。你建议在规则(bucket)之外这样做,然后启动规则?如果Drools不能做到这一点,那么首先使用它有什么意义?我的意思是,对于我脑海中的规则引擎来说,我的要求听起来相当基本:/非常感谢您的回答。结果证明你是对的。我无法用Drools Fusion提供的功能做到这一点,所以我采纳了您的建议,创建了一个bucket作为解决方案,它工作正常。您是否修复了预期的
    JAVA\u标识符,在IDE中获得了“window”
    msg?