You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ch...@apache.org on 2016/02/10 09:56:29 UTC

svn commit: r1729553 - in /sling/trunk/contrib/extensions/tracer/src: main/java/org/apache/sling/tracer/internal/ test/java/org/apache/sling/tracer/internal/

Author: chetanm
Date: Wed Feb 10 08:56:29 2016
New Revision: 1729553

URL: http://svn.apache.org/viewvc?rev=1729553&view=rev
Log:
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

Modified:
    sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java
    sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java
    sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java

Modified: sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java?rev=1729553&r1=1729552&r2=1729553&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java (original)
+++ sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java Wed Feb 10 08:56:29 2016
@@ -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());

Modified: sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java?rev=1729553&r1=1729552&r2=1729553&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java (original)
+++ sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java Wed Feb 10 08:56:29 2016
@@ -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 SimpleWeb
 
     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>");
         }
     }
 

Modified: sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java?rev=1729553&r1=1729552&r2=1729553&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java (original)
+++ sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java Wed Feb 10 08:56:29 2016
@@ -32,6 +32,7 @@ import org.slf4j.helpers.MessageFormatte
 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"));