webadmin/src/wa/server/util/ThroughputCalculator.java

51 lines
1.5 KiB
Java

package wa.server.util;
/**
* Created by Ziver Koc
*/
public class ThroughputCalculator {
public static final float UPDATES_PER_SEC = 1;
public static final double NANOSEC_PER_SECOND = 1000000000.0;
private boolean updated;
private double throughput;
private long previousTimeStamp;
private long data_amount;
private long total_data_amount;
private float frequency = UPDATES_PER_SEC;
public void setTotalHandledData(long bytes){
setHandledData(bytes - total_data_amount);
total_data_amount = bytes;
}
public void setHandledData(long bytes){
long currentTimeStamp = System.nanoTime();
data_amount += bytes;
if(currentTimeStamp - (NANOSEC_PER_SECOND/frequency) > previousTimeStamp) {
throughput = data_amount / ((currentTimeStamp - previousTimeStamp) / NANOSEC_PER_SECOND);
previousTimeStamp = currentTimeStamp;
data_amount = 0;
updated = true;
}
}
public double getByteThroughput(){
setHandledData(0); // Update throughput
updated = false;
return throughput;
}
public double getBitThroughput(){
return getByteThroughput()*8;
}
public boolean isUpdated(){
return updated;
}
public void setFrequency(float frequency) {
if(frequency < 0)
this.frequency = UPDATES_PER_SEC;
else
this.frequency = frequency;
}
}