package dk.thoerup.circuitbreaker.statistics; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import dk.thoerup.circuitbreaker.Event; public class AccountingStatistics implements Statistics { private AtomicInteger tripCount = new AtomicInteger(0); // how many times ahs the CB tripped private AtomicInteger retripCount = new AtomicInteger(0); private AtomicInteger blockCount = new AtomicInteger(0); //how many times has this CB blocked a call that would otherwise go to the backend private AtomicInteger totalFailureCount = new AtomicInteger(0); //how many times has the backend thrown an exception private AtomicInteger totalCallCount = new AtomicInteger(0); private AtomicLong lastTrip = new AtomicLong(0); private AtomicLong lastRetrip = new AtomicLong(0); private AtomicLong lastFailure = new AtomicLong(0); private AtomicLong lastReset = new AtomicLong(0); private long lastResetCounters = 0; @Override public void addStatistics(Event event) { switch(event) { case BreakerAttemptReset: break; case BreakerReset: lastReset.set( System.currentTimeMillis()); break; case BreakerRetripped: retripCount.incrementAndGet(); lastRetrip.set( System.currentTimeMillis() ); break; case BreakerTripped: tripCount.incrementAndGet(); lastTrip.set( System.currentTimeMillis() ); break; case InvocationBlocked: blockCount.incrementAndGet(); break; case InvocationFailure: totalFailureCount.incrementAndGet(); lastFailure.set( System.currentTimeMillis() ); break; case Invocation: totalCallCount.incrementAndGet(); break; } } public void resetCounters() { tripCount.set(0); retripCount.set(0); blockCount.set(0); totalFailureCount.set(0); totalCallCount.set(0); lastTrip.set(0); lastRetrip.set(0); lastReset.set(0); lastFailure.set(0); lastResetCounters = System.currentTimeMillis(); } public int getTripCount() { return tripCount.get(); } public int getRetripCount() { return retripCount.get(); } public int getBlockCount() { return blockCount.get(); } public int getTotalFailureCount() { return totalFailureCount.get(); } public long getLastResetCounters() { return lastResetCounters; } public long getLastTrip() { return lastTrip.get(); } public long getLastRetrip() { return lastRetrip.get(); } public long getLastFailure() { return lastFailure.get(); } public long getLastReset() { return lastReset.get(); } public int getTotalCallCount() { return totalCallCount.get(); } }