From 8ef21b31ad93087767ce871f9d91120d4a13e32a Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Thu, 9 Apr 2015 12:04:19 +0100 Subject: [PATCH] Add flag to TraceRepository to reverse order of listing Default to true (so existing apps change their behaviour, but that seems to be the majority vote). Fixes gh-2794 --- .../trace/InMemoryTraceRepository.java | 24 +++++++++++++++---- .../trace/InMemoryTraceRepositoryTests.java | 2 +- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/trace/InMemoryTraceRepository.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/trace/InMemoryTraceRepository.java index d05fc0e6409..f2f797e06ca 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/trace/InMemoryTraceRepository.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/trace/InMemoryTraceRepository.java @@ -16,9 +16,9 @@ package org.springframework.boot.actuate.trace; -import java.util.ArrayList; import java.util.Collections; import java.util.Date; +import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -31,7 +31,18 @@ public class InMemoryTraceRepository implements TraceRepository { private int capacity = 100; - private final List traces = new ArrayList(); + private boolean reverse = true; + + private final List traces = new LinkedList(); + + /** + * Flag to say that the repository lists traces in reverse order. + * + * @param reverse flag value (default true) + */ + public void setReverse(boolean reverse) { + this.reverse = reverse; + } /** * @param capacity the capacity to set @@ -52,9 +63,14 @@ public class InMemoryTraceRepository implements TraceRepository { Trace trace = new Trace(new Date(), map); synchronized (this.traces) { while (this.traces.size() >= this.capacity) { - this.traces.remove(0); + this.traces.remove(this.capacity - 1); + } + if (this.reverse) { + this.traces.add(0, trace); + } + else { + this.traces.add(trace); } - this.traces.add(trace); } } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/trace/InMemoryTraceRepositoryTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/trace/InMemoryTraceRepositoryTests.java index 5de63340fbf..cb67cc09190 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/trace/InMemoryTraceRepositoryTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/trace/InMemoryTraceRepositoryTests.java @@ -40,7 +40,7 @@ public class InMemoryTraceRepositoryTests { this.repository.add(Collections. singletonMap("bar", "bar")); List traces = this.repository.findAll(); assertEquals(2, traces.size()); - assertEquals("bar", traces.get(1).getInfo().get("bar")); + assertEquals("bar", traces.get(0).getInfo().get("bar")); } }