package org.jboss.web.tomcat.statistics;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap;
public class ReplicationStatistics implements Serializable
{
private static final long serialVersionUID = 9153807780893455734L;
private ConcurrentReaderHashMap ctxStats;
public long lastResetTime = System.currentTimeMillis();
public static class TimeStatistic
{
public long replicationCount;
public long minPassivationTime = Long.MAX_VALUE;
public long maxPassivationTime;
public long totalPassivationTime;
public long minReplicationTime = Long.MAX_VALUE;
public long maxReplicationTime;
public long totalReplicationlTime;
public long loadCount;
public long minLoadTime = Long.MAX_VALUE;
public long maxLoadTime;
public long totalLoadlTime;
public void reset()
{
replicationCount = 0;
minPassivationTime = Long.MAX_VALUE;
maxPassivationTime = 0;
totalPassivationTime = 0;
minReplicationTime = Long.MAX_VALUE;
maxReplicationTime = 0;
totalReplicationlTime = 0;
loadCount = 0;
minLoadTime = Long.MAX_VALUE;
maxLoadTime = 0;
totalLoadlTime = 0;
}
}
public ReplicationStatistics()
{
ctxStats = new ConcurrentReaderHashMap();
}
public void updatePassivationStats(String ctx, long elapsed)
{
TimeStatistic stat = (TimeStatistic) ctxStats.get(ctx);
if( stat == null )
{
stat = new TimeStatistic();
ctxStats.put(ctx, stat);
}
stat.totalPassivationTime += elapsed;
if( stat.minPassivationTime > elapsed )
stat.minPassivationTime = elapsed;
if( stat.maxPassivationTime < elapsed )
stat.maxPassivationTime = elapsed;
}
public void updateReplicationStats(String ctx, long elapsed)
{
TimeStatistic stat = (TimeStatistic) ctxStats.get(ctx);
if( stat == null )
{
stat = new TimeStatistic();
ctxStats.put(ctx, stat);
}
stat.replicationCount ++;
stat.totalReplicationlTime += elapsed;
if( stat.minReplicationTime > elapsed )
stat.minReplicationTime = elapsed;
if( stat.maxReplicationTime < elapsed )
stat.maxReplicationTime = elapsed;
}
public void updateLoadStats(String ctx, long elapsed)
{
TimeStatistic stat = (TimeStatistic) ctxStats.get(ctx);
if( stat == null )
{
stat = new TimeStatistic();
ctxStats.put(ctx, stat);
}
stat.loadCount ++;
stat.totalLoadlTime += elapsed;
if( stat.minLoadTime > elapsed )
stat.minLoadTime = elapsed;
if( stat.maxLoadTime < elapsed )
stat.maxLoadTime = elapsed;
}
public void resetStats()
{
synchronized( ctxStats )
{
Iterator iter = ctxStats.values().iterator();
while( iter.hasNext() )
{
TimeStatistic stat = (TimeStatistic) iter.next();
stat.reset();
}
}
lastResetTime = System.currentTimeMillis();
}
public void removeStats(String id)
{
ctxStats.remove(id);
}
public Map getStats()
{
return ctxStats;
}
public String toString()
{
StringBuffer tmp = new StringBuffer();
HashMap copy = new HashMap(ctxStats);
Iterator iter = copy.entrySet().iterator();
while( iter.hasNext() )
{
Map.Entry entry = (Map.Entry) iter.next();
TimeStatistic stat = (TimeStatistic) entry.getValue();
tmp.append("[sessionID: ");
tmp.append(entry.getKey());
tmp.append(", replicationCount=");
tmp.append(stat.replicationCount);
tmp.append(", minPassivationTime=");
tmp.append(stat.minPassivationTime);
tmp.append(", maxPassivationTime=");
tmp.append(stat.maxPassivationTime);
tmp.append(", totalPassivationTime=");
tmp.append(stat.totalPassivationTime);
tmp.append(", minReplicationTime=");
tmp.append(stat.minReplicationTime);
tmp.append(", maxReplicationTime=");
tmp.append(stat.maxReplicationTime);
tmp.append(", totalReplicationlTime=");
tmp.append(stat.totalReplicationlTime);
tmp.append(", loadCount=");
tmp.append(stat.loadCount);
tmp.append(", minLoadTime=");
tmp.append(stat.minLoadTime);
tmp.append(", maxLoadTime=");
tmp.append(stat.maxLoadTime);
tmp.append(", totaLoadlTime=");
tmp.append(stat.totalLoadlTime);
tmp.append("];");
}
tmp.append(")");
return tmp.toString();
}
}