问题标签 [drools-fusion]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
drools - 以下条件的 Drools Fusion 滑动时间窗口
使用 Drools fusion,我想为计算机的 cpu_idle 做一些警报。条件是:
我会每 10 秒从我监控的机器上收到一条记录;
如果 cpu_idle<10 ,drools 应该打开一个可能 10mim 的时间窗口,并开始计算条件 cpu_idle<10 发生的次数,变量是发生时间。
- 10分钟后,流口水检查发生时间。如果发生时间> 5,然后做一些警报,否则什么也不做。
我不知道该怎么做。我用的是drools 6.1。下面是主要代码:</p>
我有一个像这样的唱片豆:
drools - 检查列表中的总和是否大于 100
我必须在列表上写一个流口水函数,它必须做以下事情
- 创建总和
- 检查总和是否大于 100。
下面是我创建的流口水规则
我无法检查 $total 是否大于 100
谢谢
drools - 是否可以同时使用显着性和计时器?
规则 B 是否应该在 A 之前触发?因为它对我不起作用。
编辑:
两者的条件是相等的,因此两者都应该在同一事件上触发,并且为了清楚起见省略了条件。关键是我想在 20 秒超时后触发规则并使它们成为序数,这可能吗?
drools - @timestamp 和“超过窗口:时间”之间有什么关系?
我正在使用 Drools 6.2.0.Final,我需要使用 window:time 处理一组事件。每个事件都有一个日期字段。
在我的 drl 中:
- e1 (2015-01-01 00:00:00)
- e2 (2015-01-01 00:00:20)
- e3 (2015-01-01 00:00:40)
- e4 (2015-01-01 00:01:00)
场景 1:使用实时并同时插入一组事件。
场景2:使用伪,同时插入一组事件并添加时钟事件的偏移量。
第二种情况运行良好。但我有一些问题:
- @timestamp 和“超过窗口:时间”之间有什么关系?
- 如果需要在工作内存中插入未排序的事件(按时间戳)会发生什么?
- 我可以使用我的事件表示的时间戳而不是插入时间表示的时间戳吗?
谢谢。
更新 1
@timestamp、@duration 等仅用于将事件关联在一起(例如,A 在 B 之前,A 遇到 B,等等),并且它们不会将事件与时钟相关联。但是“over window:time”是基于 Drools 的时钟。窗口时间使用事件插入工作内存的时刻来匹配规则。您需要使用 Drools 流模式。
drools - org.drools.core.common.DefaultFactHandle 不能转换为 org.drools.core.common.EventFactHandle
我想用流口水做一些警报。下面是规则。但是当我触发 kieSession 时。流口水抛出异常。谁能告诉我为什么?
规则:
例外:
线程“Thread-0”java.lang.ClassCastException 中的异常:org.drools.core.common.DefaultFactHandle 无法在 org.drools.core.reteoo.WindowNode.assertObject(WindowNode .java:168) 在 org.drools.core.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:387) 的 org.drools.core.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:502)。 reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:288) at org.drools.core.reteoo.EntryPointNode.assertObject(EntryPointNode.java:251) at org.drools.core.common.NamedEntryPoint.insert(NamedEntryPoint.java:367)在 org.drools.core.common 的 org.drools.core.common.NamedEntryPoint.insert(NamedEntryPoint.java:286)。NamedEntryPoint.insert(NamedEntryPoint.java:139) at monitor.SlidingWindowMapWithEntryPoint$1.run(SlidingWindowMapWithEntryPoint.java:104) at java.lang.Thread.run(Thread.java:662)
我的代码:
SlidingWindowMapWithEntryPoint.java
推送.java
包监视器;
java - 在新事件的情况下,Drools fusion 不会触发规则
我正在研究drools fusion 6.2 final,并希望在流模式下出现新事件时触发规则。但规则并不会自行触发。
我的规则文件内容如下:
代码如下:
故意调用规则时会触发规则,但在流上有新事件时无法触发。
drools - Drools Fusion 基于时间滑动的窗口
我无法理解 JBoss Drools 推理引擎如何与复杂的事件处理(drools fusion)一起工作。实际上,如果在 5 秒内发生超过 2 个交易,我创建了一个规则来拒绝交易。这是规则
我使用伪会话时钟将会话设置为流模式。这里是java代码
其中 assertTransaction simple 包含以下代码:
触发规则匹配的事务是 tx4,因为 tx2 在 tx1 和 tx1 退出定时窗口后 6 秒发生。奇怪的是,规则的动作是针对工作内存中的所有事务执行的,即使是 tx1。
它应该以这种方式工作吗?
提前致谢
java - 比较流口水的日期
我的规则文件如下,
我添加了以下人员对象和火灾规则,如下所示,
但它没有打印“哔”。我认为条件不匹配,但我不明白为什么会这样。如何比较流口水的日期?
我的实际规则集,
在更改了我得到以下异常的人的日期变量的类型之后,
我正在生成规则作为字符串集,并使用以下函数将它们转换为知识库,
drools - Drools 事件生命周期
我不得不创建成对的规则来撤回我的事件。好像没有过期。我想要一次性完成的活动。你可以在下面看到,他们使用默认的持续时间,零。
例如,如果我排除撤回规则,然后先插入 RemoveConnectionEvent,然后再插入 CreateConnectionEvent,RemoveConnection 规则仍然会触发。(在我的单元测试中使用议程监听器)
我对事件的期望是 RemoveConnectionEvent 将被忽略,如果它的条件没有立即满足,它不会做任何事情。当 NewConnection 规则响应 CreateConnectionEvent 时,一旦满足规则条件,我没想到它会挂起并触发 RemoveConnection 规则。
为了让我的规则按预期运行,我创建了 RetractedCreation、RetractedRemoval 和 RetractedUpdate。这似乎是一个黑客。我在想象一个宣布我的事件是错误的。
有任何想法吗?
ps 这是一个很好的问答,但我没有使用 Windows。它可能会推断出我的 hack 可能是一个“明确的过期策略”。
Drools Fusion CEP测试事件到期中的测试事件到期
这是我的规则。
drools - 消失的声明,将 Kie 工件添加到 KieFileSystem
我们使用 KieFileSystem 来动态管理 Drools 规则。当我有一个新规则时,我使用 KieFileSystem 将它添加到 KieServices 但我正在覆盖我的规则,而不是附加它们。一旦我插入另一个规则,我在以前的规则中创建的声明就不再存在了。
- 我在这个测试IncrementalCompilationTest.java之后建模了我的代码
- 简单示例KieFileSystemExample.java
- Drools 参考4.2.2.4。以编程方式定义 KieModule
必须有一种方法来附加这些规则,否则就不会有这种方法来改变它们?我正在寻找的效果可以使用AddRemoveRulesTest.java中确定的技术来实现。
如果我正确地遵循 IncrementalCompilationTest,在我看来,我需要找到一种方法来检索现有规则并将它们附加到带有新规则的新 jar 中,以 AddRemoveRuleTest 的方式。我宁愿不返回数据库来获取现有规则。如何?
如果我要继续使用这种更尴尬但符合 maven 的方法,我需要弄清楚哪种方法是向会话动态添加规则的更好方法?据我所知,我们使用添加版本的 Kie 工件作为 maven 实践,而 AddRemoveRulesTest 方法不使用该实践。请参阅drools-6-add-rules-to-a-running-kiesession