package org.limewire.statistic;
/**
* Abstract class for recording data in kilobytes instead of bytes. In order to
* preserve data accuracy, data is stored in bytes and converted to kilobytes;
* otherwise, data would be lost.
* <p>
* A sample, aka a cycle of data, is all the data collected between calls to
* {@link #storeCurrentStat()}.
* Therefore, the {@link #getMax()} is the largest sample and the
* {@link #getAverage()} is the total size / the number of samples.
* <p>
* An example of using <code>AbstractKilobytesStatistic</code>:
<pre>
class Stats extends AbstractKilobytesStatistic {}
Statistic s = new Stats();
for(int i = 0; i < 1024; i++)
s.incrementStat();
s.storeCurrentStat();
s.addData(2 * 1024);
s.storeCurrentStat();
s.addData(3 * 1024);
s.storeCurrentStat();
s.addData(4 * 1024);
s.storeCurrentStat();
s.addData(5 * 1024);
s.storeCurrentStat();
System.out.println("Total: " + s.getTotal());
System.out.println("Max: " + s.getMax());
System.out.println("Average: " + s.getAverage());
Output:
Total: 15.0
Max: 5.0
Average: 3.0
</pre>
*
*
*/
public abstract class AbstractKilobytesStatistic extends AbstractStatistic {
/**
* Bytes per kilobyte for conversion convenience.
*/
private static final int BYTES_PER_KILOBYTE = 1024;
/**
* Overridden to report the average for this statistic in kilobyes.
*
* @return the average for this statistic in kilobytes per unit of
* measurement (KB/s)
*/
@Override
public double getAverage() {
if (_totalStatsRecorded == 0)
return 0;
return (_total / _totalStatsRecorded) / BYTES_PER_KILOBYTE;
}
/**
* Overridden to report the maximum for this statistic in kilobyes.
*
* @return the maximum for a recorded time period for this statistic
* in kilobytes
*/
@Override
public double getMax() {
return _max/BYTES_PER_KILOBYTE;
}
/**
* Overridden to report the total for this statistic in kilobytes.
*
* @return the total for this statistic in kilobytes
*/
@Override
public double getTotal() {
return _total/BYTES_PER_KILOBYTE;
}
}