1 |
package dk.thoerup.curcuitbreaker.web; |
package dk.thoerup.circuitbreaker.web; |
2 |
|
|
3 |
import java.util.Date; |
import java.util.Date; |
4 |
|
import java.util.LinkedList; |
5 |
|
|
6 |
import javax.servlet.http.HttpServletRequest; |
import javax.servlet.http.HttpServletRequest; |
7 |
import javax.servlet.http.HttpServletResponse; |
import javax.servlet.http.HttpServletResponse; |
8 |
|
|
9 |
import dk.thoerup.curcuitbreaker.AccountingCircuitBreaker; |
import dk.thoerup.circuitbreaker.AccountingCircuitBreaker; |
10 |
import dk.thoerup.curcuitbreaker.CircuitBreaker; |
import dk.thoerup.circuitbreaker.LoggingCircuitBreaker; |
11 |
import dk.thoerup.curcuitbreaker.CircuitBreakerManager; |
import dk.thoerup.circuitbreaker.CircuitBreaker; |
12 |
|
import dk.thoerup.circuitbreaker.CircuitBreakerManager; |
13 |
|
|
14 |
public class ViewCircuitBreaker implements Command { |
public class ViewCircuitBreaker implements Command { |
15 |
|
|
31 |
return sb.toString(); |
return sb.toString(); |
32 |
} |
} |
33 |
|
|
34 |
public String getStateBar(String state) { |
public String getStateBar(CircuitBreaker breaker) { |
35 |
StringBuilder sb = new StringBuilder(); |
StringBuilder sb = new StringBuilder(); |
36 |
sb.append( state ); |
sb.append( breaker.getStateName() ); |
37 |
sb.append(": <span style=\"background-color: "); |
sb.append(": <span style=\"background-color: "); |
38 |
if (state.equalsIgnoreCase("open")) { |
if ( breaker.isOpen() ) { |
39 |
sb.append("red"); |
sb.append("red"); |
40 |
} else if (state.equalsIgnoreCase("closed")) { |
} else if ( breaker.isClosed() ) { |
41 |
sb.append("green"); |
sb.append("green"); |
42 |
} else { |
} else { |
43 |
sb.append("yellow"); |
sb.append("yellow"); |
47 |
return sb.toString(); |
return sb.toString(); |
48 |
} |
} |
49 |
|
|
50 |
|
public String formatDate(long date) { |
51 |
|
if (date == 0L) { |
52 |
|
return "-"; |
53 |
|
} else { |
54 |
|
return new Date(date).toString(); |
55 |
|
} |
56 |
|
} |
57 |
|
|
58 |
public String execute(HttpServletRequest req, HttpServletResponse resp) { |
public String execute(HttpServletRequest req, HttpServletResponse resp) { |
59 |
CircuitBreaker breaker = CircuitBreakerManager.getManager().getCircuitBreaker( req.getParameter("breaker")); |
CircuitBreaker breaker = CircuitBreakerManager.getManager().getCircuitBreaker( req.getParameter("breaker")); |
60 |
String uri = req.getRequestURI(); |
String uri = req.getRequestURI(); |
72 |
sb.append("<b>Attributes:</b>\n"); |
sb.append("<b>Attributes:</b>\n"); |
73 |
sb.append("<table border=\"1\" cellspacing=0>"); |
sb.append("<table border=\"1\" cellspacing=0>"); |
74 |
sb.append("<tr><td>Name </td><td>").append(breaker.getName()).append("</td></tr>\n"); |
sb.append("<tr><td>Name </td><td>").append(breaker.getName()).append("</td></tr>\n"); |
75 |
sb.append("<tr><td>State </td><td><b>").append( getStateBar(breaker.getStateName()) ).append("</b></td></tr>\n"); |
sb.append("<tr><td>State </td><td><b>").append( getStateBar(breaker) ).append("</b></td></tr>\n"); |
76 |
sb.append("<tr><td>Type </td><td>").append(breaker.getClass().getSimpleName() ).append("</td></tr>\n"); |
sb.append("<tr><td>Type </td><td>").append(breaker.getClass().getSimpleName() ).append("</td></tr>\n"); |
77 |
sb.append("<tr><td>Notifier </td><td>").append(breaker.getNotifierName()).append("</td></tr>\n"); |
sb.append("<tr><td>Notifier </td><td>").append(breaker.getNotifierName()).append("</td></tr>\n"); |
78 |
sb.append("<tr><td>Failure count </td><td>").append(breaker.getFailureCount()).append("</td></tr>\n"); |
sb.append("<tr><td>Failure count </td><td>").append(breaker.getFailureCount()).append("</td></tr>\n"); |
84 |
AccountingCircuitBreaker acb = (AccountingCircuitBreaker) breaker; |
AccountingCircuitBreaker acb = (AccountingCircuitBreaker) breaker; |
85 |
sb.append("<tr><th colspan=\"2\">Accounting</th></tr>\n"); |
sb.append("<tr><th colspan=\"2\">Accounting</th></tr>\n"); |
86 |
sb.append("<tr><td>Trip count</td><td>").append( acb.getTripCount() ).append("</td></tr>\n"); |
sb.append("<tr><td>Trip count</td><td>").append( acb.getTripCount() ).append("</td></tr>\n"); |
87 |
|
sb.append("<tr><td>Re-trip count</td><td>").append( acb.getRetripCount() ).append("</td></tr>\n"); |
88 |
sb.append("<tr><td>Block count</td><td>").append( acb.getBlockCount() ).append("</td></tr>\n"); |
sb.append("<tr><td>Block count</td><td>").append( acb.getBlockCount() ).append("</td></tr>\n"); |
89 |
sb.append("<tr><td>Total failure count</td><td>").append( acb.getTotalFailureCount() ).append("</td></tr>\n"); |
sb.append("<tr><td>Total failure count</td><td>").append( acb.getTotalFailureCount() ).append("</td></tr>\n"); |
90 |
sb.append("<tr><td>Total Call count</td><td>").append( acb.getTotalCallCount() ).append("</td></tr>\n"); |
sb.append("<tr><td>Total Call count</td><td>").append( acb.getTotalCallCount() ).append("</td></tr>\n"); |
91 |
sb.append("<tr><td>Last reset</td><td>").append( new Date(acb.getLastResetCounters()).toString() ).append("</td></tr>\n"); |
sb.append("<tr><td>Last failure</td><td>").append( formatDate(acb.getLastFailure()) ).append("</td></tr>\n"); |
92 |
|
sb.append("<tr><td>Last trip</td><td>").append( formatDate(acb.getLastTrip()) ).append("</td></tr>\n"); |
93 |
|
sb.append("<tr><td>Last re-trip</td><td>").append( formatDate(acb.getLastRetrip()) ).append("</td></tr>\n"); |
94 |
|
sb.append("<tr><td>Last reset</td><td>").append( formatDate(acb.getLastReset()) ).append("</td></tr>\n"); |
95 |
|
|
96 |
|
sb.append("<tr><td>Last resetCounters</td><td>").append( formatDate(acb.getLastResetCounters()) ).append("</td></tr>\n"); |
97 |
|
} |
98 |
|
|
99 |
|
if (breaker instanceof LoggingCircuitBreaker) { |
100 |
|
LoggingCircuitBreaker lcb = (LoggingCircuitBreaker) breaker; |
101 |
|
|
102 |
|
LinkedList<LoggingCircuitBreaker.LogEntry> list = lcb.getLog(); |
103 |
|
|
104 |
|
sb.append("<tr><th colspan=\"2\">Logging</th></tr>\n"); |
105 |
|
for(LoggingCircuitBreaker.LogEntry entry : list) { |
106 |
|
sb.append("<tr><td colspan=\"2\">"); |
107 |
|
sb.append( formatDate(entry.time) ).append(" : ").append(entry.event); |
108 |
|
sb.append("</td></tr>"); |
109 |
|
} |
110 |
} |
} |
111 |
|
|
112 |
sb.append("</table><br>\n"); |
sb.append("</table>\n"); |
113 |
|
sb.append("Current time: ").append( new Date().toString() ).append("<br><br>\n"); |
114 |
|
|
115 |
sb.append("<b>Operations:</b>\n"); |
sb.append("<b>Operations:</b>\n"); |
116 |
if ( !readOnly ) { |
if ( !readOnly ) { |