package net.i2p.router.web; import java.io.IOException; import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.TreeSet; import net.i2p.data.DataHelper; import net.i2p.stat.Rate; public class GraphHelper extends HelperBase { private int _periodCount; private boolean _showEvents; private int _width; private int _height; private int _refreshDelaySeconds; public GraphHelper() { _periodCount = 60; // SummaryListener.PERIODS; _showEvents = false; _width = 250; _height = 100; _refreshDelaySeconds = 60; } public void setPeriodCount(String str) { try { _periodCount = Integer.parseInt(str); } catch (NumberFormatException nfe) {} } public void setShowEvents(boolean b) { _showEvents = b; } public void setHeight(String str) { try { _height = Integer.parseInt(str); } catch (NumberFormatException nfe) {} } public void setWidth(String str) { try { _width = Integer.parseInt(str); } catch (NumberFormatException nfe) {} } public void setRefreshDelay(String str) { try { _refreshDelaySeconds = Integer.parseInt(str); } catch (NumberFormatException nfe) {} } public String getImages() { try { List listeners = StatSummarizer.instance().getListeners(); TreeSet ordered = new TreeSet(new AlphaComparator()); ordered.addAll(listeners); // go to some trouble to see if we have the data for the combined bw graph boolean hasTx = false; boolean hasRx = false; for (Iterator iter = ordered.iterator(); iter.hasNext(); ) { SummaryListener lsnr = (SummaryListener)iter.next(); String title = lsnr.getRate().getRateStat().getName(); if (title.equals("bw.sendRate")) hasTx = true; else if (title.equals("bw.recvRate")) hasRx = true; } if (hasTx && hasRx && !_showEvents) { _out.write(""); _out.write("\n"); } for (Iterator iter = ordered.iterator(); iter.hasNext(); ) { SummaryListener lsnr = (SummaryListener)iter.next(); Rate r = lsnr.getRate(); String title = r.getRateStat().getName() + " for " + DataHelper.formatDuration(_periodCount * r.getPeriod()); _out.write(""); _out.write("\n"); } if (_refreshDelaySeconds > 0) // shorten the refresh by 3 seconds so we beat the iframe _out.write("\n"); } catch (IOException ioe) { ioe.printStackTrace(); } return ""; } public String getForm() { try { _out.write("

Configure Graph Display

"); _out.write("

[Select Stats to Graph]

"); _out.write("

"); _out.write("Periods:
\n"); _out.write("Plot averages: "); _out.write("or plot events:
\n"); _out.write("Image sizes: width: pixels, height:
\n"); _out.write("Refresh delay:
\n"); _out.write("
"); } catch (IOException ioe) { ioe.printStackTrace(); } return ""; } public String getPeerSummary() { try { _context.commSystem().renderStatusHTML(_out); _context.bandwidthLimiter().renderStatusHTML(_out); } catch (IOException ioe) { ioe.printStackTrace(); } return ""; } } class AlphaComparator implements Comparator { public int compare(Object lhs, Object rhs) { SummaryListener l = (SummaryListener)lhs; SummaryListener r = (SummaryListener)rhs; String lName = l.getRate().getRateStat().getName() + "." + l.getRate().getPeriod(); String rName = r.getRate().getRateStat().getName() + "." + r.getRate().getPeriod(); return lName.compareTo(rName); } }