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:15 UTC
[sling-org-apache-sling-tracer] 15/30: SLING-5504 - Reduce memory
footprint of stored recording data
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 0f98bb63d7c02081907b939f2216a45f05562afe
Author: Chetan Mehrotra <ch...@apache.org>
AuthorDate: Wed Feb 10 05:53:31 2016 +0000
SLING-5504 - Reduce memory footprint of stored recording data
Enable compression for in memory json data
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/tracer@1729534 13f79535-47bb-0310-9956-ffa450edef68
---
.../sling/tracer/internal/JSONRecording.java | 26 ++++++++++++++++++----
.../sling/tracer/internal/TracerLogServlet.java | 4 +++-
.../sling/tracer/internal/JSONRecordingTest.java | 6 ++---
.../sling/tracer/internal/LogTracerTest.java | 10 +++++++++
4 files changed, 38 insertions(+), 8 deletions(-)
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 592477b..507d130 100644
--- a/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java
+++ b/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java
@@ -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;
}
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 827d890..fa31a30 100644
--- a/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java
+++ b/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java
@@ -53,6 +53,8 @@ class TracerLogServlet extends SimpleWebConsolePlugin implements TraceLogRecorde
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 SimpleWebConsolePlugin implements TraceLogRecorde
}
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;
}
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 82116fc..473b7e7 100644
--- a/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java
+++ b/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java
@@ -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);
diff --git a/src/test/java/org/apache/sling/tracer/internal/LogTracerTest.java b/src/test/java/org/apache/sling/tracer/internal/LogTracerTest.java
index c6b9e42..416b8e2 100644
--- a/src/test/java/org/apache/sling/tracer/internal/LogTracerTest.java
+++ b/src/test/java/org/apache/sling/tracer/internal/LogTracerTest.java
@@ -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");
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.