/* *************************************************************************************** * 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.stockticker; import com.espertech.esper.client.EPRuntime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Utility methods for monitoring a EPRuntime instance. */ public class EPRuntimeUtil { public static boolean awaitCompletion(EPRuntime epRuntime, int numEventsExpected, int numSecAwait, int numSecThreadSleep, int numSecThreadReport) { log.info(".awaitCompletion Waiting for completion, expecting " + numEventsExpected + " events within " + numSecAwait + " sec"); int secondsWaitTotal = numSecAwait; long lastNumEventsProcessed = 0; int secondsUntilReport = 0; long startTimeMSec = System.currentTimeMillis(); long endTimeMSec = 0; while (secondsWaitTotal > 0) { try { Thread.sleep(numSecThreadSleep * 1000); } catch (InterruptedException ex) { } secondsWaitTotal -= numSecThreadSleep; secondsUntilReport += numSecThreadSleep; long currNumEventsProcessed = epRuntime.getNumEventsEvaluated(); if (secondsUntilReport > numSecThreadReport) { long numPerSec = (currNumEventsProcessed - lastNumEventsProcessed) / numSecThreadReport; log.info(".awaitCompletion received=" + epRuntime.getNumEventsEvaluated() + " processed=" + currNumEventsProcessed + " perSec=" + numPerSec); lastNumEventsProcessed = currNumEventsProcessed; secondsUntilReport = 0; } // Completed loop if the total event count has been reached if (epRuntime.getNumEventsEvaluated() == numEventsExpected) { endTimeMSec = System.currentTimeMillis(); break; } } if (endTimeMSec == 0) { log.info(".awaitCompletion Not completed within " + numSecAwait + " seconds"); return false; } long totalUnitsProcessed = epRuntime.getNumEventsEvaluated(); long deltaTimeSec = (endTimeMSec - startTimeMSec) / 1000; long numPerSec = 0; if (deltaTimeSec > 0) { numPerSec = (totalUnitsProcessed) / deltaTimeSec; } else { numPerSec = -1; } log.info(".awaitCompletion Completed, sec=" + deltaTimeSec + " avgPerSec=" + numPerSec); long numReceived = epRuntime.getNumEventsEvaluated(); long numReceivedPerSec = 0; if (deltaTimeSec > 0) { numReceivedPerSec = (numReceived) / deltaTimeSec; } else { numReceivedPerSec = -1; } log.info(".awaitCompletion Runtime reports, numReceived=" + numReceived + " numProcessed=" + epRuntime.getNumEventsEvaluated() + " perSec=" + numReceivedPerSec ); return true; } private static final Logger log = LoggerFactory.getLogger(EPRuntimeUtil.class); }