package com.limegroup.gnutella.guess;
import com.limegroup.gnutella.messages.QueryRequest;
public class GUESSStatistics {
public static void getAckStatisticsAndPrint(String host, int port) {
Object[] retObjs = getAckStatistics(host, port);
float numSent = ((Float)retObjs[1]).floatValue();
float numGot = ((Float)retObjs[0]).floatValue();
System.out.println("GUESSStatistics.getAckStatistics():" +
" Num Queries Sent : " + numSent +
", Num Acks Received : " + numGot +
" (" + ((numGot/numSent)*100) +
"%)");
}
/* @return a Object[] of length 3. First is a Float - num Received, second
* is a Float - num Sent, and last is the average time for a reply.
*/
public static Object[] getAckStatistics(String host, int port) {
float numAttempted = 0, numReceived = 0, timeSum = 0;
GUESSTester tester = new GUESSTester("whatever");
while (numAttempted < 20) {
try {
long timeTook = tester.testAck(host, port);
if (timeTook > 0) {
numReceived++;
long endTime = System.currentTimeMillis();
timeSum += timeTook;
}
}
catch (Exception ignored) {}
numAttempted++;
}
Object[] retObjs = new Object[3];
retObjs[0] = new Float(numReceived);
retObjs[1] = new Float(numAttempted);
retObjs[2] = new Float(timeSum/numReceived);
return retObjs;
}
/* @return a Object[] of length 3. First is a Float - num Received, second
* is a Float - num Sent, and last is the average time for a reply.
*/
public static Object[] getPingStatistics(String host, int port) {
float numAttempted = 0, numReceived = 0, timeSum = 0;
GUESSTester tester = new GUESSTester("whatever");
while (numAttempted < 5) {
try {
long timeTook = tester.testPing(host, port);
if (timeTook > 0) {
numReceived++;
long endTime = System.currentTimeMillis();
timeSum += timeTook;
}
Thread.sleep(2*1000); // wait a couple of seconds for pings...
}
catch (Exception ignored) {}
numAttempted++;
}
Object[] retObjs = new Object[3];
retObjs[0] = new Float(numReceived);
retObjs[1] = new Float(numAttempted);
retObjs[2] = new Float(timeSum/numReceived);
return retObjs;
}
public static void getQueryStatistics(String host, int port,
String searchKey) {
float numAttempted = 0, numReceived = 0;
GUESSTester tester = new GUESSTester("whatever");
int size = searchKey.length();
int chop = 0;
while (numAttempted < 10) {
QueryRequest qr =
QueryRequest.createQuery(searchKey.substring(0,size-chop), (byte)1);
if (++chop > 3)
chop = 0;
try {
if (tester.testQuery(host, port, qr) != null)
numReceived++;
}
catch (Exception ignored) {}
numAttempted++;
}
System.out.println("GUESSStatistics.getQueryStatistics():" +
" Num Queries Sent : " + numAttempted +
", Num Replies Received : " + numReceived +
" (" + ((numReceived/numAttempted)*100) +
"%)");
}
public static void main(String argv[]) {
String host = argv[0];
int port = Integer.parseInt(argv[1]);
getAckStatisticsAndPrint(host, port);
if (argv.length >= 3)
getQueryStatistics(host, port, argv[2]);
else
getQueryStatistics(host, port, "LimeWireWin");
System.exit(0);
}
}