/* *************************************************************************************** * 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.sim; import com.espertech.esper.client.EPRuntime; import com.espertech.esper.example.transaction.FindMissingEventStmt; import com.espertech.esper.example.transaction.TxnEventBase; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.List; public class FeederOutputStream implements OutputStream { private final EPRuntime runtime; private final long startTimeMSec; // We keep increasing the current time to simulate a 30 minute window private long currentTimeMSec; public FeederOutputStream(EPRuntime runtime) { this.runtime = runtime; startTimeMSec = System.currentTimeMillis(); currentTimeMSec = startTimeMSec; } public void output(List<TxnEventBase> bucket) throws IOException { log.info(".output Feeding " + bucket.size() + " events"); long startTimeMSec = currentTimeMSec; long timePeriodLength = FindMissingEventStmt.TIME_WINDOW_TXNC_IN_SEC * 1000; long endTimeMSec = startTimeMSec + timePeriodLength; sendTimerEvent(startTimeMSec); int count = 0, total = 0; for (TxnEventBase theEvent : bucket) { runtime.sendEvent(theEvent); count++; total++; if (count % 1000 == 0) { sendTimerEvent(startTimeMSec + timePeriodLength * total / bucket.size()); count = 0; } if (count == 10000) { log.info(".output Completed " + total + " events"); count = 0; } } sendTimerEvent(endTimeMSec); currentTimeMSec = endTimeMSec; log.info(".output Completed bucket"); } private void sendTimerEvent(long msec) { log.info(".sendTimerEvent Setting time to now + " + (msec - startTimeMSec)); } private static final Logger log = LoggerFactory.getLogger(TxnGenMain.class); }