/* *************************************************************************************** * Copyright (C) 2006 EsperTech, Inc. All rights reserved. * * http://www.espertech.com/esper * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * *************************************************************************************** */ package com.espertech.esper.example.transaction; import com.espertech.esper.client.EPAdministrator; import com.espertech.esper.client.EPStatement; import com.espertech.esper.client.UpdateListener; public class FindMissingEventStmt { public final static int TIME_WINDOW_TXNC_IN_SEC = 60 * 60; private EPStatement statement; // // We need to detect a transaction that did not make it through all three events. // In other words, a transaction with events A or B, but not C. // Note that, in this case, what we care about is event C. // The lack of events A or B could indicate a failure in the event transport and should be ignored. // Although the lack of an event C could also be a transport failure, it merits looking into. // public FindMissingEventStmt(EPAdministrator admin) { // The inner table to both A and B is C. // // The listener will consider old events generated when either A or B leave the window, with // a window size for A and B of 30 minutes. // // The window of C is declared large to ensure the C events don't leave the window before A and B // thus generating false alerts, making these obvious via timestamp. Lets keep 1 hour of data for C. String stmt = "select irstream * from " + "TxnEventA#time(30 min) A " + "full outer join " + "TxnEventC#time(1 hour) C on A.transactionId = C.transactionId " + "full outer join " + "TxnEventB#time(30 min) B on B.transactionId = C.transactionId " + "where C.transactionId is null"; statement = admin.createEPL(stmt); } public void addListener(UpdateListener listener) { statement.addListener(listener); } }