[tor-commits] [onionoo/master] Teach UptimeStatus how to load/save itself.

karsten at torproject.org karsten at torproject.org
Mon Apr 14 13:29:25 UTC 2014


commit 1fe217042241376fee66936e0b4140baaf0e513d
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Fri Mar 21 20:52:04 2014 +0100

    Teach UptimeStatus how to load/save itself.
---
 src/org/torproject/onionoo/UptimeStatus.java       |   33 +++++++++++++++++++-
 .../torproject/onionoo/UptimeStatusUpdater.java    |   17 ++--------
 2 files changed, 34 insertions(+), 16 deletions(-)

diff --git a/src/org/torproject/onionoo/UptimeStatus.java b/src/org/torproject/onionoo/UptimeStatus.java
index 61b4fe0..1a222b0 100644
--- a/src/org/torproject/onionoo/UptimeStatus.java
+++ b/src/org/torproject/onionoo/UptimeStatus.java
@@ -95,6 +95,10 @@ class UptimeHistory
 
 class UptimeStatus extends Document {
 
+  private transient String fingerprint;
+
+  private transient boolean isDirty = false;
+
   private SortedSet<UptimeHistory> history = new TreeSet<UptimeHistory>();
   public void setHistory(SortedSet<UptimeHistory> history) {
     this.history = history;
@@ -103,6 +107,19 @@ class UptimeStatus extends Document {
     return this.history;
   }
 
+  public static UptimeStatus loadOrCreate(String fingerprint) {
+    UptimeStatus uptimeStatus = (fingerprint == null) ?
+        ApplicationFactory.getDocumentStore().retrieve(
+            UptimeStatus.class, true) :
+        ApplicationFactory.getDocumentStore().retrieve(
+            UptimeStatus.class, true, fingerprint);
+    if (uptimeStatus == null) {
+      uptimeStatus = new UptimeStatus();
+    }
+    uptimeStatus.fingerprint = fingerprint;
+    return uptimeStatus;
+  }
+
   public void fromDocumentString(String documentString) {
     Scanner s = new Scanner(documentString);
     while (s.hasNextLine()) {
@@ -138,10 +155,24 @@ class UptimeStatus extends Document {
         }
       }
       this.history.add(interval);
+      this.isDirty = true;
+    }
+  }
+
+  public void storeIfChanged() {
+    if (this.isDirty) {
+      this.compressHistory();
+      if (fingerprint == null) {
+        ApplicationFactory.getDocumentStore().store(this);
+      } else {
+        ApplicationFactory.getDocumentStore().store(this,
+            this.fingerprint);
+      }
+      this.isDirty = false;
     }
   }
 
-  public void compressHistory() {
+  private void compressHistory() {
     SortedSet<UptimeHistory> compressedHistory =
         new TreeSet<UptimeHistory>();
     UptimeHistory lastInterval = null;
diff --git a/src/org/torproject/onionoo/UptimeStatusUpdater.java b/src/org/torproject/onionoo/UptimeStatusUpdater.java
index 4430387..6dc0b94 100644
--- a/src/org/torproject/onionoo/UptimeStatusUpdater.java
+++ b/src/org/torproject/onionoo/UptimeStatusUpdater.java
@@ -18,11 +18,8 @@ public class UptimeStatusUpdater implements DescriptorListener,
 
   private DescriptorSource descriptorSource;
 
-  private DocumentStore documentStore;
-
   public UptimeStatusUpdater() {
     this.descriptorSource = ApplicationFactory.getDescriptorSource();
-    this.documentStore = ApplicationFactory.getDocumentStore();
     this.registerDescriptorListeners();
   }
 
@@ -108,19 +105,9 @@ public class UptimeStatusUpdater implements DescriptorListener,
 
   private void updateStatus(boolean relay, String fingerprint,
       SortedSet<Long> newUptimeHours) {
-    UptimeStatus uptimeStatus = fingerprint == null ?
-        documentStore.retrieve(UptimeStatus.class, true) :
-        documentStore.retrieve(UptimeStatus.class, true, fingerprint);
-    if (uptimeStatus == null) {
-      uptimeStatus = new UptimeStatus();
-    }
+    UptimeStatus uptimeStatus = UptimeStatus.loadOrCreate(fingerprint);
     uptimeStatus.addToHistory(relay, newUptimeHours);
-    uptimeStatus.compressHistory();
-    if (fingerprint == null) {
-      this.documentStore.store(uptimeStatus);
-    } else {
-      this.documentStore.store(uptimeStatus, fingerprint);
-    }
+    uptimeStatus.storeIfChanged();
   }
 
   public String getStatsString() {





More information about the tor-commits mailing list