88 lines
3.7 KiB
Java
88 lines
3.7 KiB
Java
/**
|
|
* 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; i < SUMMARY_SIZE; i++) {
|
|
delaySummary += lastDelays[i];
|
|
}
|
|
System.out.println("++++++++++++++++ ECHO STATISTICS +++++++++++++++++++++++++"
|
|
+ "\n++ Number of total echo messages: "
|
|
+ packets
|
|
+ "\n++ No response for "
|
|
+ packetLosses
|
|
+ "\n++ (of which "
|
|
+ packetLossesDisconnect
|
|
+ " due to a disconnect)"
|
|
+ "\n++ Disconnects: "
|
|
+ disconnects
|
|
+ "\n++ (of which "
|
|
+ disconnectsRefused
|
|
+ " due to 'connection refused')"
|
|
+ (disconnects > 0 || 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++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
|
|
}
|
|
}
|
|
} |