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 06:53:31 UTC
svn commit: r1729534 - 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 05:53:31 2016
New Revision: 1729534
URL: http://svn.apache.org/viewvc?rev=1729534&view=rev
Log:
SLING-5504 - Reduce memory footprint of stored recording data
Enable compression for in memory json data
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
sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/LogTracerTest.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=1729534&r1=1729533&r2=1729534&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 05:53:31 2016
@@ -22,6 +22,7 @@ package org.apache.sling.tracer.internal
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
@@ -33,6 +34,8 @@ import java.io.Writer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.GZIPOutputStream;
import javax.servlet.http.HttpServletRequest;
@@ -51,20 +54,22 @@ class JSONRecording implements Recording
private final String method;
private final String requestId;
private final String uri;
+ private final boolean compress;
private final List<String> queries = new ArrayList<String>();
private final List<LogEntry> logs = new ArrayList<LogEntry>();
private RequestProgressTracker tracker;
private byte[] json;
- public JSONRecording(String requestId, HttpServletRequest r) {
+ public JSONRecording(String requestId, HttpServletRequest r, boolean compress) {
this.requestId = requestId;
+ this.compress = compress;
this.method = r.getMethod();
this.uri = r.getRequestURI();
}
public boolean render(Writer w) throws IOException {
if (json != null) {
- Reader r = new InputStreamReader(new ByteArrayInputStream(json), "UTF-8");
+ Reader r = new InputStreamReader(getInputStream(), "UTF-8");
IOUtils.copy(r, w);
return true;
}
@@ -73,7 +78,7 @@ class JSONRecording implements Recording
public boolean render(OutputStream os) throws IOException {
if (json != null) {
- os.write(json);
+ IOUtils.copyLarge(getInputStream(), os);
return true;
}
return false;
@@ -130,7 +135,11 @@ class JSONRecording implements Recording
private byte[] toJSON() throws JSONException, IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- OutputStreamWriter osw = new OutputStreamWriter(baos, "UTF-8");
+ OutputStream os = baos;
+ if (compress) {
+ os = new GZIPOutputStream(os);
+ }
+ OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");
JSONWriter jw = new JSONWriter(osw);
jw.setTidy(true);
jw.object();
@@ -157,6 +166,7 @@ class JSONRecording implements Recording
addJson(jw, "logs", logs);
jw.endObject();
osw.flush();
+ os.close();
return baos.toByteArray();
}
@@ -171,6 +181,14 @@ class JSONRecording implements Recording
jw.endArray();
}
+ private InputStream getInputStream() throws IOException {
+ InputStream is = new ByteArrayInputStream(json);
+ if (compress) {
+ is = new GZIPInputStream(is);
+ }
+ return is;
+ }
+
private interface JsonEntry {
void toJson(JSONWriter jw) throws JSONException;
}
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=1729534&r1=1729533&r2=1729534&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 05:53:31 2016
@@ -53,6 +53,8 @@ class TracerLogServlet extends SimpleWeb
private final Cache<String, JSONRecording> cache;
+ private boolean compressRecording = true;
+
public TracerLogServlet(BundleContext context) {
super(LABEL, "Sling Tracer", "Sling", null);
//TODO Make things configurable
@@ -196,7 +198,7 @@ class TracerLogServlet extends SimpleWeb
}
private JSONRecording record(String requestId, HttpServletRequest request) {
- JSONRecording data = new JSONRecording(requestId, request);
+ JSONRecording data = new JSONRecording(requestId, request, compressRecording);
cache.put(requestId, data);
return data;
}
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=1729534&r1=1729533&r2=1729534&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 05:53:31 2016
@@ -43,7 +43,7 @@ public class JSONRecordingTest {
StringWriter sw = new StringWriter();
when(request.getMethod()).thenReturn("GET");
- JSONRecording r = new JSONRecording("abc", request);
+ JSONRecording r = new JSONRecording("abc", request, true);
r.log(Level.INFO, TracerContext.QUERY_LOGGER, MessageFormatter.arrayFormat("foo bar", new Object[]{"x" , "y"}));
r.log(Level.INFO, TracerContext.QUERY_LOGGER, MessageFormatter.arrayFormat("foo bar", new Object[]{"x" , "z"}));
@@ -59,7 +59,7 @@ public class JSONRecordingTest {
@Test
public void requestTrackerLogs() throws Exception{
StringWriter sw = new StringWriter();
- JSONRecording r = new JSONRecording("abc", request);
+ JSONRecording r = new JSONRecording("abc", request, true);
r.registerTracker(TestUtil.createTracker("x", "y"));
@@ -73,7 +73,7 @@ public class JSONRecordingTest {
@Test
public void logs() throws Exception{
StringWriter sw = new StringWriter();
- JSONRecording r = new JSONRecording("abc", request);
+ JSONRecording r = new JSONRecording("abc", request, true);
FormattingTuple tp1 = MessageFormatter.arrayFormat("{} is going", new Object[]{"Jack"});
r.log(Level.INFO, "foo", tp1);
Modified: sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/LogTracerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/LogTracerTest.java?rev=1729534&r1=1729533&r2=1729534&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/LogTracerTest.java (original)
+++ sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/LogTracerTest.java Wed Feb 10 05:53:31 2016
@@ -235,6 +235,11 @@ public class LogTracerTest {
public RequestProgressTracker getRequestProgressTracker() {
return createTracker("x", "y");
}
+
+ @Override
+ public String getRequestURI() {
+ return "foo";
+ }
};
request.setHeader(TracerLogServlet.HEADER_TRACER_RECORDING, "true");
@@ -272,6 +277,11 @@ public class LogTracerTest {
public RequestProgressTracker getRequestProgressTracker() {
return createTracker("x", "y");
}
+
+ @Override
+ public String getRequestURI() {
+ return "foo";
+ }
};
request.setHeader(TracerLogServlet.HEADER_TRACER_RECORDING, "true");
request.setHeader(LogTracer.HEADER_TRACER_CONFIG, "a.b.c;level=trace,a.b;level=debug");