package com.limegroup.gnutella;
import org.limewire.core.settings.ApplicationSettings;
import org.limewire.inject.EagerSingleton;
import org.limewire.util.Clock;
import com.google.inject.Inject;
/**
* Maintains various session statistics, like uptime.
*/
@EagerSingleton
public class Statistics {
private final Clock clock;
/** The number of seconds in a day. */
protected static final int SECONDS_PER_DAY = 24 * 60 * 60;
/** The time this was constructed. */
private final long startTime;
@Inject
public Statistics(Clock clock) {
this.clock = clock;
startTime = clock.now();
}
/**
* Returns the amount of time this has been running.
* @return the session uptime in milliseconds
*/
public long getUptime() {
// Return 0 if the clock has gone backwards
return Math.max(0, clock.now() - startTime);
}
/**
* Calculates the average number of seconds this host runs per day.
* @return uptime in seconds/day.
* @see calculateFractionalUptime
*/
public int calculateDailyUptime() {
return (int)(calculateFractionalUptime() * SECONDS_PER_DAY);
}
/**
* Calculates the fraction of time this host runs, a unitless quantity
* between zero and 1.
* @see calculateDailyUptime
*/
public float calculateFractionalUptime() {
String[] uptimes = ApplicationSettings.UPTIME_HISTORY.get();
String[] downtimes = ApplicationSettings.DOWNTIME_HISTORY.get();
float up = 0, down = 0;
for(int i = 0; i < uptimes.length; i++) {
up += Long.valueOf(uptimes[i]);
}
for(int i = 0; i < downtimes.length; i++) {
down += Long.valueOf(downtimes[i]);
}
if(up + down == 0f)
return 0f;
else
return up / (up + down);
}
}