2014-05-05 12:33:57 +00:00
|
|
|
package kademlia;
|
|
|
|
|
2014-05-07 04:37:12 +00:00
|
|
|
import java.text.DecimalFormat;
|
|
|
|
|
2014-05-05 12:33:57 +00:00
|
|
|
/**
|
2014-05-06 03:43:16 +00:00
|
|
|
* Class that keeps statistics for this Kademlia instance.
|
|
|
|
*
|
|
|
|
* These statistics are temporary and will be lost when Kad is shut down.
|
2014-05-05 12:33:57 +00:00
|
|
|
*
|
|
|
|
* @author Joshua Kissoon
|
|
|
|
* @since 20140505
|
|
|
|
*/
|
2014-05-07 18:15:23 +00:00
|
|
|
public class Statistician implements KadStatistician
|
2014-05-05 12:33:57 +00:00
|
|
|
{
|
|
|
|
|
2014-05-06 03:43:16 +00:00
|
|
|
/* How much data was sent and received by the server over the network */
|
|
|
|
private long totalDataSent, totalDataReceived;
|
2014-05-07 17:13:15 +00:00
|
|
|
private long numDataSent, numDataReceived;
|
2014-05-06 03:43:16 +00:00
|
|
|
|
2014-05-06 19:11:49 +00:00
|
|
|
/* Bootstrap timings */
|
|
|
|
private long bootstrapTime;
|
|
|
|
|
2014-05-07 03:56:29 +00:00
|
|
|
/* Content lookup operation timing & route length */
|
2014-05-06 19:11:49 +00:00
|
|
|
private int numContentLookups;
|
|
|
|
private long totalContentLookupTime;
|
2014-05-07 03:56:29 +00:00
|
|
|
private long totalRouteLength;
|
2014-05-06 19:11:49 +00:00
|
|
|
|
2014-05-06 03:43:16 +00:00
|
|
|
|
|
|
|
{
|
|
|
|
this.totalDataSent = 0;
|
|
|
|
this.totalDataReceived = 0;
|
2014-05-06 19:11:49 +00:00
|
|
|
this.bootstrapTime = 0;
|
|
|
|
this.numContentLookups = 0;
|
|
|
|
this.totalContentLookupTime = 0;
|
2014-05-07 03:56:29 +00:00
|
|
|
this.totalRouteLength = 0;
|
2014-05-06 03:43:16 +00:00
|
|
|
}
|
|
|
|
|
2014-05-07 18:15:23 +00:00
|
|
|
@Override
|
2014-05-06 03:43:16 +00:00
|
|
|
public void sentData(long size)
|
|
|
|
{
|
|
|
|
this.totalDataSent += size;
|
2014-05-07 17:13:15 +00:00
|
|
|
this.numDataSent++;
|
2014-05-06 03:43:16 +00:00
|
|
|
}
|
|
|
|
|
2014-05-07 18:15:23 +00:00
|
|
|
@Override
|
2014-05-06 03:43:16 +00:00
|
|
|
public long getTotalDataSent()
|
|
|
|
{
|
2014-05-08 05:28:24 +00:00
|
|
|
return this.totalDataSent / 1000L;
|
2014-05-06 03:43:16 +00:00
|
|
|
}
|
|
|
|
|
2014-05-07 18:15:23 +00:00
|
|
|
@Override
|
2014-05-06 03:43:16 +00:00
|
|
|
public void receivedData(long size)
|
|
|
|
{
|
|
|
|
this.totalDataReceived += size;
|
2014-05-07 17:13:15 +00:00
|
|
|
this.numDataReceived++;
|
2014-05-06 03:43:16 +00:00
|
|
|
}
|
|
|
|
|
2014-05-07 18:15:23 +00:00
|
|
|
@Override
|
2014-05-06 03:43:16 +00:00
|
|
|
public long getTotalDataReceived()
|
|
|
|
{
|
2014-05-08 05:28:24 +00:00
|
|
|
return this.totalDataReceived / 1000L;
|
2014-05-06 03:43:16 +00:00
|
|
|
}
|
2014-05-06 19:11:49 +00:00
|
|
|
|
2014-05-07 18:15:23 +00:00
|
|
|
@Override
|
2014-05-06 19:11:49 +00:00
|
|
|
public void setBootstrapTime(long time)
|
|
|
|
{
|
|
|
|
this.bootstrapTime = time;
|
|
|
|
}
|
|
|
|
|
2014-05-07 18:15:23 +00:00
|
|
|
@Override
|
2014-05-06 19:11:49 +00:00
|
|
|
public long getBootstrapTime()
|
|
|
|
{
|
2014-05-07 18:44:57 +00:00
|
|
|
return this.bootstrapTime / 1000000L;
|
2014-05-06 19:11:49 +00:00
|
|
|
}
|
|
|
|
|
2014-05-07 18:15:23 +00:00
|
|
|
@Override
|
2014-05-07 03:56:29 +00:00
|
|
|
public void addContentLookup(long time, int routeLength)
|
2014-05-06 19:11:49 +00:00
|
|
|
{
|
|
|
|
this.numContentLookups++;
|
|
|
|
this.totalContentLookupTime += time;
|
2014-05-07 03:56:29 +00:00
|
|
|
this.totalRouteLength += routeLength;
|
2014-05-06 19:11:49 +00:00
|
|
|
}
|
|
|
|
|
2014-05-07 18:15:23 +00:00
|
|
|
@Override
|
2014-05-06 19:11:49 +00:00
|
|
|
public int numContentLookups()
|
|
|
|
{
|
|
|
|
return this.numContentLookups;
|
|
|
|
}
|
|
|
|
|
2014-05-07 18:15:23 +00:00
|
|
|
@Override
|
2014-05-06 19:11:49 +00:00
|
|
|
public long totalContentLookupTime()
|
|
|
|
{
|
|
|
|
return this.totalContentLookupTime;
|
|
|
|
}
|
|
|
|
|
2014-05-07 18:15:23 +00:00
|
|
|
@Override
|
2014-05-07 04:37:12 +00:00
|
|
|
public double averageContentLookupTime()
|
2014-05-06 19:11:49 +00:00
|
|
|
{
|
2014-05-07 05:52:02 +00:00
|
|
|
double avg = (double) ((double) this.totalContentLookupTime / (double) this.numContentLookups) / 1000000D;
|
2014-05-07 04:37:12 +00:00
|
|
|
DecimalFormat df = new DecimalFormat("#.00");
|
|
|
|
return new Double(df.format(avg));
|
2014-05-06 19:11:49 +00:00
|
|
|
}
|
2014-05-07 04:16:48 +00:00
|
|
|
|
2014-05-07 18:15:23 +00:00
|
|
|
@Override
|
2014-05-07 04:16:48 +00:00
|
|
|
public double averageContentLookupRouteLength()
|
|
|
|
{
|
2014-05-07 04:37:12 +00:00
|
|
|
double avg = (double) ((double) this.totalRouteLength / (double) this.numContentLookups);
|
|
|
|
DecimalFormat df = new DecimalFormat("#.00");
|
|
|
|
return new Double(df.format(avg));
|
2014-05-07 04:16:48 +00:00
|
|
|
}
|
2014-05-07 18:15:23 +00:00
|
|
|
|
|
|
|
@Override
|
2014-05-07 15:53:04 +00:00
|
|
|
public String toString()
|
|
|
|
{
|
|
|
|
StringBuilder sb = new StringBuilder("Statistician: [");
|
2014-05-07 18:15:23 +00:00
|
|
|
|
2014-05-07 15:53:04 +00:00
|
|
|
sb.append("Bootstrap Time: ");
|
|
|
|
sb.append(this.getBootstrapTime());
|
|
|
|
sb.append("; ");
|
2014-05-07 18:15:23 +00:00
|
|
|
|
2014-05-07 15:53:04 +00:00
|
|
|
sb.append("Data Sent: ");
|
2014-05-07 17:13:15 +00:00
|
|
|
sb.append("(");
|
|
|
|
sb.append(this.numDataSent);
|
|
|
|
sb.append(") ");
|
2014-05-07 15:53:04 +00:00
|
|
|
sb.append(this.getTotalDataSent());
|
2014-05-07 17:13:15 +00:00
|
|
|
sb.append(" bytes; ");
|
2014-05-07 18:15:23 +00:00
|
|
|
|
2014-05-07 15:53:04 +00:00
|
|
|
sb.append("Data Received: ");
|
2014-05-07 17:13:15 +00:00
|
|
|
sb.append("(");
|
|
|
|
sb.append(this.numDataReceived);
|
|
|
|
sb.append(") ");
|
2014-05-07 15:53:04 +00:00
|
|
|
sb.append(this.getTotalDataReceived());
|
2014-05-07 17:13:15 +00:00
|
|
|
sb.append(" bytes; ");
|
2014-05-07 18:15:23 +00:00
|
|
|
|
2014-05-07 15:53:04 +00:00
|
|
|
sb.append("Num Content Lookups: ");
|
|
|
|
sb.append(this.numContentLookups());
|
|
|
|
sb.append("; ");
|
2014-05-07 18:15:23 +00:00
|
|
|
|
2014-05-07 15:53:04 +00:00
|
|
|
sb.append("Avg Content Lookup Time: ");
|
|
|
|
sb.append(this.averageContentLookupTime());
|
|
|
|
sb.append("; ");
|
2014-05-07 18:15:23 +00:00
|
|
|
|
2014-05-07 15:53:04 +00:00
|
|
|
sb.append("Avg Content Lookup Route Lth: ");
|
|
|
|
sb.append(this.averageContentLookupRouteLength());
|
|
|
|
sb.append("; ");
|
2014-05-07 18:15:23 +00:00
|
|
|
|
2014-05-07 15:53:04 +00:00
|
|
|
sb.append("]");
|
2014-05-07 18:15:23 +00:00
|
|
|
|
2014-05-07 15:53:04 +00:00
|
|
|
return sb.toString();
|
|
|
|
}
|
2014-05-05 12:33:57 +00:00
|
|
|
}
|