如何通过使用siddhi从事件的连续值中选择值

时间:2016-08-18 02:56:50

标签: wso2 wso2cep wso2-das siddhi

例如,

是数据:

1,1470732420000,0
2,1470732421000,0
3,1470732422000,0
4,1470732423000,86
5,1470732424000,87
6,1470732425000,88
7,1470732426000,84
8,1470732427000,0
9,1470732428000,0
10,1470732429000,0
11,1470732430000,89
12,1470732431000,89
13,1470732432000,87
14,1470732433000,89
15,1470732434000,85
16,1470732435000,89
17,1470732436000,89
18,1470732437000,87
19,1470732438000,86
20,1470732439000,88
21,1470732440000,0
22,1470732441000,0
23,1470732442000,0
24,1470732443000,87
25,1470732444000,85
26,1470732445000,86
27,1470732446000,0
28,1470732447000,0
29,1470732448000,0
30,1470732449000,0

第一列 ID ,第二列时间戳,第三列,时间戳间隔1秒。

我希望监控事件的值,如果我发现值> = 85(例如id = 4),我将开始计数,如果接下来的两个连续值> = 85(例如id = 5 / id = 6) ,然后我将事件的第三个值放到OutputStream。(例如id = 6,value = 88,timestamp = 1470732425000)

同时我清除计数和等待值低于85(例如id = 7,值= 84),然后我将再次监控,当我发现值> = 85(例如id = 11,value = 89)我将开始计数,如果接下来的两个连续值> = 85(例如id = 12 / id = 13),那么我将把事件的第三个值放到OutputStream。(例如id = 13,value = 87,timestamp = 1470732432000)...

所有这一切都是我想做的,在我发布这个问题之前,我在this post得到了答案,我试过这段代码:

from every a1=InputStream[value>=85], a2=InputStream[value>=85]+, a3=InputStream[value<85]
select a2[1].id, a2[1].value
having (not (a2[1] is null))
insert into OutPutStream;

并且它有效,但我发现它会在值&lt; = 85之后将值插入OutputStream,而我想要的是如果我有三个连续值&gt; = 85然后我立即插入值。(我不要我想等待下一个值&gt; = 85所有时间) 实际上,我只想在三个连续秒值(&gt; = 85)中记录第三秒的值。 我正在使用wso2das-3.1.0-SNAPSHOT。

1 个答案:

答案 0 :(得分:3)

虽然DAS(Siddhi)支持序列/模式处理,但根据您的要求,您可能需要编写自定义扩展。我已经编写了一个示例窗口处理器扩展来满足您的需求(source code)。下载并<das_home>/repository/components/lib/放在{{1}}目录中,然后重新启动服务器。请参阅siddhi-extension-condition-window-1.0.jar以了解扩展程序的用法。