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