diff --git a/router/java/src/net/i2p/router/admin/StatsGenerator.java b/router/java/src/net/i2p/router/admin/StatsGenerator.java index 6c718ff15..cdd8fbbde 100644 --- a/router/java/src/net/i2p/router/admin/StatsGenerator.java +++ b/router/java/src/net/i2p/router/admin/StatsGenerator.java @@ -29,183 +29,180 @@ public class StatsGenerator { _log = context.logManager().getLog(StatsGenerator.class); } - public String generateStatsPage() { - ByteArrayOutputStream baos = new ByteArrayOutputStream(32*1024); - try { - generateStatsPage(baos); - } catch (IOException ioe) { - _log.error("Error generating stats", ioe); - } - return new String(baos.toByteArray()); - } - public void generateStatsPage(OutputStream out) throws IOException { - PrintWriter pw = new PrintWriter(out); - pw.println("I2P Router Stats"); - pw.println("

Router statistics

"); - pw.println("console | stats
"); + StringBuffer buf = new StringBuffer(16*1024); + buf.append("I2P Router Stats"); + buf.append("

Router statistics

"); + buf.append("console | stats
"); + buf.append("
"); + buf.append(""); for (Iterator iter = groups.keySet().iterator(); iter.hasNext(); ) { String group = (String)iter.next(); Set stats = (Set)groups.get(group); - pw.print("\n"); + buf.append("\n"); for (Iterator statIter = stats.iterator(); statIter.hasNext(); ) { String stat = (String)statIter.next(); - pw.print("\n"); + buf.append("\n"); } + out.write(buf.toString().getBytes()); + buf.setLength(0); } - pw.println(""); - pw.println("
"); + buf.append(""); + buf.append(""); - pw.print("Statistics gathered during this router's uptime ("); + buf.append("Statistics gathered during this router's uptime ("); long uptime = _context.router().getUptime(); - pw.print(DataHelper.formatDuration(uptime)); - pw.println("). The data gathered is quantized over a 1 minute period, so should just be used as an estimate

"); + buf.append(DataHelper.formatDuration(uptime)); + buf.append("). The data gathered is quantized over a 1 minute period, so should just be used as an estimate

"); + + out.write(buf.toString().getBytes()); + buf.setLength(0); for (Iterator iter = groups.keySet().iterator(); iter.hasNext(); ) { String group = (String)iter.next(); Set stats = (Set)groups.get(group); - pw.print("

"); - pw.print(group); - pw.println("

"); - pw.println("
".getBytes()); } - pw.println(""); - pw.flush(); + out.write("".getBytes()); } - private void renderFrequency(String name, PrintWriter pw) throws IOException { + private void renderFrequency(String name, StringBuffer buf) { FrequencyStat freq = _context.statManager().getFrequency(name); - pw.print(""); - pw.print(freq.getDescription()); - pw.println("
"); + buf.append(""); + buf.append(freq.getDescription()); + buf.append("
"); long periods[] = freq.getPeriods(); Arrays.sort(periods); for (int i = 0; i < periods.length; i++) { - renderPeriod(pw, periods[i], "frequency"); + renderPeriod(buf, periods[i], "frequency"); Frequency curFreq = freq.getFrequency(periods[i]); - pw.print(" avg per period: ("); - pw.print(num(curFreq.getAverageEventsPerPeriod())); - pw.print(", max "); - pw.print(num(curFreq.getMaxAverageEventsPerPeriod())); + buf.append(" avg per period: ("); + buf.append(num(curFreq.getAverageEventsPerPeriod())); + buf.append(", max "); + buf.append(num(curFreq.getMaxAverageEventsPerPeriod())); if ( (curFreq.getMaxAverageEventsPerPeriod() > 0) && (curFreq.getAverageEventsPerPeriod() > 0) ) { - pw.print(", current is "); - pw.print(pct(curFreq.getAverageEventsPerPeriod()/curFreq.getMaxAverageEventsPerPeriod())); - pw.print(" of max"); + buf.append(", current is "); + buf.append(pct(curFreq.getAverageEventsPerPeriod()/curFreq.getMaxAverageEventsPerPeriod())); + buf.append(" of max"); } - pw.print(")"); + buf.append(")"); //buf.append(" avg interval between updates: (").append(num(curFreq.getAverageInterval())).append("ms, min "); //buf.append(num(curFreq.getMinAverageInterval())).append("ms)"); - pw.print(" strict average per period: "); - pw.print(num(curFreq.getStrictAverageEventsPerPeriod())); - pw.print(" events (averaged "); - pw.print(" using the lifetime of "); - pw.print(num(curFreq.getEventCount())); - pw.print(" events)"); - pw.println("
"); + buf.append(" strict average per period: "); + buf.append(num(curFreq.getStrictAverageEventsPerPeriod())); + buf.append(" events (averaged "); + buf.append(" using the lifetime of "); + buf.append(num(curFreq.getEventCount())); + buf.append(" events)"); + buf.append("
"); } - pw.println("
"); + buf.append("
"); } - private void renderRate(String name, PrintWriter pw) throws IOException { + private void renderRate(String name, StringBuffer buf) { RateStat rate = _context.statManager().getRate(name); - pw.print(""); - pw.print(rate.getDescription()); - pw.println("
"); + buf.append(""); + buf.append(rate.getDescription()); + buf.append("
"); long periods[] = rate.getPeriods(); Arrays.sort(periods); - pw.println(""); + buf.append("
"); } - private static void renderPeriod(PrintWriter pw, long period, String name) throws IOException { - pw.print(""); - pw.print(DataHelper.formatDuration(period)); - pw.print(" "); - pw.print(name); - pw.print(": "); + private static void renderPeriod(StringBuffer buf, long period, String name) { + buf.append(""); + buf.append(DataHelper.formatDuration(period)); + buf.append(" "); + buf.append(name); + buf.append(": "); } private final static DecimalFormat _fmt = new DecimalFormat("###,##0.00");