You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/10/18 23:26:08 UTC

[sling-org-apache-sling-tracer] 24/49: SLING-5459 - Recording of tracer logs

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 <ch...@apache.org>
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
"commits@sling.apache.org" <co...@sling.apache.org>.