more use of the computeAverages method

This commit is contained in:
zab
2012-11-17 18:51:28 +00:00
parent 82e4244473
commit 3cbca7c0ac
3 changed files with 29 additions and 14 deletions

View File

@ -16,6 +16,7 @@ import net.i2p.router.peermanager.DBHistory;
import net.i2p.router.peermanager.PeerProfile; import net.i2p.router.peermanager.PeerProfile;
import net.i2p.router.peermanager.ProfileOrganizer; import net.i2p.router.peermanager.ProfileOrganizer;
import net.i2p.stat.Rate; import net.i2p.stat.Rate;
import net.i2p.stat.RateAverages;
import net.i2p.stat.RateStat; 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(_("1h Fail Rate")).append("</th>");
buf.append("<th class=\"smallhead\">").append(_("1d Fail Rate")).append("</th>"); buf.append("<th class=\"smallhead\">").append(_("1d Fail Rate")).append("</th>");
buf.append("</tr>"); buf.append("</tr>");
RateAverages ra = new RateAverages();
for (Iterator<PeerProfile> iter = integratedPeers.iterator(); iter.hasNext();) { for (Iterator<PeerProfile> iter = integratedPeers.iterator(); iter.hasNext();) {
PeerProfile prof = iter.next(); PeerProfile prof = iter.next();
Hash peer = prof.getPeer(); Hash peer = prof.getPeer();
@ -240,9 +242,9 @@ class ProfileOrganizerRenderer {
buf.append("<td align=\"right\">").append(DataHelper.formatDuration2(time)).append("</td>"); buf.append("<td align=\"right\">").append(DataHelper.formatDuration2(time)).append("</td>");
time = now - prof.getLastSendFailed(); time = now - prof.getLastSendFailed();
buf.append("<td align=\"right\">").append(DataHelper.formatDuration2(time)).append("</td>"); 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, 10*60*1000l, ra)).append("</td>");
buf.append("<td align=\"right\">").append(avg(prof, 60*60*1000l)).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)).append("</td>"); buf.append("<td align=\"right\">").append(avg(prof, 24*60*60*1000l, ra)).append("</td>");
DBHistory dbh = prof.getDBHistory(); DBHistory dbh = prof.getDBHistory();
if (dbh != null) { if (dbh != null) {
time = now - dbh.getLastLookupSuccessful(); time = now - dbh.getLastLookupSuccessful();
@ -253,8 +255,8 @@ class ProfileOrganizerRenderer {
buf.append("<td align=\"right\">").append(DataHelper.formatDuration2(time)).append("</td>"); buf.append("<td align=\"right\">").append(DataHelper.formatDuration2(time)).append("</td>");
time = now - dbh.getLastStoreFailed(); time = now - dbh.getLastStoreFailed();
buf.append("<td align=\"right\">").append(DataHelper.formatDuration2(time)).append("</td>"); 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, 60*60*1000l, ra)).append("</td>");
buf.append("<td align=\"right\">").append(davg(dbh, 24*60*60*1000l)).append("</td>"); buf.append("<td align=\"right\">").append(davg(dbh, 24*60*60*1000l, ra)).append("</td>");
} else { } else {
for (int i = 0; i < 6; i++) for (int i = 0; i < 6; i++)
buf.append("<td align=\"right\">").append(_(NA)); 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 num(double num) { synchronized (_fmt) { return _fmt.format(num); } }
private final static String NA = HelperBase._x("n/a"); 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(); RateStat rs = prof.getDbResponseTime();
if (rs == null) if (rs == null)
return _(NA); return _(NA);
Rate r = rs.getRate(rate); Rate r = rs.getRate(rate);
if (r == null) if (r == null)
return _(NA); return _(NA);
long c = r.getCurrentEventCount() + r.getLastEventCount(); ra.reset();
if (c == 0) r.computeAverages(ra, false);
if (ra.getTotalEventCount() == 0)
return _(NA); return _(NA);
double d = r.getCurrentTotalValue() + r.getLastTotalValue(); return DataHelper.formatDuration2(Math.round(ra.getAverage()));
return DataHelper.formatDuration2(Math.round(d/c));
} }
private String davg (DBHistory dbh, long rate) { private String davg (DBHistory dbh, long rate, RateAverages ra) {
RateStat rs = dbh.getFailedLookupRate(); RateStat rs = dbh.getFailedLookupRate();
if (rs == null) if (rs == null)
return "0%"; return "0%";
Rate r = rs.getRate(rate); Rate r = rs.getRate(rate);
if (r == null) if (r == null)
return "0%"; return "0%";
long c = r.getCurrentEventCount() + r.getLastEventCount(); ra.reset();
if (c <= 0) r.computeAverages(ra, false);
if (ra.getTotalEventCount() <= 0)
return "0%"; return "0%";
double avg = 0.5 + 100 * (r.getCurrentTotalValue() + r.getLastTotalValue()) / c; double avg = 0.5 + 100 * ra.getAverage();
return ((int) avg) + "%"; return ((int) avg) + "%";
} }

View File

@ -422,6 +422,8 @@ public class Rate {
public synchronized void computeAverages(RateAverages out, boolean useLifetime) { public synchronized void computeAverages(RateAverages out, boolean useLifetime) {
final long total = _currentEventCount + _lastEventCount; final long total = _currentEventCount + _lastEventCount;
out.setTotalEventCount(total);
if (total <= 0) { if (total <= 0) {
final double avg = useLifetime ? getAvgOrLifetimeAvg() : getAverageValue(); final double avg = useLifetime ? getAvgOrLifetimeAvg() : getAverageValue();
out.setAverage(avg); out.setAverage(avg);

View File

@ -8,11 +8,13 @@ package net.i2p.stat;
public class RateAverages { public class RateAverages {
private double average, current, last; private double average, current, last;
private long totalEventCount;
public void reset() { public void reset() {
average = 0; average = 0;
current = 0; current = 0;
last = 0; last = 0;
totalEventCount = 0;
} }
public double getAverage() { public double getAverage() {
@ -39,4 +41,12 @@ public class RateAverages {
this.last = last; this.last = last;
} }
public long getTotalEventCount() {
return totalEventCount;
}
public void setTotalEventCount(long totalEventCount) {
this.totalEventCount = totalEventCount;
}
} }