[tor-commits] [onionoo/master] Fix minor bug in writing uptime documents.
karsten at torproject.org
karsten at torproject.org
Mon Apr 14 13:29:25 UTC 2014
commit 56695bcbaa409644b2036c508f4d0cf80796241a
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date: Sat Apr 12 18:41:29 2014 +0200
Fix minor bug in writing uptime documents.
When a relay first showed up in the middle of a, say, 4-hour interval, we
discounted its uptime in that interval by the number of hours that it
wasn't online. We should ignore those hours.
---
.../torproject/onionoo/UptimeDocumentWriter.java | 79 +++++++++++---------
1 file changed, 44 insertions(+), 35 deletions(-)
diff --git a/src/org/torproject/onionoo/UptimeDocumentWriter.java b/src/org/torproject/onionoo/UptimeDocumentWriter.java
index 60ca311..14c800d 100644
--- a/src/org/torproject/onionoo/UptimeDocumentWriter.java
+++ b/src/org/torproject/onionoo/UptimeDocumentWriter.java
@@ -129,14 +129,18 @@ public class UptimeDocumentWriter implements FingerprintListener,
this.dataPointIntervals[graphIntervalIndex];
int dataPointIntervalHours = (int) (dataPointInterval
/ DateTimeHelper.ONE_HOUR);
- List<Integer> statusDataPoints = new ArrayList<Integer>();
+ List<Integer> uptimeDataPoints = new ArrayList<Integer>();
long intervalStartMillis = ((this.now - graphInterval)
/ dataPointInterval) * dataPointInterval;
- int statusHours = 0;
- for (UptimeHistory hist : knownStatuses) {
+ int uptimeHours = 0;
+ long firstStatusStartMillis = -1L;
+ for (UptimeHistory hist : history) {
if (hist.isRelay() != relay) {
continue;
}
+ if (firstStatusStartMillis < 0L) {
+ firstStatusStartMillis = hist.getStartMillis();
+ }
long histEndMillis = hist.getStartMillis() + DateTimeHelper.ONE_HOUR
* hist.getUptimeHours();
if (histEndMillis < intervalStartMillis) {
@@ -144,38 +148,36 @@ public class UptimeDocumentWriter implements FingerprintListener,
}
while (hist.getStartMillis() >= intervalStartMillis
+ dataPointInterval) {
- statusDataPoints.add(statusHours * 5 > dataPointIntervalHours
- ? statusHours : -1);
- statusHours = 0;
+ if (firstStatusStartMillis < intervalStartMillis
+ + dataPointInterval) {
+ uptimeDataPoints.add(uptimeHours);
+ } else {
+ uptimeDataPoints.add(-1);
+ }
+ uptimeHours = 0;
intervalStartMillis += dataPointInterval;
}
while (histEndMillis >= intervalStartMillis + dataPointInterval) {
- statusHours += (int) ((intervalStartMillis + dataPointInterval
+ uptimeHours += (int) ((intervalStartMillis + dataPointInterval
- Math.max(hist.getStartMillis(), intervalStartMillis))
/ DateTimeHelper.ONE_HOUR);
- statusDataPoints.add(statusHours * 5 > dataPointIntervalHours
- ? statusHours : -1);
- statusHours = 0;
+ uptimeDataPoints.add(uptimeHours);
+ uptimeHours = 0;
intervalStartMillis += dataPointInterval;
}
- statusHours += (int) ((histEndMillis - Math.max(
+ uptimeHours += (int) ((histEndMillis - Math.max(
hist.getStartMillis(), intervalStartMillis))
/ DateTimeHelper.ONE_HOUR);
}
- statusDataPoints.add(statusHours * 5 > dataPointIntervalHours
- ? statusHours : -1);
- List<Integer> uptimeDataPoints = new ArrayList<Integer>();
+ uptimeDataPoints.add(uptimeHours);
+ List<Integer> statusDataPoints = new ArrayList<Integer>();
intervalStartMillis = ((this.now - graphInterval)
/ dataPointInterval) * dataPointInterval;
- int uptimeHours = 0;
- long firstStatusStartMillis = -1L;
- for (UptimeHistory hist : history) {
+ int statusHours = -1;
+ for (UptimeHistory hist : knownStatuses) {
if (hist.isRelay() != relay) {
continue;
}
- if (firstStatusStartMillis < 0L) {
- firstStatusStartMillis = hist.getStartMillis();
- }
long histEndMillis = hist.getStartMillis() + DateTimeHelper.ONE_HOUR
* hist.getUptimeHours();
if (histEndMillis < intervalStartMillis) {
@@ -183,28 +185,35 @@ public class UptimeDocumentWriter implements FingerprintListener,
}
while (hist.getStartMillis() >= intervalStartMillis
+ dataPointInterval) {
- if (firstStatusStartMillis < intervalStartMillis
- + dataPointInterval) {
- uptimeDataPoints.add(uptimeHours);
- } else {
- uptimeDataPoints.add(-1);
- }
- uptimeHours = 0;
+ statusDataPoints.add(statusHours * 5 > dataPointIntervalHours
+ ? statusHours : -1);
+ statusHours = -1;
intervalStartMillis += dataPointInterval;
}
while (histEndMillis >= intervalStartMillis + dataPointInterval) {
- uptimeHours += (int) ((intervalStartMillis + dataPointInterval
- - Math.max(hist.getStartMillis(), intervalStartMillis))
+ if (statusHours < 0) {
+ statusHours = 0;
+ }
+ statusHours += (int) ((intervalStartMillis + dataPointInterval
+ - Math.max(Math.max(hist.getStartMillis(),
+ firstStatusStartMillis), intervalStartMillis))
/ DateTimeHelper.ONE_HOUR);
- uptimeDataPoints.add(uptimeHours);
- uptimeHours = 0;
+ statusDataPoints.add(statusHours * 5 > dataPointIntervalHours
+ ? statusHours : -1);
+ statusHours = -1;
intervalStartMillis += dataPointInterval;
}
- uptimeHours += (int) ((histEndMillis - Math.max(
- hist.getStartMillis(), intervalStartMillis))
- / DateTimeHelper.ONE_HOUR);
+ if (statusHours < 0) {
+ statusHours = 0;
+ }
+ statusHours += (int) ((histEndMillis - Math.max(Math.max(
+ hist.getStartMillis(), firstStatusStartMillis),
+ intervalStartMillis)) / DateTimeHelper.ONE_HOUR);
+ }
+ if (statusHours > 0) {
+ statusDataPoints.add(statusHours * 5 > dataPointIntervalHours
+ ? statusHours : -1);
}
- uptimeDataPoints.add(uptimeHours);
List<Double> dataPoints = new ArrayList<Double>();
for (int dataPointIndex = 0; dataPointIndex < statusDataPoints.size();
dataPointIndex++) {
More information about the tor-commits
mailing list