--- CircuitBreaker/src/dk/thoerup/circuitbreaker/LoggingCircuitBreaker.java 2011/04/11 07:52:15 1285 +++ CircuitBreaker/src/dk/thoerup/circuitbreaker/LoggingCircuitBreaker.java 2011/04/16 21:00:08 1295 @@ -1,7 +1,9 @@ package dk.thoerup.circuitbreaker; -import java.util.*; -import dk.thoerup.circuitbreaker.notification.*; +import java.util.Date; +import java.util.LinkedList; + +import dk.thoerup.circuitbreaker.notification.Notifier; public class LoggingCircuitBreaker extends AccountingCircuitBreaker { @@ -11,12 +13,30 @@ public class LogEntry { public long time; - public Notifier.Event event; + public Notifier.Event event; + public int count = 0; public LogEntry(Notifier.Event evnt) { this.event = evnt; this.time = System.currentTimeMillis(); } + + public void newRetrip() {// + count++; + time = System.currentTimeMillis(); + } + + @Override + public String toString() { + + String str = new Date(time).toString() + (" : ") + event; + + if (event == Notifier.Event.BreakerRetripped) { + str += ( ", " + count + " re-trips" ); + } + + return str ; + } } @@ -31,13 +51,15 @@ super.tripBreaker(); addEntry(Notifier.Event.BreakerTripped); } - + + @Override public void retripBreaker() { super.retripBreaker(); addEntry(Notifier.Event.BreakerRetripped); } + @Override public void reset() { super.reset(); @@ -46,10 +68,28 @@ private void addEntry(Notifier.Event event) { synchronized(this) { - log.addFirst( new LogEntry(event) ); + + if (event != Notifier.Event.BreakerRetripped ) { + log.addFirst( new LogEntry(event) ); //trip and reset are added unconditionally + } else { + + if (log.size() == 0 || log.getFirst().event != Notifier.Event.BreakerRetripped) { + log.addFirst( new LogEntry(event) ); + } else { + log.getFirst().newRetrip(); + } + } + if(log.size() > maxSize) { log.removeLast(); } + + } + } + + public void clearLog() { + synchronized(this) { + log.clear(); } }