/[projects]/CircuitBreaker/src/dk/thoerup/circuitbreaker/AccountingCircuitBreaker.java
ViewVC logotype

Contents of /CircuitBreaker/src/dk/thoerup/circuitbreaker/AccountingCircuitBreaker.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 621 - (show annotations) (download)
Mon Mar 8 08:38:36 2010 UTC (14 years, 2 months ago) by torben
File size: 2257 byte(s)
Also take not of the time when the last failure occurred 
1 package dk.thoerup.circuitbreaker;
2
3 import java.util.concurrent.atomic.AtomicInteger;
4 import java.util.concurrent.atomic.AtomicLong;
5
6 public class AccountingCircuitBreaker extends CircuitBreaker {
7
8 private AtomicInteger tripCount = new AtomicInteger(0); // how many times ahs the CB tripped
9 private AtomicInteger blockCount = new AtomicInteger(0); //how many times has this CB blocked a call that would otherwise go to the backend
10 private AtomicInteger totalFailureCount = new AtomicInteger(0); //how many times has the backend thrown an exception
11 private AtomicInteger totalCallCount = new AtomicInteger(0);
12 private AtomicLong lastTrip = new AtomicLong(0);
13 private AtomicLong lastFailure = new AtomicLong(0);
14 private long lastResetCounters = 0;
15
16 public AccountingCircuitBreaker(String name, int threshold, long timeoutMS) {
17 super(name, threshold, timeoutMS);
18
19 resetCounters();
20 }
21
22 @Override
23 public Object invoke(CircuitInvocation invocation) throws Exception {
24 Object result;
25 try {
26 totalCallCount.incrementAndGet();
27 result = super.invoke(invocation);
28 } catch (Exception e) {
29 if (e instanceof CircuitBreakerException) {
30 blockCount.incrementAndGet();
31 } else {
32 totalFailureCount.incrementAndGet();
33 lastFailure.set( System.currentTimeMillis() );
34 }
35 throw e;
36 }
37
38 return result;
39 }
40
41 @Override
42 public void tripBreaker() {
43 super.tripBreaker();
44 tripCount.incrementAndGet();
45 lastTrip.set( System.currentTimeMillis() );
46 }
47
48 public int getTripCount() {
49 return tripCount.get();
50 }
51
52 public int getBlockCount() {
53 return blockCount.get();
54 }
55
56 public int getTotalFailureCount() {
57 return totalFailureCount.get();
58 }
59
60 public long getLastResetCounters() {
61 return lastResetCounters;
62 }
63
64 public long getLastTrip() {
65 return lastTrip.get();
66 }
67
68 public long getLastFailure() {
69 return lastFailure.get();
70 }
71
72 public int getTotalCallCount() {
73 return totalCallCount.get();
74 }
75
76 public void resetCounters() {
77 tripCount.set(0);
78 blockCount.set(0);
79 totalFailureCount.set(0);
80 totalCallCount.set(0);
81 lastTrip.set(0);
82 lastFailure.set(0);
83
84 lastResetCounters = System.currentTimeMillis();
85 }
86
87 }

Properties

Name Value
svn:mergeinfo

  ViewVC Help
Powered by ViewVC 1.1.20