Changeset 891
- Timestamp:
- 10/07/06 12:06:30 (2 years ago)
- Files:
-
- trunk/source/org/kolaka/freecast/manager/gui/Main.java (modified) (1 diff)
- trunk/source/org/kolaka/freecast/node/DefaultNodeService.java (modified) (1 diff)
- trunk/source/org/kolaka/freecast/tracker/DefaultMultiTracker.java (modified) (5 diffs)
- trunk/source/org/kolaka/freecast/tracker/DefaultTracker.java (modified) (4 diffs)
- trunk/source/org/kolaka/freecast/tracker/Main.java (modified) (1 diff)
- trunk/source/org/kolaka/freecast/tracker/NetworkIdentifier.java (modified) (1 diff)
- trunk/source/org/kolaka/freecast/tracker/http (added)
- trunk/source/org/kolaka/freecast/tracker/http/HessianClientInfoProvider.java (moved) (moved from trunk/source/org/kolaka/freecast/tracker/HessianClientInfoProvider.java) (1 diff)
- trunk/source/org/kolaka/freecast/tracker/http/HttpMultiTrackerConnector.java (moved) (moved from trunk/source/org/kolaka/freecast/tracker/HttpMultiTrackerConnector.java) (2 diffs)
- trunk/source/org/kolaka/freecast/tracker/http/HttpMultiTrackerLocator.java (moved) (moved from trunk/source/org/kolaka/freecast/tracker/HttpMultiTrackerLocator.java) (2 diffs)
- trunk/source/org/kolaka/freecast/tracker/http/HttpSimpleTrackerConnector.java (moved) (moved from trunk/source/org/kolaka/freecast/tracker/HttpSimpleTrackerConnector.java) (2 diffs)
- trunk/source/org/kolaka/freecast/tracker/http/HttpTracker.java (moved) (moved from trunk/source/org/kolaka/freecast/tracker/HttpTracker.java) (7 diffs)
- trunk/source/org/kolaka/freecast/tracker/http/HttpTrackerConfigurator.java (moved) (moved from trunk/source/org/kolaka/freecast/tracker/HttpTrackerConfigurator.java) (3 diffs)
- trunk/source/org/kolaka/freecast/tracker/http/HttpTrackerConnector.java (moved) (moved from trunk/source/org/kolaka/freecast/tracker/HttpTrackerConnector.java) (1 diff)
- trunk/source/org/kolaka/freecast/tracker/http/HttpTrackerLocator.java (moved) (moved from trunk/source/org/kolaka/freecast/tracker/HttpTrackerLocator.java) (2 diffs)
- trunk/source/org/kolaka/freecast/tracker/http/IceStatsServlet.java (moved) (moved from trunk/source/org/kolaka/freecast/tracker/IceStatsServlet.java) (2 diffs)
- trunk/source/org/kolaka/freecast/tracker/statistics (added)
- trunk/source/org/kolaka/freecast/tracker/statistics/DefaultTrackerStatistics.java (moved) (moved from trunk/source/org/kolaka/freecast/tracker/DefaultTrackerStatistics.java) (3 diffs)
- trunk/source/org/kolaka/freecast/tracker/statistics/ExecTrackerStatisticsConsumer.java (added)
- trunk/source/org/kolaka/freecast/tracker/statistics/FileTrackerStatisticsConsumer.java (added)
- trunk/source/org/kolaka/freecast/tracker/statistics/JDBCTrackerStatisticsConsumer.java (added)
- trunk/source/org/kolaka/freecast/tracker/statistics/MultiTrackerStatisticsProvider.java (moved) (moved from trunk/source/org/kolaka/freecast/tracker/MultiTrackerStatisticsProvider.java) (1 diff)
- trunk/source/org/kolaka/freecast/tracker/statistics/TrackerStatistics.java (moved) (moved from trunk/source/org/kolaka/freecast/tracker/TrackerStatistics.java) (2 diffs)
- trunk/source/org/kolaka/freecast/tracker/statistics/TrackerStatisticsComputer.java (moved) (moved from trunk/source/org/kolaka/freecast/tracker/TrackerStatisticsComputer.java) (3 diffs)
- trunk/source/org/kolaka/freecast/tracker/statistics/TrackerStatisticsConsumer.java (added)
- trunk/source/org/kolaka/freecast/tracker/statistics/TrackerStatisticsConsumerLoader.java (added)
- trunk/source/org/kolaka/freecast/tracker/statistics/TrackerStatisticsConsumerManager.java (added)
- trunk/source/org/kolaka/freecast/tracker/statistics/TrackerStatisticsProvider.java (moved) (moved from trunk/source/org/kolaka/freecast/tracker/TrackerStatisticsProvider.java) (1 diff)
- trunk/source/org/kolaka/freecast/tracker/statistics/TrackerStatisticsSetProvider.java (added)
- trunk/source/org/kolaka/freecast/tracker/statistics/test (added)
- trunk/source/org/kolaka/freecast/tracker/statistics/test/ExecTrackerStatisticsConsumerTest.java (added)
- trunk/source/org/kolaka/freecast/tracker/statistics/test/FileTrackerStatisticsConsumerTest.java (added)
- trunk/source/org/kolaka/freecast/tracker/statistics/test/TrackerStatisticsConsumerLoaderTest.java (added)
- trunk/source/org/kolaka/freecast/tracker/test/TrackerServletTest.java (modified) (1 diff)
- trunk/source/org/kolaka/freecast/tracker/test/TrackerStatisticsComputerTest.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/source/org/kolaka/freecast/manager/gui/Main.java
r849 r891 42 42 import org.kolaka.freecast.swing.ConfigurableResources; 43 43 import org.kolaka.freecast.swing.SwingApplication; 44 import org.kolaka.freecast.tracker.HttpTracker;45 import org.kolaka.freecast.tracker.HttpTrackerConfigurator;46 44 import org.kolaka.freecast.tracker.NoConfiguredTrackerException; 45 import org.kolaka.freecast.tracker.http.HttpTracker; 46 import org.kolaka.freecast.tracker.http.HttpTrackerConfigurator; 47 47 48 48 /** trunk/source/org/kolaka/freecast/node/DefaultNodeService.java
r830 r891 32 32 import org.kolaka.freecast.service.ControlException; 33 33 import org.kolaka.freecast.service.LoopService; 34 import org.kolaka.freecast.tracker.HttpMultiTrackerLocator;35 import org.kolaka.freecast.tracker.HttpTrackerLocator;36 34 import org.kolaka.freecast.tracker.NetworkIdentifier; 37 35 import org.kolaka.freecast.tracker.Tracker; 38 36 import org.kolaka.freecast.tracker.TrackerException; 39 37 import org.kolaka.freecast.tracker.TrackerLocator; 38 import org.kolaka.freecast.tracker.http.HttpMultiTrackerLocator; 39 import org.kolaka.freecast.tracker.http.HttpTrackerLocator; 40 40 41 41 /** trunk/source/org/kolaka/freecast/tracker/DefaultMultiTracker.java
r888 r891 25 25 26 26 import java.util.Date; 27 import java.util.HashSet; 27 28 import java.util.Iterator; 28 29 import java.util.Map; … … 38 39 import org.kolaka.freecast.timer.Timer; 39 40 import org.kolaka.freecast.timer.TimerUser; 41 import org.kolaka.freecast.tracker.statistics.DefaultTrackerStatistics; 42 import org.kolaka.freecast.tracker.statistics.MultiTrackerStatisticsProvider; 43 import org.kolaka.freecast.tracker.statistics.TrackerStatistics; 44 import org.kolaka.freecast.tracker.statistics.TrackerStatisticsProvider; 45 import org.kolaka.freecast.tracker.statistics.TrackerStatisticsSetProvider; 40 46 41 public class DefaultMultiTracker implements MultiTracker, TimerUser, ClientInfoProviderUser, MultiTrackerStatisticsProvider {47 public class DefaultMultiTracker implements MultiTracker, TimerUser, ClientInfoProviderUser, MultiTrackerStatisticsProvider, TrackerStatisticsSetProvider { 42 48 43 private Map trackers = new TreeMap();49 private final Map trackers = new TreeMap(); 44 50 45 51 private ClientInfoProvider clientInfoProvider; 46 52 47 53 public DefaultMultiTracker() { 48 54 Runnable purgeRunnable = new Runnable() { … … 53 59 timer.executePeriodically(DefaultTimer.minutes(1), purgeRunnable , false); 54 60 } 55 61 62 public Set getStatisticsSet() { 63 Set statistics = new HashSet(); 64 for (Iterator iterator = trackers.values().iterator(); iterator.hasNext();) { 65 Tracker tracker = (Tracker) iterator.next(); 66 statistics.add(((TrackerStatisticsProvider) tracker).getStatistics()); 67 } 68 return statistics; 69 } 70 56 71 public TrackerStatistics getStatistics(NetworkIdentifier identifier) { 57 72 Tracker tracker = (Tracker) trackers.get(identifier); … … 77 92 if (tracker == null) { 78 93 LogFactory.getLog(getClass()).info("create tracker for network " + identifier); 79 tracker = createTracker( getClientInfoProvider());94 tracker = createTracker(identifier, getClientInfoProvider()); 80 95 trackers.put(identifier, tracker); 81 96 } … … 83 98 } 84 99 85 protected Tracker createTracker( ClientInfoProvider clientInfoProvider) {86 DefaultTracker tracker = new DefaultTracker( );100 protected Tracker createTracker(NetworkIdentifier identifier, ClientInfoProvider clientInfoProvider) { 101 DefaultTracker tracker = new DefaultTracker(identifier); 87 102 tracker.setClientInfoProvider(clientInfoProvider); 88 103 return new TimedTracker(tracker); trunk/source/org/kolaka/freecast/tracker/DefaultTracker.java
r888 r891 26 26 import java.net.InetAddress; 27 27 import java.net.UnknownHostException; 28 import java.util.Collections; 28 29 import java.util.Date; 29 30 import java.util.HashMap; … … 43 44 import org.kolaka.freecast.peer.PeerReferences; 44 45 import org.kolaka.freecast.service.ControlException; 46 import org.kolaka.freecast.tracker.statistics.TrackerStatistics; 47 import org.kolaka.freecast.tracker.statistics.TrackerStatisticsComputer; 48 import org.kolaka.freecast.tracker.statistics.TrackerStatisticsProvider; 49 import org.kolaka.freecast.tracker.statistics.TrackerStatisticsSetProvider; 45 50 46 51 /** … … 49 54 * @author <a href="mailto:alban.peignier@free.fr">Alban Peignier </a> 50 55 */ 51 public class DefaultTracker implements Tracker, ClientInfoProviderUser, TrackerStatisticsProvider {56 public class DefaultTracker implements Tracker, ClientInfoProviderUser, TrackerStatisticsProvider, TrackerStatisticsSetProvider { 52 57 53 58 private Map entries = new HashMap(); … … 62 67 return statisticsComputer.getStatistics(); 63 68 } 64 65 public DefaultTracker() { 69 70 public Set getStatisticsSet() { 71 return Collections.singleton(getStatistics()); 72 } 73 74 public DefaultTracker(NetworkIdentifier networkId) { 75 this(); 76 statisticsComputer.setNetworkId(networkId); 77 } 78 79 public DefaultTracker() { 66 80 this.auditor = (Tracker.Auditor) AuditorFactory.getInstance().get( 67 81 Tracker.Auditor.class, this); trunk/source/org/kolaka/freecast/tracker/Main.java
r840 r891 26 26 import org.apache.commons.configuration.Configuration; 27 27 import org.kolaka.freecast.Application; 28 import org.kolaka.freecast.tracker.http.HttpTracker; 29 import org.kolaka.freecast.tracker.http.HttpTrackerConfigurator; 28 30 29 31 /** trunk/source/org/kolaka/freecast/tracker/NetworkIdentifier.java
r863 r891 51 51 52 52 public String toString() { 53 return "#" +Long.toHexString(value).toUpperCase();53 return Long.toHexString(value).toUpperCase(); 54 54 } 55 55 trunk/source/org/kolaka/freecast/tracker/http/HessianClientInfoProvider.java
r888 r891 22 22 */ 23 23 24 package org.kolaka.freecast.tracker; 24 package org.kolaka.freecast.tracker.http; 25 26 import org.kolaka.freecast.tracker.ClientInfoProvider; 27 import org.kolaka.freecast.tracker.TrackerException; 25 28 26 29 import com.caucho.services.server.ServiceContext; trunk/source/org/kolaka/freecast/tracker/http/HttpMultiTrackerConnector.java
r888 r891 22 22 */ 23 23 24 package org.kolaka.freecast.tracker ;24 package org.kolaka.freecast.tracker.http; 25 25 26 26 import java.util.Set; … … 31 31 import org.kolaka.freecast.node.NodeStatus; 32 32 import org.kolaka.freecast.peer.PeerReference; 33 import org.kolaka.freecast.tracker.MultiTracker; 34 import org.kolaka.freecast.tracker.NetworkIdentifier; 35 import org.kolaka.freecast.tracker.TrackerException; 33 36 34 37 public class HttpMultiTrackerConnector extends HttpTrackerConnector implements MultiTracker { trunk/source/org/kolaka/freecast/tracker/http/HttpMultiTrackerLocator.java
r830 r891 22 22 */ 23 23 24 package org.kolaka.freecast.tracker ;24 package org.kolaka.freecast.tracker.http; 25 25 26 26 import java.net.InetSocketAddress; … … 28 28 29 29 import org.apache.commons.lang.Validate; 30 import org.kolaka.freecast.tracker.MultiTracker; 31 import org.kolaka.freecast.tracker.MultiTrackerAdapter; 32 import org.kolaka.freecast.tracker.NetworkIdentifier; 33 import org.kolaka.freecast.tracker.ProtectedTracker; 34 import org.kolaka.freecast.tracker.Tracker; 35 import org.kolaka.freecast.tracker.TrackerException; 36 import org.kolaka.freecast.tracker.TrackerLocator; 30 37 31 38 import com.caucho.hessian.client.HessianProxyFactory; trunk/source/org/kolaka/freecast/tracker/http/HttpSimpleTrackerConnector.java
r888 r891 22 22 */ 23 23 24 package org.kolaka.freecast.tracker ;24 package org.kolaka.freecast.tracker.http; 25 25 26 26 import java.util.Set; … … 31 31 import org.kolaka.freecast.node.NodeStatus; 32 32 import org.kolaka.freecast.peer.PeerReference; 33 import org.kolaka.freecast.tracker.Tracker; 34 import org.kolaka.freecast.tracker.TrackerException; 33 35 34 36 public class HttpSimpleTrackerConnector extends HttpTrackerConnector implements Tracker { trunk/source/org/kolaka/freecast/tracker/http/HttpTracker.java
r888 r891 22 22 */ 23 23 24 package org.kolaka.freecast.tracker ;24 package org.kolaka.freecast.tracker.http; 25 25 26 26 import java.net.InetSocketAddress; … … 28 28 import org.apache.commons.logging.LogFactory; 29 29 import org.kolaka.freecast.service.ControlException; 30 import org.kolaka.freecast.tracker.DefaultMultiTracker; 31 import org.kolaka.freecast.tracker.DefaultTracker; 32 import org.kolaka.freecast.tracker.Main; 33 import org.kolaka.freecast.tracker.TrackerService; 34 import org.kolaka.freecast.tracker.statistics.TrackerStatisticsConsumer; 35 import org.kolaka.freecast.tracker.statistics.TrackerStatisticsConsumerManager; 36 import org.kolaka.freecast.tracker.statistics.TrackerStatisticsSetProvider; 30 37 import org.kolaka.freecast.transport.cas.ConnectionAssistantServer; 31 38 import org.mortbay.http.SocketListener; … … 55 62 this.listenAddress = listenAddress; 56 63 } 64 65 private TrackerStatisticsConsumerManager consumerManager = new TrackerStatisticsConsumerManager(); 57 66 67 public void add(TrackerStatisticsConsumer consumer) { 68 consumerManager.add(consumer); 69 } 70 58 71 private boolean multiTracker; 59 72 … … 61 74 this.multiTracker = multiTracker; 62 75 } 63 76 64 77 public void start() throws ControlException { 65 78 LogFactory.getLog(Main.class).info( … … 79 92 "use connector " + connectorClass.getName()); 80 93 94 if (tracker instanceof TrackerStatisticsSetProvider) { 95 consumerManager.setProvider((TrackerStatisticsSetProvider) tracker); 96 } 97 81 98 server = new Server(); 82 99 SocketListener listener = new SocketListener(); … … 109 126 110 127 if (caServer != null) { 111 caServer.start();128 caServer.start(); 112 129 } 130 131 consumerManager.start(); 113 132 } 114 133 … … 123 142 caServer.stop(); 124 143 } 144 145 consumerManager.stop(); 125 146 } 126 147 trunk/source/org/kolaka/freecast/tracker/http/HttpTrackerConfigurator.java
r888 r891 22 22 */ 23 23 24 package org.kolaka.freecast.tracker ;24 package org.kolaka.freecast.tracker.http; 25 25 26 26 import java.net.InetSocketAddress; 27 27 28 28 import org.apache.commons.configuration.Configuration; 29 import org.apache.commons.configuration.ConfigurationException; 30 import org.apache.commons.logging.LogFactory; 31 import org.kolaka.freecast.tracker.NoConfiguredTrackerException; 32 import org.kolaka.freecast.tracker.statistics.TrackerStatisticsConsumer; 33 import org.kolaka.freecast.tracker.statistics.TrackerStatisticsConsumerLoader; 29 34 import org.kolaka.freecast.transport.cas.ConnectionAssistantServer; 30 35 … … 36 41 public class HttpTrackerConfigurator { 37 42 38 public void configure(HttpTracker tracker, Configuration configuration) throws NoConfiguredTrackerException {43 public void configure(HttpTracker tracker, Configuration configuration) throws NoConfiguredTrackerException, ConfigurationException { 39 44 /* 40 45 * for the moment, the tracker.class changes the Connector implementation … … 66 71 tracker.setConnectionAssistantServer(server); 67 72 } 73 74 Configuration consumerConfiguration = configuration.subset("statistics.consumer"); 75 TrackerStatisticsConsumer consumer = new TrackerStatisticsConsumerLoader().load(consumerConfiguration); 76 LogFactory.getLog(getClass()).debug("add consumer : " + consumer); 77 tracker.add(consumer); 68 78 } 69 79 trunk/source/org/kolaka/freecast/tracker/http/HttpTrackerConnector.java
r888 r891 22 22 */ 23 23 24 package org.kolaka.freecast.tracker; 24 package org.kolaka.freecast.tracker.http; 25 26 import org.kolaka.freecast.tracker.ClientInfoProviderUser; 25 27 26 28 import com.caucho.hessian.server.HessianServlet; trunk/source/org/kolaka/freecast/tracker/http/HttpTrackerLocator.java
r830 r891 22 22 */ 23 23 24 package org.kolaka.freecast.tracker ;24 package org.kolaka.freecast.tracker.http; 25 25 26 26 import java.net.InetSocketAddress; … … 28 28 29 29 import org.apache.commons.lang.Validate; 30 import org.kolaka.freecast.tracker.ProtectedTracker; 31 import org.kolaka.freecast.tracker.Tracker; 32 import org.kolaka.freecast.tracker.TrackerException; 33 import org.kolaka.freecast.tracker.TrackerLocator; 30 34 31 35 import com.caucho.hessian.client.HessianProxyFactory; trunk/source/org/kolaka/freecast/tracker/http/IceStatsServlet.java
r888 r891 22 22 */ 23 23 24 package org.kolaka.freecast.tracker ;24 package org.kolaka.freecast.tracker.http; 25 25 26 26 import java.io.IOException; … … 32 32 33 33 import org.apache.commons.logging.LogFactory; 34 import org.kolaka.freecast.tracker.NetworkIdentifier; 35 import org.kolaka.freecast.tracker.statistics.MultiTrackerStatisticsProvider; 36 import org.kolaka.freecast.tracker.statistics.TrackerStatistics; 37 import org.kolaka.freecast.tracker.statistics.TrackerStatisticsProvider; 34 38 35 39 public class IceStatsServlet extends HttpServlet { trunk/source/org/kolaka/freecast/tracker/statistics/DefaultTrackerStatistics.java
r888 r891 22 22 */ 23 23 24 package org.kolaka.freecast.tracker ;24 package org.kolaka.freecast.tracker.statistics; 25 25 26 26 import org.apache.commons.lang.builder.EqualsBuilder; 27 27 import org.apache.commons.lang.builder.HashCodeBuilder; 28 28 import org.apache.commons.lang.builder.ToStringBuilder; 29 import org.kolaka.freecast.tracker.NetworkIdentifier; 29 30 30 31 public class DefaultTrackerStatistics implements TrackerStatistics { … … 36 37 37 38 private int listenerConnected; 39 40 private NetworkIdentifier networkId; 38 41 39 42 public DefaultTrackerStatistics() { … … 82 85 } 83 86 87 public NetworkIdentifier getNetworkId() { 88 return networkId; 89 } 90 91 public void setNetworkId(NetworkIdentifier networkId) { 92 this.networkId = networkId; 93 } 94 84 95 public String toString() { 85 96 return ToStringBuilder.reflectionToString(this); trunk/source/org/kolaka/freecast/tracker/statistics/MultiTrackerStatisticsProvider.java
r888 r891 22 22 */ 23 23 24 package org.kolaka.freecast.tracker; 24 package org.kolaka.freecast.tracker.statistics; 25 26 import org.kolaka.freecast.tracker.NetworkIdentifier; 25 27 26 28 public interface MultiTrackerStatisticsProvider { trunk/source/org/kolaka/freecast/tracker/statistics/TrackerStatistics.java
r888 r891 22 22 */ 23 23 24 package org.kolaka.freecast.tracker; 24 package org.kolaka.freecast.tracker.statistics; 25 26 import org.kolaka.freecast.tracker.NetworkIdentifier; 25 27 26 28 public interface TrackerStatistics { … … 33 35 34 36 int getListenerConnected(); 37 38 NetworkIdentifier getNetworkId(); 35 39 36 40 } trunk/source/org/kolaka/freecast/tracker/statistics/TrackerStatisticsComputer.java
r888 r891 22 22 */ 23 23 24 package org.kolaka.freecast.tracker ;24 package org.kolaka.freecast.tracker.statistics; 25 25 26 26 import org.apache.commons.logging.LogFactory; 27 import org.kolaka.freecast.tracker.NetworkIdentifier; 27 28 28 public class TrackerStatisticsComputer {29 public class TrackerStatisticsComputer implements TrackerStatisticsProvider { 29 30 30 31 private int nodeConnections; … … 41 42 statistics.setRootNodeConnections(rootNodeConnections); 42 43 statistics.setRootNodePresents(rootNodePresents); 44 if (networkId != null) { 45 statistics.setNetworkId(networkId); 46 } 43 47 return statistics; 44 48 } … … 70 74 LogFactory.getLog(getClass()).info(getStatistics()); 71 75 } 76 77 private NetworkIdentifier networkId; 78 79 public void setNetworkId(NetworkIdentifier networkId) { 80 this.networkId = networkId; 81 } 72 82 73 83 } trunk/source/org/kolaka/freecast/tracker/statistics/TrackerStatisticsProvider.java
r888 r891 22 22 */ 23 23 24 package org.kolaka.freecast.tracker ;24 package org.kolaka.freecast.tracker.statistics; 25 25 26 26 public interface TrackerStatisticsProvider { trunk/source/org/kolaka/freecast/tracker/test/TrackerServletTest.java
r889 r891 29 29 import org.kolaka.freecast.peer.InetPeerReference; 30 30 import org.kolaka.freecast.test.BaseTestCase; 31 import org.kolaka.freecast.tracker.HttpMultiTrackerLocator;32 import org.kolaka.freecast.tracker.HttpTracker;33 import org.kolaka.freecast.tracker.HttpTrackerLocator;34 31 import org.kolaka.freecast.tracker.NetworkIdentifier; 35 32 import org.kolaka.freecast.tracker.Tracker; 36 33 import org.kolaka.freecast.tracker.TrackerException; 37 34 import org.kolaka.freecast.tracker.TrackerLocator; 35 import org.kolaka.freecast.tracker.http.HttpMultiTrackerLocator; 36 import org.kolaka.freecast.tracker.http.HttpTracker; 37 import org.kolaka.freecast.tracker.http.HttpTrackerLocator; 38 38 39 39 /** trunk/source/org/kolaka/freecast/tracker/test/TrackerStatisticsComputerTest.java
r888 r891 26 26 import junit.framework.TestCase; 27 27 28 import org.kolaka.freecast.tracker. DefaultTrackerStatistics;29 import org.kolaka.freecast.tracker. TrackerStatisticsComputer;28 import org.kolaka.freecast.tracker.statistics.DefaultTrackerStatistics; 29 import org.kolaka.freecast.tracker.statistics.TrackerStatisticsComputer; 30 30 31 31 public class TrackerStatisticsComputerTest extends TestCase {
