[tor-commits] [onionoo/release] Use exact periods for graphs covering months/years.

karsten at torproject.org karsten at torproject.org
Wed Feb 7 11:20:45 UTC 2018


commit 5cefee7b9de2a746ccaff42c6a0adb27cac8578a
Author: Karsten Loesing <karsten.loesing at 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). */





More information about the tor-commits mailing list