--- CircuitBreaker/src/dk/thoerup/curcuitbreaker/web/ViewCircuitBreaker.java 2009/10/07 20:21:16 416 +++ CircuitBreaker/src/dk/thoerup/circuitbreaker/web/ViewCircuitBreaker.java 2010/03/08 08:38:36 621 @@ -1,16 +1,53 @@ -package dk.thoerup.curcuitbreaker.web; +package dk.thoerup.circuitbreaker.web; + +import java.util.Date; 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.AccountingCircuitBreaker; +import dk.thoerup.circuitbreaker.CircuitBreaker; +import dk.thoerup.circuitbreaker.CircuitBreakerManager; public class ViewCircuitBreaker implements Command { + + private boolean readOnly; + + public ViewCircuitBreaker(boolean readOnly) { + this.readOnly = readOnly; + } + private String actionBuilder(String uri, String action, String breaker) { + StringBuilder sb = new StringBuilder(); + sb.append("
"); + sb.append("\n"); + sb.append("\n"); + sb.append("\n"); + sb.append("\n"); + sb.append("
"); + + return sb.toString(); + } + + public String getStateBar(CircuitBreaker breaker) { + StringBuilder sb = new StringBuilder(); + sb.append( breaker.getStateName() ); + sb.append(":    "); + + return sb.toString(); + } + public String execute(HttpServletRequest req, HttpServletResponse resp) { CircuitBreaker breaker = CircuitBreakerManager.getManager().getCircuitBreaker( req.getParameter("breaker")); + String uri = req.getRequestURI(); if (breaker == null) return "

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

"; @@ -25,21 +62,38 @@ sb.append("Attributes:\n"); sb.append(""); 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 (breaker instanceof AccountingCircuitBreaker) { AccountingCircuitBreaker acb = (AccountingCircuitBreaker) breaker; + 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("
Name ").append(breaker.getName()).append("
State ").append(breaker.getStateName()).append("
State ").append( getStateBar(breaker) ).append("
Type ").append(breaker.getClass().getSimpleName() ).append("
Notifier ").append(breaker.getNotifierName()).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 failure").append( new Date(acb.getLastFailure()).toString() ).append("
Last trip").append( new Date(acb.getLastTrip()).toString() ).append("
Last resetCounters").append( new Date(acb.getLastResetCounters()).toString() ).append("

\n"); - sb.append("Commands:\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 ) { + sb.append( actionBuilder(uri, "resetCounters", breaker.getName())).append("
\n"); + } + } else { + sb.append("the CircuitBreakers can only be viewed"); + } sb.append("");