package com.kendelong.util.jmx.statistics; import java.util.Map; import java.util.concurrent.atomic.AtomicLong; import org.springframework.beans.factory.annotation.Required; import org.springframework.jmx.export.annotation.ManagedAttribute; import org.springframework.jmx.export.annotation.ManagedOperation; public class StatisticsProviderMBeanBase implements IStatisticsProvider { private IStatisticsProvider provider; @Override @ManagedAttribute(description="The average number of requests or accesses per second since this object was created") public double getAverageRequestsPerSecond() { return provider.getAverageRequestsPerSecond(); } @Override @ManagedAttribute(description="The number of exceptions, or remote return codes indicating exceptions on the remote system") public long getNumberOfErrors() { return provider.getNumberOfErrors(); } @Override @ManagedAttribute(description="The number of failed operations - non-exceptions but where the operation failed to have the desired effect") public long getNumberOfFailures() { return provider.getNumberOfFailures(); } @Override @ManagedAttribute(description="The number of successful invocations") public long getNumberOfSuccesses() { return provider.getNumberOfSuccesses(); } @Override @ManagedAttribute public long getTotalNumberOfAccesses() { return provider.getTotalNumberOfAccesses(); } @Override @ManagedOperation(description="Reset statistics to zero") public void resetStatistics() { provider.resetStatistics(); } @ManagedAttribute(description="The table of errors data") public String getErrorHistogramAsHtml() { Map<String, AtomicLong> errorMap = getErrorHistogram(); String headingTitle = "validation error"; return convertMapToTable(errorMap, headingTitle); } protected String convertMapToTable(Map<String, AtomicLong> errorMap, String headingTitle) { StringBuilder sb = new StringBuilder(); sb.append("<table border=\"1\" style=\"font-size: 80%;\"><tr><th>" + headingTitle + "</th><th>count</th></tr>"); for (Map.Entry<String, AtomicLong> entry : errorMap.entrySet()) { sb.append("<tr><td>"); sb.append(entry.getKey()); sb.append("</td><td>"); sb.append(entry.getValue()); sb.append("</td></tr>"); } sb.append("</table>"); return sb.toString(); } public IStatisticsProvider getProvider() { return provider; } @Required public void setProvider(IStatisticsProvider provider) { this.provider = provider; } @Override public Map<String, AtomicLong> getErrorHistogram() { return provider.getErrorHistogram(); } }