/** * A basic implementation for the EchoTestAnalyzer. */ public class BasicEchoTestAnalyzer implements EchoTestAnalyzer { /** * How many events must appear until a detailed report is * printed. Default is every 20 events. */ private static int REPORT_DELAY = 20; private static int SUMMARY_SIZE = 100; public BasicEchoTestAnalyzer() { this(20, 100); } public BasicEchoTestAnalyzer(int reportDelay, int summarySize) { REPORT_DELAY = reportDelay; SUMMARY_SIZE = summarySize; } private int events = 0, packetLosses = 0, packetLossesDisconnect=0, disconnects = 0, disconnectsRefused = 0, delayCount=0, lastDelayPtr = 0; private long minDelay=Long.MAX_VALUE, maxDelay = 0, delaySum=0; private long[] lastDelays = new long[SUMMARY_SIZE]; public synchronized void packetLossOccurred(boolean beforeDisconnect) { System.out.println("1: Packet lost"+ (beforeDisconnect?" before disconnect":"")+ "."); packetLosses++; if (beforeDisconnect) packetLossesDisconnect++; countEvent(); } public synchronized void successOccurred(long delay) { System.out.println("0: Delay = "+delay); if (delay > maxDelay) maxDelay=delay; if (delay < minDelay) minDelay=delay; delaySum+=delay; delayCount++; lastDelays[lastDelayPtr++]=delay; lastDelayPtr%=SUMMARY_SIZE; countEvent(); } public synchronized void disconnected(boolean refused) { System.out.println("2: Disconnected"+ (refused?" (connection refused)":"")+ "."); disconnects++; if (refused) disconnectsRefused++; countEvent(); } private void countEvent() { events++; if (events % REPORT_DELAY == 0) { int packets = packetLosses+delayCount; long delaySummary=0; for (int i=0;i0 || true ?"\n++ Average lost packets per disconnect: "+ (packetLossesDisconnect/(float)disconnects) :"")+ "\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++"+ "\n++ Minimal delay: "+minDelay+ "\n++ Average delay: "+(delaySum/(float)delayCount)+ "\n++ Maximal delay: "+maxDelay+ (delayCount >=SUMMARY_SIZE ?"\n++ Average delay over last " + SUMMARY_SIZE + ": "+(delaySummary/(float)SUMMARY_SIZE) :"")+ "\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); } } }