package freenet.node;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import freenet.support.HTMLNode;
/** Statistics tracking for performance analysis. */
public class HourlyStats {
private HourlyStatsRecord prevRecord;
private HourlyStatsRecord currentRecord;
private HourlyStatsRecord totalRecord;
private Calendar lastHourlyTime;
private Calendar currentTime;
private final Node node;
/** Public constructor. */
public HourlyStats(Node node) {
this.node = node;
prevRecord = null;
currentRecord = new HourlyStatsRecord(node, false);
totalRecord = new HourlyStatsRecord(node, false);
lastHourlyTime = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
currentTime = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
}
/** Report an incoming accepted remote request.
*
* @param ssk Whether the request was an ssk
* @param success Whether the request succeeded
* @param local If the request succeeded, whether it succeeded locally
* @param htl The htl counter the request had when it arrived
* @param location The routing location of the request
*/
public synchronized void remoteRequest(boolean ssk, boolean success, boolean local,
int htl, double location) {
Date now = new Date();
currentTime.setTime(now);
if (lastHourlyTime.get(Calendar.HOUR_OF_DAY) !=
currentTime.get(Calendar.HOUR_OF_DAY)) {
//new hour, cycle things.
lastHourlyTime.setTime(now);
prevRecord = currentRecord;
currentRecord = new HourlyStatsRecord(node, true);
prevRecord.markFinal();
prevRecord.log();
}
currentRecord.remoteRequest(ssk, success, local, htl, location);
totalRecord.remoteRequest(ssk, success, local, htl, location);
}
public void fillRemoteRequestHTLsBox(HTMLNode html) {
totalRecord.fillRemoteRequestHTLsBox(html);
}
}