--- CircuitBreaker/src/dk/thoerup/curcuitbreaker/web/ViewCircuitBreaker.java 2009/10/21 08:05:44 461 +++ miscJava/CircuitBreaker/src/main/java/dk/thoerup/circuitbreaker/web/ViewCircuitBreaker.java 2015/06/09 08:55:10 2569 @@ -1,13 +1,17 @@ -package dk.thoerup.curcuitbreaker.web; +package dk.thoerup.circuitbreaker.web; import java.util.Date; +import java.util.Formatter; +import java.util.LinkedList; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import dk.thoerup.curcuitbreaker.AccountingCircuitBreaker; -import dk.thoerup.curcuitbreaker.CircuitBreaker; -import dk.thoerup.curcuitbreaker.CircuitBreakerManager; +import dk.thoerup.circuitbreaker.CircuitBreaker; +import dk.thoerup.circuitbreaker.CircuitBreakerManager; +import dk.thoerup.circuitbreaker.statistics.AccountingStatistics; +import dk.thoerup.circuitbreaker.statistics.LoggingStatistics; +import dk.thoerup.circuitbreaker.statistics.Statistics; public class ViewCircuitBreaker implements Command { @@ -45,6 +49,14 @@ return sb.toString(); } + public static String formatDate(long date) { + if (date == 0L) { + return "-"; + } else { + return new Date(date).toString(); + } + } + public String execute(HttpServletRequest req, HttpServletResponse resp) { CircuitBreaker breaker = CircuitBreakerManager.getManager().getCircuitBreaker( req.getParameter("breaker")); String uri = req.getRequestURI(); @@ -52,12 +64,14 @@ if (breaker == null) return "

No breaker named '" + req.getParameter("breaker") + "'

"; + Statistics stats = breaker.getStatistics(); + StringBuilder sb = new StringBuilder(); sb.append("View Circuitbreaker"); sb.append("<<== Back to overview

"); sb.append("

CircuitBreaker

\n"); - + sb.append("Attributes:\n"); sb.append(""); @@ -65,31 +79,73 @@ sb.append("\n"); sb.append("\n"); sb.append("\n"); + sb.append("\n"); sb.append("\n"); sb.append("\n"); sb.append("\n"); sb.append("\n"); - if (breaker instanceof AccountingCircuitBreaker) { - AccountingCircuitBreaker acb = (AccountingCircuitBreaker) breaker; + + + if (stats instanceof AccountingStatistics) { + AccountingStatistics ac = (AccountingStatistics) stats; + + StringBuilder sbf = new StringBuilder(); + if (ac.getTotalCallCount() > 0) { + double failure_percentage = ((double) ac.getTotalFailureCount()*100) / ((double) ac.getTotalCallCount() ); + Formatter formatter = new Formatter(sbf); + formatter.format("%.2f", failure_percentage); + formatter.close(); + } else { + sbf.append("0.0"); + } + + sb.append("\n"); - sb.append("\n"); - sb.append("\n"); - sb.append("\n"); - sb.append("\n"); - sb.append("\n"); - sb.append("\n"); + sb.append("\n"); + sb.append("\n"); + sb.append("\n"); + sb.append("\n"); + sb.append("\n"); + sb.append("\n"); + sb.append("\n"); + sb.append("\n"); + sb.append("\n"); + sb.append("\n"); + + sb.append("\n"); + } + + if (stats instanceof LoggingStatistics) { + LoggingStatistics ls = (LoggingStatistics) stats; + + LinkedList list = ls.getLog(); + String headerLink = String.format("Logging", req.getRequestURI(), breaker.getName() ); + + sb.append("\n"); + + int max = list.size() > 10 ? 10 : list.size(); + for (int i=0; i"); + } } - sb.append("
State ").append( getStateBar(breaker) ).append("
Type ").append(breaker.getClass().getSimpleName() ).append("
Notifier ").append(breaker.getNotifierName()).append("
Statistics ").append( stats.getClass().getSimpleName() ).append("
Failure count ").append(breaker.getFailureCount()).append("
Failure threshold ").append(breaker.getThreshold()).append("
Timeout, elapsed").append( breaker.getElapsed() ).append("
Timeout, limit").append( breaker.getTimeout() ).append("
Accounting
Trip count").append( acb.getTripCount() ).append("
Block count").append( acb.getBlockCount() ).append("
Total failure count").append( acb.getTotalFailureCount() ).append("
Total Call count").append( acb.getTotalCallCount() ).append("
Last trip").append( new Date(acb.getLastTrip()).toString() ).append("
Last reset").append( new Date(acb.getLastResetCounters()).toString() ).append("
Trip count").append( ac.getTripCount() ).append("
Re-trip count").append( ac.getRetripCount() ).append("
Block count").append( ac.getBlockCount() ).append("
Total failure count").append( ac.getTotalFailureCount() ).append("
Total Call count").append( ac.getTotalCallCount() ).append("
Failure Percentage").append( sbf.toString() ).append("%
Last failure").append( formatDate(ac.getLastFailure()) ).append("
Last trip").append( formatDate(ac.getLastTrip()) ).append("
Last re-trip").append( formatDate(ac.getLastRetrip()) ).append("
Last reset").append( formatDate(ac.getLastReset()) ).append("
Last resetCounters").append( formatDate(ac.getLastResetCounters()) ).append("
").append(headerLink).append("
"); + sb.append( entry.toString() ); + sb.append("

\n"); + sb.append("\n"); + sb.append("Current time: ").append( new Date().toString() ).append("

\n"); sb.append("Operations:\n"); if ( !readOnly ) { sb.append( actionBuilder(uri, "reset", breaker.getName())).append("
\n"); sb.append( actionBuilder(uri, "tripBreaker", breaker.getName())).append("
\n"); - if (breaker instanceof AccountingCircuitBreaker ) { + if (stats instanceof AccountingStatistics ) { sb.append( actionBuilder(uri, "resetCounters", breaker.getName())).append("
\n"); } + if (stats instanceof LoggingStatistics ) { + sb.append( actionBuilder(uri, "clearLog", breaker.getName())).append("
\n"); + } } else { sb.append("the CircuitBreakers can only be viewed"); }