commit 5cefee7b9de2a746ccaff42c6a0adb27cac8578a Author: Karsten Loesing karsten.loesing@gmx.net Date: Mon Jan 15 15:20:02 2018 +0100
Use exact periods for graphs covering months/years. --- .../onionoo/writer/BandwidthDocumentWriter.java | 32 ++++++++++++++-------- .../onionoo/writer/ClientsDocumentWriter.java | 29 ++++++++++++-------- .../onionoo/writer/UptimeDocumentWriter.java | 29 ++++++++++++-------- .../onionoo/writer/WeightsDocumentWriter.java | 29 ++++++++++++-------- 4 files changed, 74 insertions(+), 45 deletions(-)
diff --git a/src/main/java/org/torproject/onionoo/writer/BandwidthDocumentWriter.java b/src/main/java/org/torproject/onionoo/writer/BandwidthDocumentWriter.java index f1c5041..2f27271 100644 --- a/src/main/java/org/torproject/onionoo/writer/BandwidthDocumentWriter.java +++ b/src/main/java/org/torproject/onionoo/writer/BandwidthDocumentWriter.java @@ -15,6 +15,9 @@ import org.torproject.onionoo.docs.UpdateStatus; import org.slf4j.Logger; import org.slf4j.LoggerFactory;
+import java.time.LocalDateTime; +import java.time.Period; +import java.time.ZoneOffset; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -79,13 +82,13 @@ public class BandwidthDocumentWriter implements DocumentWriter { "1_year", "5_years" };
- private long[] graphIntervals = new long[] { - DateTimeHelper.THREE_DAYS, - DateTimeHelper.ONE_WEEK, - DateTimeHelper.ROUGHLY_ONE_MONTH, - DateTimeHelper.ROUGHLY_THREE_MONTHS, - DateTimeHelper.ROUGHLY_ONE_YEAR, - DateTimeHelper.ROUGHLY_FIVE_YEARS }; + private Period[] graphIntervals = new Period[] { + Period.ofDays(3), + Period.ofWeeks(1), + Period.ofMonths(1), + Period.ofMonths(3), + Period.ofYears(1), + Period.ofYears(5) };
private long[] dataPointIntervals = new long[] { DateTimeHelper.FIFTEEN_MINUTES, @@ -100,12 +103,15 @@ public class BandwidthDocumentWriter implements DocumentWriter { Map<String, GraphHistory> graphs = new LinkedHashMap<>(); for (int i = 0; i < this.graphIntervals.length; i++) { String graphName = this.graphNames[i]; - long graphInterval = this.graphIntervals[i]; + Period graphInterval = this.graphIntervals[i]; long dataPointInterval = this.dataPointIntervals[i]; List<Long> dataPoints = new ArrayList<>(); long graphEndMillis = ((lastSeenMillis + DateTimeHelper.ONE_HOUR) / dataPointInterval) * dataPointInterval; - long graphStartMillis = graphEndMillis - graphInterval; + long graphStartMillis = LocalDateTime + .ofEpochSecond(graphEndMillis / 1000L, 0, ZoneOffset.UTC) + .minus(graphInterval) + .toEpochSecond(ZoneOffset.UTC) * 1000L; long intervalStartMillis = graphStartMillis; long totalMillis = 0L; long totalBandwidth = 0L; @@ -159,9 +165,11 @@ public class BandwidthDocumentWriter implements DocumentWriter { } long firstDataPointMillis = graphStartMillis + firstNonNullIndex * dataPointInterval + dataPointInterval / 2L; - if (i > 0 && !graphs.isEmpty() && firstDataPointMillis >= - ((lastSeenMillis + DateTimeHelper.ONE_HOUR) / dataPointInterval) - * dataPointInterval - graphIntervals[i - 1]) { + if (i > 0 && !graphs.isEmpty() && firstDataPointMillis >= LocalDateTime + .ofEpochSecond(graphEndMillis / 1000L, 0, ZoneOffset.UTC) + .minus(graphIntervals[i - 1]) + .toEpochSecond(ZoneOffset.UTC) * 1000L) { + /* Skip bandwidth history object, because it doesn't contain * anything new that wasn't already contained in the last * bandwidth history object(s). Unless we did not include any of diff --git a/src/main/java/org/torproject/onionoo/writer/ClientsDocumentWriter.java b/src/main/java/org/torproject/onionoo/writer/ClientsDocumentWriter.java index 81168f5..4eca33a 100644 --- a/src/main/java/org/torproject/onionoo/writer/ClientsDocumentWriter.java +++ b/src/main/java/org/torproject/onionoo/writer/ClientsDocumentWriter.java @@ -17,6 +17,9 @@ import org.torproject.onionoo.util.FormattingUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory;
+import java.time.LocalDateTime; +import java.time.Period; +import java.time.ZoneOffset; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -94,12 +97,12 @@ public class ClientsDocumentWriter implements DocumentWriter { "1_year", "5_years" };
- private long[] graphIntervals = new long[] { - DateTimeHelper.ONE_WEEK, - DateTimeHelper.ROUGHLY_ONE_MONTH, - DateTimeHelper.ROUGHLY_THREE_MONTHS, - DateTimeHelper.ROUGHLY_ONE_YEAR, - DateTimeHelper.ROUGHLY_FIVE_YEARS }; + private Period[] graphIntervals = new Period[] { + Period.ofWeeks(1), + Period.ofMonths(1), + Period.ofMonths(3), + Period.ofYears(1), + Period.ofYears(5) };
private long[] dataPointIntervals = new long[] { DateTimeHelper.ONE_DAY, @@ -129,13 +132,16 @@ public class ClientsDocumentWriter implements DocumentWriter { private GraphHistory compileClientsHistory( int graphIntervalIndex, SortedSet<ClientsHistory> history, long lastSeenMillis) { - long graphInterval = this.graphIntervals[graphIntervalIndex]; + Period graphInterval = this.graphIntervals[graphIntervalIndex]; long dataPointInterval = this.dataPointIntervals[graphIntervalIndex]; List<Double> dataPoints = new ArrayList<>(); long graphEndMillis = ((lastSeenMillis + DateTimeHelper.ONE_HOUR) / dataPointInterval) * dataPointInterval; - long graphStartMillis = graphEndMillis - graphInterval; + long graphStartMillis = LocalDateTime + .ofEpochSecond(graphEndMillis / 1000L, 0, ZoneOffset.UTC) + .minus(graphInterval) + .toEpochSecond(ZoneOffset.UTC) * 1000L; long intervalStartMillis = graphStartMillis; long millis = 0L; double responses = 0.0; @@ -182,9 +188,10 @@ public class ClientsDocumentWriter implements DocumentWriter { } long firstDataPointMillis = graphStartMillis + firstNonNullIndex * dataPointInterval + dataPointInterval / 2L; - if (graphIntervalIndex > 0 && firstDataPointMillis >= - ((lastSeenMillis + DateTimeHelper.ONE_HOUR) / dataPointInterval) - * dataPointInterval - graphIntervals[graphIntervalIndex - 1]) { + if (graphIntervalIndex > 0 && firstDataPointMillis >= LocalDateTime + .ofEpochSecond(graphEndMillis / 1000L, 0, ZoneOffset.UTC) + .minus(graphIntervals[graphIntervalIndex - 1]) + .toEpochSecond(ZoneOffset.UTC) * 1000L) { /* Skip clients history object, because it doesn't contain * anything new that wasn't already contained in the last * clients history object(s). */ diff --git a/src/main/java/org/torproject/onionoo/writer/UptimeDocumentWriter.java b/src/main/java/org/torproject/onionoo/writer/UptimeDocumentWriter.java index 2aee7a1..d1e2003 100644 --- a/src/main/java/org/torproject/onionoo/writer/UptimeDocumentWriter.java +++ b/src/main/java/org/torproject/onionoo/writer/UptimeDocumentWriter.java @@ -17,6 +17,9 @@ import org.torproject.onionoo.util.FormattingUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory;
+import java.time.LocalDateTime; +import java.time.Period; +import java.time.ZoneOffset; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -88,12 +91,12 @@ public class UptimeDocumentWriter implements DocumentWriter { "1_year", "5_years" };
- private long[] graphIntervals = new long[] { - DateTimeHelper.ONE_WEEK, - DateTimeHelper.ROUGHLY_ONE_MONTH, - DateTimeHelper.ROUGHLY_THREE_MONTHS, - DateTimeHelper.ROUGHLY_ONE_YEAR, - DateTimeHelper.ROUGHLY_FIVE_YEARS }; + private Period[] graphIntervals = new Period[] { + Period.ofWeeks(1), + Period.ofMonths(1), + Period.ofMonths(3), + Period.ofYears(1), + Period.ofYears(5) };
private long[] dataPointIntervals = new long[] { DateTimeHelper.ONE_HOUR, @@ -152,7 +155,7 @@ public class UptimeDocumentWriter implements DocumentWriter { boolean relay, SortedSet<UptimeHistory> history, SortedSet<UptimeHistory> knownStatuses, long lastSeenMillis, String flag) { - long graphInterval = this.graphIntervals[graphIntervalIndex]; + Period graphInterval = this.graphIntervals[graphIntervalIndex]; long dataPointInterval = this.dataPointIntervals[graphIntervalIndex]; int dataPointIntervalHours = (int) (dataPointInterval @@ -160,7 +163,10 @@ public class UptimeDocumentWriter implements DocumentWriter { List<Integer> uptimeDataPoints = new ArrayList<>(); long graphEndMillis = ((lastSeenMillis + DateTimeHelper.ONE_HOUR) / dataPointInterval) * dataPointInterval; - long graphStartMillis = graphEndMillis - graphInterval; + long graphStartMillis = LocalDateTime + .ofEpochSecond(graphEndMillis / 1000L, 0, ZoneOffset.UTC) + .minus(graphInterval) + .toEpochSecond(ZoneOffset.UTC) * 1000L; long intervalStartMillis = graphStartMillis; int uptimeHours = 0; long firstStatusStartMillis = -1L; @@ -285,9 +291,10 @@ public class UptimeDocumentWriter implements DocumentWriter { } long firstDataPointMillis = graphStartMillis + firstNonNullIndex * dataPointInterval + dataPointInterval / 2L; - if (graphIntervalIndex > 0 && firstDataPointMillis >= - ((lastSeenMillis + DateTimeHelper.ONE_HOUR) / dataPointInterval) - * dataPointInterval - graphIntervals[graphIntervalIndex - 1]) { + if (graphIntervalIndex > 0 && firstDataPointMillis >= LocalDateTime + .ofEpochSecond(graphEndMillis / 1000L, 0, ZoneOffset.UTC) + .minus(graphIntervals[graphIntervalIndex - 1]) + .toEpochSecond(ZoneOffset.UTC) * 1000L) { /* Skip uptime history object, because it doesn't contain * anything new that wasn't already contained in the last * uptime history object(s). */ diff --git a/src/main/java/org/torproject/onionoo/writer/WeightsDocumentWriter.java b/src/main/java/org/torproject/onionoo/writer/WeightsDocumentWriter.java index 10d8a94..f4e2c3a 100644 --- a/src/main/java/org/torproject/onionoo/writer/WeightsDocumentWriter.java +++ b/src/main/java/org/torproject/onionoo/writer/WeightsDocumentWriter.java @@ -15,6 +15,9 @@ import org.torproject.onionoo.docs.WeightsStatus; import org.slf4j.Logger; import org.slf4j.LoggerFactory;
+import java.time.LocalDateTime; +import java.time.Period; +import java.time.ZoneOffset; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -68,12 +71,12 @@ public class WeightsDocumentWriter implements DocumentWriter { "1_year", "5_years" };
- private long[] graphIntervals = new long[] { - DateTimeHelper.ONE_WEEK, - DateTimeHelper.ROUGHLY_ONE_MONTH, - DateTimeHelper.ROUGHLY_THREE_MONTHS, - DateTimeHelper.ROUGHLY_ONE_YEAR, - DateTimeHelper.ROUGHLY_FIVE_YEARS }; + private Period[] graphIntervals = new Period[] { + Period.ofWeeks(1), + Period.ofMonths(1), + Period.ofMonths(3), + Period.ofYears(1), + Period.ofYears(5) };
private long[] dataPointIntervals = new long[] { DateTimeHelper.ONE_HOUR, @@ -118,13 +121,16 @@ public class WeightsDocumentWriter implements DocumentWriter { private GraphHistory compileWeightsHistory(int graphTypeIndex, int graphIntervalIndex, SortedMap<long[], double[]> history, long lastSeenMillis) { - long graphInterval = this.graphIntervals[graphIntervalIndex]; + Period graphInterval = this.graphIntervals[graphIntervalIndex]; long dataPointInterval = this.dataPointIntervals[graphIntervalIndex]; List<Double> dataPoints = new ArrayList<>(); long graphEndMillis = ((lastSeenMillis + DateTimeHelper.ONE_HOUR) / dataPointInterval) * dataPointInterval; - long graphStartMillis = graphEndMillis - graphInterval; + long graphStartMillis = LocalDateTime + .ofEpochSecond(graphEndMillis / 1000L, 0, ZoneOffset.UTC) + .minus(graphInterval) + .toEpochSecond(ZoneOffset.UTC) * 1000L; long intervalStartMillis = graphStartMillis; long totalMillis = 0L; double totalWeightTimesMillis = 0.0; @@ -175,9 +181,10 @@ public class WeightsDocumentWriter implements DocumentWriter { } long firstDataPointMillis = graphStartMillis + firstNonNullIndex * dataPointInterval + dataPointInterval / 2L; - if (graphIntervalIndex > 0 && firstDataPointMillis >= - ((lastSeenMillis + DateTimeHelper.ONE_HOUR) / dataPointInterval) - * dataPointInterval - graphIntervals[graphIntervalIndex - 1]) { + if (graphIntervalIndex > 0 && firstDataPointMillis >= LocalDateTime + .ofEpochSecond(graphEndMillis / 1000L, 0, ZoneOffset.UTC) + .minus(graphIntervals[graphIntervalIndex - 1]) + .toEpochSecond(ZoneOffset.UTC) * 1000L) { /* Skip weights history object, because it doesn't contain * anything new that wasn't already contained in the last * weights history object(s). */
tor-commits@lists.torproject.org