package com.limegroup.gnutella; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.limewire.inject.EagerSingleton; import org.limewire.lifecycle.Service; import com.google.inject.Inject; import com.google.inject.name.Named; import com.limegroup.gnutella.statistics.OutOfBandStatistics; @EagerSingleton public class OutOfBandThroughputMeasurer implements Service { private static final Log LOG = LogFactory.getLog(OutOfBandThroughputMeasurer.class); private final ScheduledExecutorService backgroundExecutor; private final OutOfBandStatistics outOfBandStatistics; @Inject public OutOfBandThroughputMeasurer(@Named("backgroundExecutor") ScheduledExecutorService backgroundExecutor, OutOfBandStatistics outOfBandStatistics) { this.backgroundExecutor = backgroundExecutor; this.outOfBandStatistics = outOfBandStatistics; } @Inject void register(org.limewire.lifecycle.ServiceRegistry registry) { registry.register(this); } public String getServiceName() { return "OOB Throughput Measurer"; } public void initialize() { } public void stop() { } public void start() { Runnable adjuster = new Runnable() { public void run() { if (LOG.isDebugEnabled()) LOG.debug("current success rate " + outOfBandStatistics.getSuccessRate() + " based on " + outOfBandStatistics.getRequestedResponses() + " measurements with a min sample size " + outOfBandStatistics.getSampleSize()); if (!outOfBandStatistics.isSuccessRateGreat() && !outOfBandStatistics.isSuccessRateTerrible()) { LOG.debug("boosting sample size"); outOfBandStatistics.increaseSampleSize(); } } }; int thirtyMins = 30 * 60 * 1000; backgroundExecutor.scheduleWithFixedDelay(adjuster, thirtyMins, thirtyMins, TimeUnit.MILLISECONDS); } }