Files
i2p.itoopie/apps/tests/echotester/BasicEchoTestAnalyzer.java

88 lines
3.7 KiB
Java
Raw Normal View History

2004-04-08 04:41:54 +00:00
/**
* 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;
2004-04-10 11:50:11 +00:00
2004-04-08 04:41:54 +00:00
private static int SUMMARY_SIZE = 100;
public BasicEchoTestAnalyzer() {
2004-04-10 11:50:11 +00:00
this(20, 100);
2004-04-08 04:41:54 +00:00
}
2004-04-10 11:50:11 +00:00
2004-04-08 04:41:54 +00:00
public BasicEchoTestAnalyzer(int reportDelay, int summarySize) {
2004-04-10 11:50:11 +00:00
REPORT_DELAY = reportDelay;
SUMMARY_SIZE = summarySize;
2004-04-08 04:41:54 +00:00
}
2004-04-10 11:50:11 +00:00
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;
2004-04-08 04:41:54 +00:00
private long[] lastDelays = new long[SUMMARY_SIZE];
2004-04-10 11:50:11 +00:00
2004-04-08 04:41:54 +00:00
public synchronized void packetLossOccurred(boolean beforeDisconnect) {
2004-04-10 11:50:11 +00:00
System.out.println("1: Packet lost" + (beforeDisconnect ? " before disconnect" : "") + ".");
packetLosses++;
if (beforeDisconnect) packetLossesDisconnect++;
countEvent();
2004-04-08 04:41:54 +00:00
}
public synchronized void successOccurred(long delay) {
2004-04-10 11:50:11 +00:00
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();
2004-04-08 04:41:54 +00:00
}
public synchronized void disconnected(boolean refused) {
2004-04-10 11:50:11 +00:00
System.out.println("2: Disconnected" + (refused ? " (connection refused)" : "") + ".");
disconnects++;
if (refused) disconnectsRefused++;
countEvent();
2004-04-08 04:41:54 +00:00
}
private void countEvent() {
2004-04-10 11:50:11 +00:00
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++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
}
2004-04-08 04:41:54 +00:00
}
2004-04-10 11:50:11 +00:00
}