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/11/07 10:24:13 UTC
[sling-org-apache-sling-tracer] 13/30: SLING-5459 - Recording of
tracer logs
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.tracer-1.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-tracer.git
commit bdc2fb698d5e125cc0d403f9376ad1dedf452fc0
Author: Chetan Mehrotra <ch...@apache.org>
AuthorDate: Wed Feb 10 05:52:55 2016 +0000
SLING-5459 - Recording of tracer logs
Changed the storage to byte[] instead of string. This would further reduce the memory footprint of the recording
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/tracer@1729532 13f79535-47bb-0310-9956-ffa450edef68
---
pom.xml | 6 ++++
.../sling/tracer/internal/JSONRecording.java | 37 ++++++++++++++++++----
.../sling/tracer/internal/TracerLogServlet.java | 5 +--
.../tracer/internal/TracerLogServletTest.java | 22 +++++++++++--
4 files changed, 58 insertions(+), 12 deletions(-)
diff --git a/pom.xml b/pom.xml
index 2918dd9..1a0bf46 100644
--- a/pom.xml
+++ b/pom.xml
@@ -121,6 +121,12 @@
<version>4.2.0</version>
</dependency>
<dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.4</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.commons.json</artifactId>
<version>2.0.8</version>
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 cf1cea3..a7b29d9 100644
--- a/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java
+++ b/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java
@@ -19,9 +19,16 @@
package org.apache.sling.tracer.internal;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
import java.io.PrintWriter;
+import java.io.Reader;
import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Iterator;
@@ -30,6 +37,7 @@ import java.util.List;
import javax.servlet.http.HttpServletRequest;
import ch.qos.logback.classic.Level;
+import org.apache.commons.io.IOUtils;
import org.apache.sling.api.request.RequestProgressTracker;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.io.JSONWriter;
@@ -45,16 +53,25 @@ class JSONRecording implements Recording {
private final List<String> queries = new ArrayList<String>();
private final List<LogEntry> logs = new ArrayList<LogEntry>();
private RequestProgressTracker tracker;
- private String json;
+ private byte[] json;
public JSONRecording(String requestId, HttpServletRequest r) {
this.requestId = requestId;
this.method = r.getMethod();
}
- public boolean render(Writer pw) throws IOException {
+ public boolean render(Writer w) throws IOException {
if (json != null) {
- pw.write(json);
+ Reader r = new InputStreamReader(new ByteArrayInputStream(json), "UTF-8");
+ IOUtils.copy(r, w);
+ return true;
+ }
+ return false;
+ }
+
+ public boolean render(OutputStream os) throws IOException {
+ if (json != null) {
+ os.write(json);
return true;
}
return false;
@@ -91,12 +108,17 @@ class JSONRecording implements Recording {
}
} catch (JSONException e) {
log.warn("Error occurred while converting the log data for request {} to JSON", requestId, e);
+ } catch (UnsupportedEncodingException e) {
+ log.warn("Error occurred while converting the log data for request {} to JSON", requestId, e);
+ } catch (IOException e) {
+ log.warn("Error occurred while converting the log data for request {} to JSON", requestId, e);
}
}
- private String toJSON() throws JSONException {
- StringWriter sw = new StringWriter();
- JSONWriter jw = new JSONWriter(sw);
+ private byte[] toJSON() throws JSONException, IOException {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ OutputStreamWriter osw = new OutputStreamWriter(baos, "UTF-8");
+ JSONWriter jw = new JSONWriter(osw);
jw.setTidy(true);
jw.object();
jw.key("method").value(method);
@@ -121,7 +143,8 @@ class JSONRecording implements Recording {
addJson(jw, "logs", logs);
jw.endObject();
- return sw.toString();
+ osw.flush();
+ return baos.toByteArray();
}
private void addJson(JSONWriter jw, String name, List<? extends JsonEntry> entries) throws JSONException {
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 2684f40..ae9d1b8 100644
--- a/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java
+++ b/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java
@@ -67,8 +67,8 @@ class TracerLogServlet extends SimpleWebConsolePlugin implements TraceLogRecorde
@Override
protected void renderContent(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- final PrintWriter pw = response.getWriter();
if (isHtmlRequest(request)){
+ PrintWriter pw = response.getWriter();
renderStatus(pw);
renderRequests(pw);
} else {
@@ -79,11 +79,12 @@ class TracerLogServlet extends SimpleWebConsolePlugin implements TraceLogRecorde
if (requestId != null) {
JSONRecording recording = cache.getIfPresent(requestId);
if (recording != null){
- responseDone = recording.render(pw);
+ responseDone = recording.render(response.getOutputStream());
}
}
if (!responseDone) {
+ PrintWriter pw = response.getWriter();
JSONWriter jw = new JSONWriter(pw);
jw.object();
jw.key("error").value("Not found");
diff --git a/src/test/java/org/apache/sling/tracer/internal/TracerLogServletTest.java b/src/test/java/org/apache/sling/tracer/internal/TracerLogServletTest.java
index 5514dd1..7866544 100644
--- a/src/test/java/org/apache/sling/tracer/internal/TracerLogServletTest.java
+++ b/src/test/java/org/apache/sling/tracer/internal/TracerLogServletTest.java
@@ -19,9 +19,12 @@
package org.apache.sling.tracer.internal;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
+import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -102,12 +105,12 @@ public class TracerLogServletTest {
verify(response).setHeader(TracerLogServlet.HEADER_TRACER_PROTOCOL_VERSION,
String.valueOf(TracerLogServlet.TRACER_PROTOCOL_VERSION));
- StringWriter sw = new StringWriter();
- when(response.getWriter()).thenReturn(new PrintWriter(sw));
+ ByteArrayServletOutputStream sos = new ByteArrayServletOutputStream();
+ when(response.getOutputStream()).thenReturn(sos);
when(request.getRequestURI()).thenReturn("/system/console/" + requestIdCaptor.getValue() + ".json" );
logServlet.renderContent(request, response);
- JSONObject json = new JSONObject(sw.toString());
+ JSONObject json = new JSONObject(sos.baos.toString("UTF-8"));
assertEquals("GET", json.getString("method"));
assertEquals(2, json.getJSONArray("requestProgressLogs").length());
}
@@ -123,4 +126,17 @@ public class TracerLogServletTest {
assertThat(sw.toString(), containsString("Log Tracer"));
}
+
+ private static class ByteArrayServletOutputStream extends ServletOutputStream {
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ @Override
+ public void write(int b) throws IOException {
+ baos.write(b);
+ }
+
+ @Override
+ public void write(byte[] b, int off, int len) throws IOException {
+ baos.write(b, off, len);
+ }
+ }
}
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.