SLING-5459 - Recording of tracer logs
Move JSON rendering logic to recording
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1729352 13f79535-47bb-0310-9956-ffa450edef68
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 7682e8e..391684f 100644
--- a/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java
+++ b/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java
@@ -19,6 +19,7 @@
package org.apache.sling.tracer.internal;
+import java.io.Writer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -38,14 +39,18 @@
this.method = r.getMethod();
}
- public void render(JSONWriter jw) throws JSONException {
+ public void render(Writer pw) throws JSONException {
+ JSONWriter jw = new JSONWriter(pw);
+ jw.setTidy(true);
+ jw.object();
jw.key("method").value(method);
if (tracker != null) {
jw.key("logs");
jw.array();
Iterator<String> it = tracker.getMessages();
- while (it.hasNext()) {
+ //Per docs iterator can be null
+ while (it != null && it.hasNext()) {
jw.value(it.next());
}
jw.endArray();
@@ -57,6 +62,7 @@
jw.value(q);
}
jw.endArray();
+ jw.endObject();
}
//~---------------------------------------< Recording >
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 479f6dc..7af8dfc 100644
--- a/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java
+++ b/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java
@@ -74,14 +74,22 @@
} else {
String requestId = getRequestId(request);
prepareJSONResponse(response);
- JSONWriter jw = new JSONWriter(pw);
try {
- jw.setTidy(true);
- jw.object();
+ boolean responseDone = false;
if (requestId != null) {
- renderRequestData(requestId, jw);
+ JSONRecording recording = cache.getIfPresent(requestId);
+ if (recording != null){
+ recording.render(pw);
+ responseDone = true;
+ }
}
- jw.endObject();
+
+ if (!responseDone) {
+ JSONWriter jw = new JSONWriter(pw);
+ jw.object();
+ jw.key("error").value("Not found");
+ jw.endObject();
+ }
} catch (JSONException e) {
throw new ServletException(e);
}
@@ -107,15 +115,6 @@
response.setCharacterEncoding("UTF-8");
}
- private void renderRequestData(String requestId, JSONWriter jw) throws JSONException {
- JSONRecording recording = cache.getIfPresent(requestId);
- if (recording == null){
- jw.key("error").value("Not found");
- return;
- }
- recording.render(jw);
- }
-
private void renderStatus(PrintWriter pw) {
pw.printf("<p class='statline'>Log Tracer Recordings: %d recordings</p>%n", cache.size());
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 5c5ae4e..560dc2d 100644
--- a/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java
+++ b/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java
@@ -24,7 +24,6 @@
import javax.servlet.http.HttpServletRequest;
import org.apache.sling.commons.json.JSONObject;
-import org.apache.sling.commons.json.io.JSONWriter;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
@@ -44,9 +43,7 @@
r.log(TracerContext.QUERY_LOGGER, "foo bar", new Object[]{"x" , "y"});
r.log(TracerContext.QUERY_LOGGER, "foo bar", new Object[]{"x" , "z"});
- JSONWriter jw = new JSONWriter(sw).object();
- r.render(jw);
- jw.endObject();
+ r.render(sw);
JSONObject json = new JSONObject(sw.toString());
assertEquals("GET", json.get("method"));
@@ -60,9 +57,7 @@
r.registerTracker(TestUtil.createTracker("x", "y"));
- JSONWriter jw = new JSONWriter(sw).object();
- r.render(jw);
- jw.endObject();
+ r.render(sw);
JSONObject json = new JSONObject(sw.toString());
assertEquals(2, json.getJSONArray("logs").length());