From 3cbca7c0ac493e68e9fe9d0670af93e81ac9c16f Mon Sep 17 00:00:00 2001
From: zab <zab@mail.i2p>
Date: Sat, 17 Nov 2012 18:51:28 +0000
Subject: [PATCH] more use of the computeAverages method

---
 .../router/web/ProfileOrganizerRenderer.java  | 31 ++++++++++---------
 core/java/src/net/i2p/stat/Rate.java          |  2 ++
 core/java/src/net/i2p/stat/RateAverages.java  | 10 ++++++
 3 files changed, 29 insertions(+), 14 deletions(-)

diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java
index aeb3639030..1c7077e274 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java
@@ -16,6 +16,7 @@ import net.i2p.router.peermanager.DBHistory;
 import net.i2p.router.peermanager.PeerProfile;
 import net.i2p.router.peermanager.ProfileOrganizer;
 import net.i2p.stat.Rate;
+import net.i2p.stat.RateAverages;
 import net.i2p.stat.RateStat;
 
 /**
@@ -218,6 +219,7 @@ class ProfileOrganizerRenderer {
         buf.append("<th class=\"smallhead\">").append(_("1h Fail Rate")).append("</th>");
         buf.append("<th class=\"smallhead\">").append(_("1d Fail Rate")).append("</th>");
         buf.append("</tr>");
+        RateAverages ra = new RateAverages();
         for (Iterator<PeerProfile> iter = integratedPeers.iterator(); iter.hasNext();) {
             PeerProfile prof = iter.next();
             Hash peer = prof.getPeer();
@@ -240,9 +242,9 @@ class ProfileOrganizerRenderer {
             buf.append("<td align=\"right\">").append(DataHelper.formatDuration2(time)).append("</td>");
             time = now - prof.getLastSendFailed();
             buf.append("<td align=\"right\">").append(DataHelper.formatDuration2(time)).append("</td>");
-            buf.append("<td align=\"right\">").append(avg(prof, 10*60*1000l)).append("</td>");
-            buf.append("<td align=\"right\">").append(avg(prof, 60*60*1000l)).append("</td>");
-            buf.append("<td align=\"right\">").append(avg(prof, 24*60*60*1000l)).append("</td>");
+            buf.append("<td align=\"right\">").append(avg(prof, 10*60*1000l, ra)).append("</td>");
+            buf.append("<td align=\"right\">").append(avg(prof, 60*60*1000l, ra)).append("</td>");
+            buf.append("<td align=\"right\">").append(avg(prof, 24*60*60*1000l, ra)).append("</td>");
             DBHistory dbh = prof.getDBHistory();
             if (dbh != null) {
                 time = now - dbh.getLastLookupSuccessful();
@@ -253,8 +255,8 @@ class ProfileOrganizerRenderer {
                 buf.append("<td align=\"right\">").append(DataHelper.formatDuration2(time)).append("</td>");
                 time = now - dbh.getLastStoreFailed();
                 buf.append("<td align=\"right\">").append(DataHelper.formatDuration2(time)).append("</td>");
-                buf.append("<td align=\"right\">").append(davg(dbh, 60*60*1000l)).append("</td>");
-                buf.append("<td align=\"right\">").append(davg(dbh, 24*60*60*1000l)).append("</td>");
+                buf.append("<td align=\"right\">").append(davg(dbh, 60*60*1000l, ra)).append("</td>");
+                buf.append("<td align=\"right\">").append(davg(dbh, 24*60*60*1000l, ra)).append("</td>");
             } else {
                 for (int i = 0; i < 6; i++)
                     buf.append("<td align=\"right\">").append(_(NA));
@@ -340,31 +342,32 @@ class ProfileOrganizerRenderer {
     private final static String num(double num) { synchronized (_fmt) { return _fmt.format(num); } }
     private final static String NA = HelperBase._x("n/a");
 
-    private String avg (PeerProfile prof, long rate) {
+    private String avg (PeerProfile prof, long rate, RateAverages ra) {
             RateStat rs = prof.getDbResponseTime();
             if (rs == null)
                 return _(NA);
             Rate r = rs.getRate(rate);
             if (r == null)
                 return _(NA);
-            long c = r.getCurrentEventCount() + r.getLastEventCount();
-            if (c == 0)
+            ra.reset();
+            r.computeAverages(ra, false);
+            if (ra.getTotalEventCount() == 0)
                 return _(NA);
-            double d = r.getCurrentTotalValue() + r.getLastTotalValue();
-            return DataHelper.formatDuration2(Math.round(d/c));
+            return DataHelper.formatDuration2(Math.round(ra.getAverage()));
     }
 
-    private String davg (DBHistory dbh, long rate) {
+    private String davg (DBHistory dbh, long rate, RateAverages ra) {
             RateStat rs = dbh.getFailedLookupRate();
             if (rs == null)
                 return "0%";
             Rate r = rs.getRate(rate);
             if (r == null)
                 return "0%";
-            long c = r.getCurrentEventCount() + r.getLastEventCount();
-            if (c <= 0)
+            ra.reset();
+            r.computeAverages(ra, false);
+            if (ra.getTotalEventCount() <= 0)
                 return "0%";
-            double avg = 0.5 + 100 * (r.getCurrentTotalValue() + r.getLastTotalValue()) / c;
+            double avg = 0.5 + 100 * ra.getAverage();
             return ((int) avg) + "%";
     }
 
diff --git a/core/java/src/net/i2p/stat/Rate.java b/core/java/src/net/i2p/stat/Rate.java
index 1bb8fcdc6e..e08fd95fd6 100644
--- a/core/java/src/net/i2p/stat/Rate.java
+++ b/core/java/src/net/i2p/stat/Rate.java
@@ -422,6 +422,8 @@ public class Rate {
     public synchronized void computeAverages(RateAverages out, boolean useLifetime) {
         
         final long total = _currentEventCount + _lastEventCount;
+        out.setTotalEventCount(total);
+        
         if (total <= 0) {
             final double avg = useLifetime ? getAvgOrLifetimeAvg() : getAverageValue();
             out.setAverage(avg);
diff --git a/core/java/src/net/i2p/stat/RateAverages.java b/core/java/src/net/i2p/stat/RateAverages.java
index 4f4cb7a13c..560c11263f 100644
--- a/core/java/src/net/i2p/stat/RateAverages.java
+++ b/core/java/src/net/i2p/stat/RateAverages.java
@@ -8,11 +8,13 @@ package net.i2p.stat;
 public class RateAverages {
     
     private double average, current, last;
+    private long totalEventCount;
     
     public void reset() {
         average = 0;
         current = 0;
         last = 0;
+        totalEventCount = 0;
     }
 
     public double getAverage() {
@@ -39,4 +41,12 @@ public class RateAverages {
         this.last = last;
     }
     
+    public long getTotalEventCount() {
+        return totalEventCount;
+    }
+    
+    public void setTotalEventCount(long totalEventCount) {
+        this.totalEventCount = totalEventCount;
+    }
+    
 }
-- 
GitLab