diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java index e867a8b32fa6a6187d26b8b1f21dfb4bccafd133..8a46e80f51fa85e7c3e1ce1756388deb608fcc88 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java @@ -50,16 +50,16 @@ public class ConfigStatsHandler extends FormHandler { public void setGraphList(String stats[]) { if (stats != null) { - String s = ""; + StringBuilder s = new StringBuilder(128); for (int i = 0; i < stats.length; i++) { String cur = stats[i].trim(); if (cur.length() > 0) { if (s.length() > 0) - s = s + ","; - s = s + cur; + s.append(","); + s.append(cur); } } - _graphs = s; + _graphs = s.toString(); } else { _graphs = ""; } @@ -122,7 +122,7 @@ public class ConfigStatsHandler extends FormHandler { addFormNotice(_("Restart required to take effect")); } if (graphsChanged) - addFormNotice(_("Graph list updated, may take up to 60s to be reflected here and on the <a href=\"graphs.jsp\">Graphs Page</a>")); + addFormNotice(_("Graph list updated, may take up to 60s to be reflected on the {0}Graphs Page{1}", "<a href=\"graphs\">", "</a>")); } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java index b890f1bc668ae91d6e97bd0d41512b08181e3c03..7ecf78b3c447e5bc11184eb7612935c24009408f 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java @@ -21,9 +21,10 @@ import net.i2p.util.Log; public class ConfigStatsHelper extends HelperBase { private Log _log; private String _filter; - private Set<String> _filters; + private final Set<String> _filters; + private final Set<String> _graphs; /** list of names of stats which are remaining, ordered by nested groups */ - private List<String> _stats; + private final List<String> _stats; private String _currentStatName; private String _currentGraphName; private String _currentStatDescription; @@ -35,6 +36,12 @@ public class ConfigStatsHelper extends HelperBase { private boolean _currentIsGraphed; private boolean _currentCanBeGraphed; + public ConfigStatsHelper() { + _stats = new ArrayList(); + _filters = new HashSet(); + _graphs = new HashSet(); + } + /** * Configure this bean to query a particular router context * @@ -46,7 +53,6 @@ public class ConfigStatsHelper extends HelperBase { super.setContextId(contextId); _log = _context.logManager().getLog(ConfigStatsHelper.class); - _stats = new ArrayList(); Map<String, SortedSet<String>> unsorted = _context.statManager().getStatsByGroup(); Map<String, Set<String>> groups = new TreeMap(new AlphaComparator()); groups.putAll(unsorted); @@ -57,10 +63,17 @@ public class ConfigStatsHelper extends HelperBase { if (_filter == null) _filter = ""; - _filters = new HashSet(); StringTokenizer tok = new StringTokenizer(_filter, ","); while (tok.hasMoreTokens()) _filters.add(tok.nextToken().trim()); + + // create a local copy of the config. Querying r.getSummaryListener() + // lags behind, as StatSummarizer only runs once a minute. + String specs = _context.getProperty("stat.summaries", StatSummarizer.DEFAULT_DATABASES); + tok = new StringTokenizer(specs, ","); + while (tok.hasMoreTokens()) { + _graphs.add(tok.nextToken().trim()); + } } /** @@ -100,9 +113,12 @@ public class ConfigStatsHelper extends HelperBase { if (period <= 10*60*1000) { Rate r = rs.getRate(period); _currentCanBeGraphed = r != null; - if (_currentCanBeGraphed) - _currentIsGraphed = r.getSummaryListener() != null; + if (_currentCanBeGraphed) { + // see above + //_currentIsGraphed = r.getSummaryListener() != null; _currentGraphName = _currentStatName + "." + period; + _currentIsGraphed = _graphs.contains(_currentGraphName); + } } else { _currentCanBeGraphed = false; } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java index 404519df9e9b13062e388eb2d220698b77407b11..b9a73a8040fefdd092482e7cfbf6d7f67379bce4 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java @@ -7,6 +7,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.TreeSet; import net.i2p.data.DataHelper; @@ -220,12 +221,12 @@ public class GraphHelper extends FormHandler { name = _stat; displayName = _("Bandwidth usage"); } else { - List<Rate> rates = StatSummarizer.instance().parseSpecs(_stat); + Set<Rate> rates = StatSummarizer.instance().parseSpecs(_stat); if (rates.size() != 1) { _out.write("Graphs not enabled for " + _stat); return ""; } - Rate r = rates.get(0); + Rate r = rates.iterator().next(); period = r.getPeriod(); name = r.getRateStat().getName(); displayName = name; diff --git a/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java b/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java index 662df8f54b77204978f13f51528e3a448ea70dc7..b14c28ac88937f2b24148876d2b6b5625f17f51e 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java @@ -3,8 +3,9 @@ package net.i2p.router.web; import java.io.File; import java.io.IOException; import java.io.OutputStream; -import java.util.ArrayList; import java.util.List; +import java.util.HashSet; +import java.util.Set; import java.util.StringTokenizer; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Semaphore; @@ -96,7 +97,7 @@ public class StatSummarizer implements Runnable { /** list of SummaryListener instances */ List<SummaryListener> getListeners() { return _listeners; } - private static final String DEFAULT_DATABASES = "bw.sendRate.60000" + + static final String DEFAULT_DATABASES = "bw.sendRate.60000" + ",bw.recvRate.60000" + // ",tunnel.testSuccessTime.60000" + // ",udp.outboundActiveCount.60000" + @@ -127,8 +128,8 @@ public class StatSummarizer implements Runnable { ( (spec != null) && (oldSpecs != null) && (oldSpecs.equals(spec))) ) return oldSpecs; - List<Rate> old = parseSpecs(oldSpecs); - List<Rate> newSpecs = parseSpecs(spec); + Set<Rate> old = parseSpecs(oldSpecs); + Set<Rate> newSpecs = parseSpecs(spec); // remove old ones for (Rate r : old) { @@ -307,9 +308,9 @@ public class StatSummarizer implements Runnable { * @param specs statName.period,statName.period,statName.period * @return list of Rate objects */ - List<Rate> parseSpecs(String specs) { + Set<Rate> parseSpecs(String specs) { StringTokenizer tok = new StringTokenizer(specs, ","); - List<Rate> rv = new ArrayList(); + Set<Rate> rv = new HashSet(); while (tok.hasMoreTokens()) { String spec = tok.nextToken(); int split = spec.lastIndexOf('.');