2012-11-28 56 views
1

我正在編寫一個基於Java的Web服務器監視器應用程序,只要用戶在特定時間範圍內按特定順序瀏覽給定的一組頁面,就能夠檢測到該應用程序。爲此,我正在使用Esper library。我對查詢的最佳表達方式有些懷疑。使用EPL跟蹤事件序列

我首先聲明瞭一個'Access'對象,用於存儲到達我的Web服務器的HTTP請求的所有信息。無論何時向服務器發出新的請求,都會實例化新的Access對象,並將其作爲事件發送到EPL處理核心。

假設我想跟蹤所有瀏覽頁面A,頁面B,然後頁面C的用戶。哪個是處理這種情況的最佳方法?我是否需要執行多個連接,每個連接都有一個連接,如下例所示?

select * from Access(request='GET /A HTTP/1.1').win:time(30 sec) as a1, 
Access(request='GET /B HTTP/1.1').win:time(30 sec) as a2, 
Access(request='GET /C HTTP/1.1').win:time(30 sec) as a3 
where a1.IP=a2.IP AND a2.IP=a3.IP 

回答

0
select * from pattern[ every 
    a=pageA -> 
    b=pageB(a.IP=b.IP) -> 
    c=pageC(a.IP=b.IP and c.IP=b.IP) within timer.interval(30s)]; 

希望這可能會有所幫助,如果你想獲得特定的順序。

+0

謝謝,它的工作! – Umberto

0

訂單未定義時使用連接,即用戶可以按任意順序瀏覽A/B/C。

使用模式(EPL或基於正則表達式的匹配識別)來檢測特定順序。