2017-02-15 17 views
0

我正在使用CEP來檢查事件是否在指定的時間內到達(讓我們說1分鐘)。如果不是,我想發佈一個提醒。Siddhi檢查一個事件是否沒有在指定的時間窗內到達?

更具體地說,(服務器)機器生成心跳數據流並將其發送到CEP。 心跳流包含服務器ID和時間戳。如果在1分鐘內沒有心跳數據到達,應該產生警報。

是否有可能通過CEP做類似的事情?我看到有關檢測到非發生的其他問題,但我仍不確定如何處理上述情況。

回答

1

你可以試試這個:

define stream heartbeats (serverId string, timestamp long); 

from heartbeats#window.time(1 minute) insert expired events into delayedStream; 

from every e = heartbeats -> e2 = hearbeats[serverId == e.serverId] 
    or expired = delayedStream[serverId == e.serverId] 
within 1 minute 
select e.serverId, e2.serverId as id2, expired.serverId as id3 
insert into tmpStream; 

// every event on tmpStream with a 'expired' match has timeout 
from tmpStream[id3 is not null] 
select serverId 
insert into expiredHearbeats; 
+0

我不得不改變'[ID3不是null]''到[不是(ID3爲null)]'爲了使執行計劃工作。爲了測試它,我每15秒發送一次heartBeats。但過期的Hebebeats流仍然會在1分鐘後填充(使用記錄器打印過期事件) – zlinks

相關問題