This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-tracer.git
commit 2750e764bc6f079790b54894639a675605018a26 Author: Chetan Mehrotra <[email protected]> AuthorDate: Wed Feb 10 08:56:29 2016 +0000 SLING-5459 - Recording of tracer logs Recording now also includes -- Log entry timestamp -- Start time of request -- Time taken for the request processing The WebConsole view now shows Recording link in order of occurrence git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1729553 13f79535-47bb-0310-9956-ffa450edef68 --- .../sling/tracer/internal/JSONRecording.java | 25 ++++++++++++++++++++- .../sling/tracer/internal/TracerLogServlet.java | 26 +++++++++++++++------- .../sling/tracer/internal/JSONRecordingTest.java | 4 ++++ 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java b/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java index 57ce0d1..e823a96 100644 --- a/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java +++ b/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java @@ -37,9 +37,11 @@ import java.util.List; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; +import javax.annotation.Nonnull; import javax.servlet.http.HttpServletRequest; import ch.qos.logback.classic.Level; +import com.google.common.primitives.Longs; import org.apache.commons.io.IOUtils; import org.apache.sling.api.request.RequestProgressTracker; import org.apache.sling.commons.json.JSONException; @@ -49,7 +51,7 @@ import org.slf4j.LoggerFactory; import org.slf4j.helpers.FormattingTuple; import org.slf4j.helpers.MessageFormatter; -class JSONRecording implements Recording { +class JSONRecording implements Recording, Comparable<JSONRecording> { private static final Logger log = LoggerFactory.getLogger(JSONRecording.class); private final String method; private final String requestId; @@ -59,6 +61,8 @@ class JSONRecording implements Recording { private final List<LogEntry> logs = new ArrayList<LogEntry>(); private RequestProgressTracker tracker; private byte[] json; + private final long start = System.currentTimeMillis(); + private long timeTaken; public JSONRecording(String requestId, HttpServletRequest r, boolean compress) { this.requestId = requestId; @@ -99,6 +103,14 @@ class JSONRecording implements Recording { return requestId; } + public long getTimeTaken() { + return timeTaken; + } + + public long getStart() { + return start; + } + //~---------------------------------------< Recording > @Override @@ -148,6 +160,10 @@ class JSONRecording implements Recording { jw.object(); jw.key("method").value(method); + timeTaken = System.currentTimeMillis() - start; + jw.key("time").value(timeTaken); + jw.key("timestamp").value(start); + if (tracker != null) { jw.key("requestProgressLogs"); jw.array(); @@ -192,6 +208,11 @@ class JSONRecording implements Recording { return is; } + @Override + public int compareTo(@Nonnull JSONRecording o) { + return Longs.compare(start, o.start); + } + private interface JsonEntry { void toJson(JSONWriter jw) throws JSONException; } @@ -200,6 +221,7 @@ class JSONRecording implements Recording { final Level level; final String logger; final FormattingTuple tuple; + final long timestamp = System.currentTimeMillis(); private LogEntry(Level level, String logger, FormattingTuple tuple) { this.level = level != null ? level : Level.INFO; @@ -220,6 +242,7 @@ class JSONRecording implements Recording { @Override public void toJson(JSONWriter jw) throws JSONException { + jw.key("timestamp").value(timestamp); jw.key("level").value(level.levelStr); jw.key("logger").value(logger); jw.key("message").value(tuple.getMessage()); diff --git a/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java b/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java index 0a53631..1e31013 100644 --- a/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java +++ b/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java @@ -21,7 +21,11 @@ package org.apache.sling.tracer.internal; import java.io.IOException; import java.io.PrintWriter; -import java.util.Map; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -174,14 +178,20 @@ class TracerLogServlet extends SimpleWebConsolePlugin implements TraceLogRecorde private void renderRequests(PrintWriter pw) { if (cache.size() > 0){ - pw.println("<ul>"); - for (Map.Entry<String, JSONRecording> e : cache.asMap().entrySet()){ - String id = e.getKey(); - JSONRecording r = e.getValue(); - pw.printf("<li><a href='%s/%s.json'>%s</a> - %s (%s)</li>", LABEL, id, id, r.getUri(), - humanReadableByteCount(r.size())); + pw.println("<ol>"); + List<JSONRecording> recordings = new ArrayList<JSONRecording>(cache.asMap().values()); + SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); + Collections.sort(recordings); + for (JSONRecording r : recordings){ + String id = r.getRequestId(); + String date = sdf.format(new Date(r.getStart())); + pw.printf("<li>%s - <a href='%s/%s.json'>%s</a> - %s (%s) (%dms)</li>", + date, LABEL, id, id, + r.getUri(), + humanReadableByteCount(r.size()), + r.getTimeTaken()); } - pw.println("</ul>"); + pw.println("</ol>"); } } diff --git a/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java b/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java index 473b7e7..65041f8 100644 --- a/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java +++ b/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java @@ -32,6 +32,7 @@ import org.slf4j.helpers.MessageFormatter; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -53,6 +54,8 @@ public class JSONRecordingTest { JSONObject json = new JSONObject(sw.toString()); assertEquals("GET", json.get("method")); + assertTrue(json.has("time")); + assertTrue(json.has("timestamp")); assertEquals(2, json.getJSONArray("queries").length()); } @@ -93,6 +96,7 @@ public class JSONRecordingTest { assertEquals(tp1.getMessage(), l1.getString("message")); assertEquals(1, l1.getJSONArray("params").length()); assertFalse(l1.has("exception")); + assertTrue(l1.has("timestamp")); JSONObject l3 = json.getJSONArray("logs").getJSONObject(2); assertNotNull(l3.get("exception")); -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
