package org.atomnuke.examples.eventlets;
import java.io.PrintStream;
import java.util.concurrent.atomic.AtomicLong;
import org.atomnuke.atom.model.Entry;
import org.atomnuke.sink.eps.eventlet.AtomEventletException;
import org.atomnuke.task.context.AtomTaskContext;
import org.atomnuke.lifecycle.DestructionException;
import org.atomnuke.lifecycle.InitializationException;
/**
*
* @author zinic
*/
public class PrintStreamEventlet extends CounterEventlet {
private final PrintStream out;
private final String msg;
private final long creationTime;
public PrintStreamEventlet(PrintStream out, String msg, AtomicLong events) {
super(events, true);
this.out = out;
this.msg = msg;
this.creationTime = System.currentTimeMillis();
}
@Override
public void init(AtomTaskContext tc) throws InitializationException {
out.println("PrintStreamOutputSink(" + toString() + ") initalized.");
}
@Override
public void destroy() {
out.println("PrintStreamOutputSink(" + toString() + ") destroyed.");
}
private void newEvent() {
final long eventsCaught = entryEvents.incrementAndGet();
final long nowInMillis = System.currentTimeMillis();
if (eventsCaught % 10000 == 0) {
out.println((nowInMillis - creationTime) + "ms elapsed. Events received: " + eventsCaught + " - Events per 10ms: " + (eventsCaught / ((nowInMillis - creationTime) / 10)) + " - (" + msg + ")");
}
}
@Override
public void entry(Entry entry) throws AtomEventletException {
newEvent();
}
}