StatisticsCollector.java |
/* * JBoss, the OpenSource J2EE webOS * * Distributable under LGPL license. * See terms of license at gnu.org. */ package org.jboss.varia.stats; import org.jboss.system.ServiceMBeanSupport; import org.jboss.varia.stats.report.ReportGenerator; import java.util.Iterator; import java.util.Set; import java.util.HashSet; /** * @author <a href="mailto:alex@jboss.org">Alexey Loubyansky</a> * @version <tt>$Revision: 1.2 $</tt> * @jmx:mbean name="jboss.stats:service=StatisticsCollector" * extends="org.jboss.system.ServiceMBean" */ public class StatisticsCollector extends ServiceMBeanSupport implements StatisticsCollectorMBean { private final TxStatistics stats = new TxStatistics(); private final Set reportGenerators = new HashSet(); /** * @jmx.managed-operation */ public void registerReportGenerator(ReportGenerator reportGenerator) { reportGenerators.add(reportGenerator); } /** * @jmx.managed-operation */ public void unregisterReportGenerator(ReportGenerator reportGenerator) { reportGenerators.remove(reportGenerator); } /** * @jmx.managed-operation */ public void clearStatistics() { stats.clear(); } /** * @jmx.managed-operation */ public void addStatisticalItem(StatisticalItem item) { stats.addStatisticalItem(item); } /** * @jmx.managed-operation */ public Iterator reportsIterator() { return stats.getReports(); } /** * @jmx.managed-operation */ public TxStatistics txStatistics() { return stats; } /** * @jmx.managed-operation */ public synchronized String reports() { StringBuffer buf = new StringBuffer(); buf.append("<table><tr><th>Report</th><th>Description</th></tr>"); for(Iterator generators = reportGenerators.iterator(); generators.hasNext();) { ReportGenerator generator = (ReportGenerator)generators.next(); buf.append("<tr><td>") .append("<a href='HtmlAdaptor?") .append("action=invokeOpByName&name=") .append(generator.getServiceName()) .append("&methodName=generate&") .append("argType=java.lang.String&arg0=") .append("'>") .append(generator.getName()) .append("</a></td><td>") .append(generator.getDescription()) .append("</td></tr>"); } buf.append("</table>"); /* buf.append("<table><tr valign='top'><td>"); buf.append("<table>"); buf.append("<tr><th>Transaction started by</th><th>total</th>"); buf.append("</tr>"); for(Iterator iter = stats.getReports(); iter.hasNext();) { TxReport report = (TxReport) iter.next(); String name = report.getName(); buf.append("<tr valign='top'>") .append("<td>"); boolean anchor = !name.equals(reportName) && reportName != null; if(anchor) { buf.append("<a href='HtmlAdaptor?") .append("action=invokeOpByName&name=jboss.stats%3Aservice%3DStatisticsCollector&methodName=report&") .append("argType=java.lang.String&arg0=") .append(name) .append("'>"); } buf.append(name) .append("</td><td>") .append(report.getCount()) .append("</td>"); if(anchor) { buf.append("</a>"); } buf.append("</td></tr>"); } buf.append("</table>"); buf.append("</td><td>"); TxReport report = stats.getReports(reportName); if(report != null) { buf.append("<table><tr>"); String[] itemNames = stats.getCollectedItemNames(); for(int i = 0; i < itemNames.length; ++i) { buf.append("<th>").append(itemNames[i]).append("</th>"); } buf.append("</tr><tr valign='top'>"); for(int i = 0; i < itemNames.length; ++i) { buf.append("<td>"); String itemName = itemNames[i]; Map itemMap = (Map) report.getStats().get(itemName); if(itemMap != null && !itemMap.isEmpty()) { buf.append("<table width='100%'>") .append("<tr><th>item</th><th>%</th><th>avg</th><th>min</th><th>max</th></tr>"); for(Iterator itemIter = itemMap.values().iterator(); itemIter.hasNext();) { StatisticalItem item = (StatisticalItem) itemIter.next(); buf.append("<tr><td>") .append(item.getValue()) .append("</td><td>") .append(100*((double)item.getMergedItemsTotal() / report.getCount())) .append("</td><td>") .append(((double) item.getCount()) / report.getCount()) .append("</td><td>") .append(item.getMinCountPerTx()) .append("</td><td>") .append(item.getMaxCountPerTx()) .append("</td>"); } buf.append("</table>"); } buf.append("</td>"); } buf.append("</tr></table>"); } buf.append("</td></tr></table>"); buf.append("<ul>") .append("<li><b>Transaction started by</b> - the method which started the transaction</li>") .append("<li><b>total</b> - the total number of transactions in the run</li>") .append("<li><b>%</b> - the percentage of transactions this item took place in</li>") .append("<li><b>avg</b> - the average number of times the item took place in the given transaction</li>") .append("</ul>"); */ return buf.toString(); } }
StatisticsCollector.java |