commit f148e0178c73a51df9f25fa339647e2ced083b57 Author: Karsten Loesing karsten.loesing@gmx.net Date: Sun Apr 20 15:28:50 2014 +0200
Use Gson to format JSON bandwidth documents. --- src/org/torproject/onionoo/BandwidthDocument.java | 16 +++++ .../onionoo/BandwidthDocumentWriter.java | 69 +++++++++----------- src/org/torproject/onionoo/ResponseBuilder.java | 5 +- 3 files changed, 49 insertions(+), 41 deletions(-)
diff --git a/src/org/torproject/onionoo/BandwidthDocument.java b/src/org/torproject/onionoo/BandwidthDocument.java index 3f1a07f..e39befb 100644 --- a/src/org/torproject/onionoo/BandwidthDocument.java +++ b/src/org/torproject/onionoo/BandwidthDocument.java @@ -2,7 +2,23 @@ * See LICENSE for licensing information */ package org.torproject.onionoo;
+import java.util.Map; + class BandwidthDocument extends Document {
+ private String fingerprint; + public void setFingerprint(String fingerprint) { + this.fingerprint = fingerprint; + } + + private Map<String, GraphHistory> write_history; + public void setWriteHistory(Map<String, GraphHistory> writeHistory) { + this.write_history = writeHistory; + } + + private Map<String, GraphHistory> read_history; + public void setReadHistory(Map<String, GraphHistory> readHistory) { + this.read_history = readHistory; + } }
diff --git a/src/org/torproject/onionoo/BandwidthDocumentWriter.java b/src/org/torproject/onionoo/BandwidthDocumentWriter.java index 0bc8387..164ab30 100644 --- a/src/org/torproject/onionoo/BandwidthDocumentWriter.java +++ b/src/org/torproject/onionoo/BandwidthDocumentWriter.java @@ -4,8 +4,9 @@ package org.torproject.onionoo;
import java.util.ArrayList; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; -import java.util.Locale; +import java.util.Map; import java.util.Set; import java.util.SortedMap; import java.util.SortedSet; @@ -47,25 +48,23 @@ public class BandwidthDocumentWriter implements FingerprintListener, if (bandwidthStatus == null) { continue; } - this.writeBandwidthDataFileToDisk(fingerprint, - bandwidthStatus.getWriteHistory(), - bandwidthStatus.getReadHistory()); + BandwidthDocument bandwidthDocument = this.compileBandwidthDocument( + fingerprint, bandwidthStatus); + this.documentStore.store(bandwidthDocument, fingerprint); } Logger.printStatusTime("Wrote bandwidth document files"); }
- private void writeBandwidthDataFileToDisk(String fingerprint, - SortedMap<Long, long[]> writeHistory, - SortedMap<Long, long[]> readHistory) { - String writeHistoryString = formatHistoryString(writeHistory); - String readHistoryString = formatHistoryString(readHistory); - StringBuilder sb = new StringBuilder(); - sb.append("{"fingerprint":"" + fingerprint + "",\n" - + ""write_history":{\n" + writeHistoryString + "},\n" - + ""read_history":{\n" + readHistoryString + "}}\n"); + + private BandwidthDocument compileBandwidthDocument(String fingerprint, + BandwidthStatus bandwidthStatus) { BandwidthDocument bandwidthDocument = new BandwidthDocument(); - bandwidthDocument.setDocumentString(sb.toString()); - this.documentStore.store(bandwidthDocument, fingerprint); + bandwidthDocument.setFingerprint(fingerprint); + bandwidthDocument.setWriteHistory(this.compileGraphType( + bandwidthStatus.getWriteHistory())); + bandwidthDocument.setReadHistory(this.compileGraphType( + bandwidthStatus.getReadHistory())); + return bandwidthDocument; }
private String[] graphNames = new String[] { @@ -92,8 +91,10 @@ public class BandwidthDocumentWriter implements FingerprintListener, DateTimeHelper.TWO_DAYS, DateTimeHelper.TEN_DAYS };
- private String formatHistoryString(SortedMap<Long, long[]> history) { - StringBuilder sb = new StringBuilder(); + private Map<String, GraphHistory> compileGraphType( + SortedMap<Long, long[]> history) { + Map<String, GraphHistory> graphs = + new LinkedHashMap<String, GraphHistory>(); for (int i = 0; i < this.graphIntervals.length; i++) { String graphName = this.graphNames[i]; long graphInterval = this.graphIntervals[i]; @@ -153,18 +154,16 @@ public class BandwidthDocumentWriter implements FingerprintListener, + (lastNonNullIndex - firstNonNullIndex) * dataPointInterval; double factor = ((double) maxValue) / 999.0; int count = lastNonNullIndex - firstNonNullIndex + 1; - StringBuilder sb2 = new StringBuilder(); - sb2.append(""" + graphName + "":{" - + ""first":"" - + DateTimeHelper.format(firstDataPointMillis) + ""," - + ""last":"" - + DateTimeHelper.format(lastDataPointMillis) + ""," - + ""interval":" + String.valueOf(dataPointInterval - / DateTimeHelper.ONE_SECOND) - + ","factor":" + String.format(Locale.US, "%.3f", factor) - + ","count":" + String.valueOf(count) + ","values":["); - int written = 0, previousNonNullIndex = -2; + GraphHistory graphHistory = new GraphHistory(); + graphHistory.setFirst(DateTimeHelper.format(firstDataPointMillis)); + graphHistory.setLast(DateTimeHelper.format(lastDataPointMillis)); + graphHistory.setInterval((int) (dataPointInterval + / DateTimeHelper.ONE_SECOND)); + graphHistory.setFactor(factor); + graphHistory.setCount(count); + int previousNonNullIndex = -2; boolean foundTwoAdjacentDataPoints = false; + List<Integer> values = new ArrayList<Integer>(); for (int j = firstNonNullIndex; j <= lastNonNullIndex; j++) { long dataPoint = dataPoints.get(j); if (dataPoint >= 0L) { @@ -173,19 +172,15 @@ public class BandwidthDocumentWriter implements FingerprintListener, } previousNonNullIndex = j; } - sb2.append((written++ > 0 ? "," : "") + (dataPoint < 0L ? "null" : - String.valueOf((dataPoint * 999L) / maxValue))); + values.add(dataPoint < 0L ? null : + (int) ((dataPoint * 999L) / maxValue)); } - sb2.append("]},\n"); + graphHistory.setValues(values); if (foundTwoAdjacentDataPoints) { - sb.append(sb2.toString()); + graphs.put(graphName, graphHistory); } } - String result = sb.toString(); - if (result.length() >= 2) { - result = result.substring(0, result.length() - 2) + "\n"; - } - return result; + return graphs; }
public String getStatsString() { diff --git a/src/org/torproject/onionoo/ResponseBuilder.java b/src/org/torproject/onionoo/ResponseBuilder.java index 4e0054e..1d3cef0 100644 --- a/src/org/torproject/onionoo/ResponseBuilder.java +++ b/src/org/torproject/onionoo/ResponseBuilder.java @@ -193,10 +193,7 @@ public class ResponseBuilder { BandwidthDocument.class, false, fingerprint); if (bandwidthDocument != null && bandwidthDocument.getDocumentString() != null) { - String bandwidthLines = bandwidthDocument.getDocumentString(); - bandwidthLines = bandwidthLines.substring(0, - bandwidthLines.length() - 1); - return bandwidthLines; + return bandwidthDocument.getDocumentString(); } else { return "{"fingerprint":"" + fingerprint.toUpperCase() + ""}"; }
tor-commits@lists.torproject.org