forked from I2P_Developers/i2p.i2p
95 lines
2.7 KiB
Java
95 lines
2.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++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
|
||
|
}
|
||
|
}
|
||
|
}
|