diff --git a/core/java/src/net/i2p/stat/RateStat.java b/core/java/src/net/i2p/stat/RateStat.java
index dc03072ca..44bf81df6 100644
--- a/core/java/src/net/i2p/stat/RateStat.java
+++ b/core/java/src/net/i2p/stat/RateStat.java
@@ -72,7 +72,7 @@ public class RateStat {
if ( (_rates == null) || (_rates.length <= 0) ) return 0;
return _rates[0].getLifetimeAverageValue();
}
- public double getLifetimeEventCount() {
+ public long getLifetimeEventCount() {
if ( (_rates == null) || (_rates.length <= 0) ) return 0;
return _rates[0].getLifetimeEventCount();
}
diff --git a/router/java/src/net/i2p/router/admin/StatsGenerator.java b/router/java/src/net/i2p/router/admin/StatsGenerator.java
index a75d0e246..870b3ace6 100644
--- a/router/java/src/net/i2p/router/admin/StatsGenerator.java
+++ b/router/java/src/net/i2p/router/admin/StatsGenerator.java
@@ -98,9 +98,12 @@ public class StatsGenerator {
buf.append("");
buf.append(freq.getDescription());
buf.append("
");
+ long uptime = _context.router().getUptime();
long periods[] = freq.getPeriods();
Arrays.sort(periods);
for (int i = 0; i < periods.length; i++) {
+ if (periods[i] > uptime)
+ break;
renderPeriod(buf, periods[i], "frequency");
Frequency curFreq = freq.getFrequency(periods[i]);
buf.append(" avg per period: (");
@@ -128,47 +131,64 @@ public class StatsGenerator {
private void renderRate(String name, StringBuffer buf) {
RateStat rate = _context.statManager().getRate(name);
- buf.append("");
- buf.append(rate.getDescription());
- buf.append("
");
+ String d = rate.getDescription();
+ if (! "".equals(d)) {
+ buf.append("");
+ buf.append(d);
+ buf.append("
");
+ }
+ if (rate.getLifetimeEventCount() <= 0) {
+ buf.append("No lifetime events
");
+ return;
+ }
+ long now = _context.clock().now();
long periods[] = rate.getPeriods();
Arrays.sort(periods);
buf.append("
");
for (int i = 0; i < periods.length; i++) {
+ Rate curRate = rate.getRate(periods[i]);
+ if (curRate.getLastCoalesceDate() <= curRate.getCreationDate())
+ break;
buf.append("- ");
renderPeriod(buf, periods[i], "rate");
- Rate curRate = rate.getRate(periods[i]);
- buf.append( "avg value: (");
- buf.append(num(curRate.getAverageValue()));
- buf.append(" peak ");
- buf.append(num(curRate.getExtremeAverageValue()));
- buf.append(", [");
- buf.append(pct(curRate.getPercentageOfExtremeValue()));
- buf.append(" of max");
- buf.append(", and ");
- buf.append(pct(curRate.getPercentageOfLifetimeValue()));
- buf.append(" of lifetime average]");
-
- buf.append(")");
- buf.append(" highest total period value: (");
- buf.append(num(curRate.getExtremeTotalValue()));
- buf.append(")");
- if (curRate.getLifetimeTotalEventTime() > 0) {
- buf.append(" saturation: (");
- buf.append(pct(curRate.getLastEventSaturation()));
+ if (curRate.getLastEventCount() > 0) {
+ buf.append( "avg value: (");
+ buf.append(num(curRate.getAverageValue()));
+ buf.append(" peak ");
+ buf.append(num(curRate.getExtremeAverageValue()));
+ buf.append(", [");
+ buf.append(pct(curRate.getPercentageOfExtremeValue()));
+ buf.append(" of max");
+ buf.append(", and ");
+ buf.append(pct(curRate.getPercentageOfLifetimeValue()));
+ buf.append(" of lifetime average]");
+
buf.append(")");
- buf.append(" saturated limit: (");
- buf.append(num(curRate.getLastSaturationLimit()));
- buf.append(")");
- buf.append(" peak saturation: (");
- buf.append(pct(curRate.getExtremeEventSaturation()));
- buf.append(")");
- buf.append(" peak saturated limit: (");
- buf.append(num(curRate.getExtremeSaturationLimit()));
+ buf.append(" highest total period value: (");
+ buf.append(num(curRate.getExtremeTotalValue()));
buf.append(")");
+ if (curRate.getLifetimeTotalEventTime() > 0) {
+ buf.append(" saturation: (");
+ buf.append(pct(curRate.getLastEventSaturation()));
+ buf.append(")");
+ buf.append(" saturated limit: (");
+ buf.append(num(curRate.getLastSaturationLimit()));
+ buf.append(")");
+ buf.append(" peak saturation: (");
+ buf.append(pct(curRate.getExtremeEventSaturation()));
+ buf.append(")");
+ buf.append(" peak saturated limit: (");
+ buf.append(num(curRate.getExtremeSaturationLimit()));
+ buf.append(")");
+ }
+ buf.append(" events: ");
+ buf.append(curRate.getLastEventCount());
+ buf.append(" in this period which ended: ");
+ buf.append(DataHelper.formatDuration(now - curRate.getLastCoalesceDate()));
+ buf.append(" ago ");
+ } else {
+ buf.append(" No events ");
}
- buf.append(" events per period: ");
- buf.append(curRate.getLastEventCount());
long numPeriods = curRate.getLifetimePeriods();
if (numPeriods > 0) {
double avgFrequency = curRate.getLifetimeEventCount() / (double)numPeriods;
@@ -191,15 +211,13 @@ public class StatsGenerator {
buf.append(" in a format RRDTool understands)");
}
buf.append("
");
- if (i + 1 == periods.length) {
- // last one, so lets display the strict average
- buf.append("- lifetime average value: ");
- buf.append(num(curRate.getLifetimeAverageValue()));
- buf.append(" over ");
- buf.append(curRate.getLifetimeEventCount());
- buf.append(" events
");
- }
}
+ // Display the strict average
+ buf.append("- lifetime average value: ");
+ buf.append(num(rate.getLifetimeAverageValue()));
+ buf.append(" over ");
+ buf.append(rate.getLifetimeEventCount());
+ buf.append(" events
");
buf.append("
");
buf.append("
");
}