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"));