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("
iter = integratedPeers.iterator(); iter.hasNext();) {
PeerProfile prof = iter.next();
Hash peer = prof.getPeer();
@@ -240,9 +242,9 @@ class ProfileOrganizerRenderer {
buf.append("").append(DataHelper.formatDuration2(time)).append(" | ");
time = now - prof.getLastSendFailed();
buf.append("").append(DataHelper.formatDuration2(time)).append(" | ");
- buf.append("").append(avg(prof, 10*60*1000l)).append(" | ");
- buf.append("").append(avg(prof, 60*60*1000l)).append(" | ");
- buf.append("").append(avg(prof, 24*60*60*1000l)).append(" | ");
+ buf.append("").append(avg(prof, 10*60*1000l, ra)).append(" | ");
+ buf.append("").append(avg(prof, 60*60*1000l, ra)).append(" | ");
+ buf.append("").append(avg(prof, 24*60*60*1000l, ra)).append(" | ");
DBHistory dbh = prof.getDBHistory();
if (dbh != null) {
time = now - dbh.getLastLookupSuccessful();
@@ -253,8 +255,8 @@ class ProfileOrganizerRenderer {
buf.append("").append(DataHelper.formatDuration2(time)).append(" | ");
time = now - dbh.getLastStoreFailed();
buf.append("").append(DataHelper.formatDuration2(time)).append(" | ");
- buf.append("").append(davg(dbh, 60*60*1000l)).append(" | ");
- buf.append("").append(davg(dbh, 24*60*60*1000l)).append(" | ");
+ buf.append("").append(davg(dbh, 60*60*1000l, ra)).append(" | ");
+ buf.append("").append(davg(dbh, 24*60*60*1000l, ra)).append(" | ");
} else {
for (int i = 0; i < 6; i++)
buf.append("").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;
+ }
+
}
|