2007-07-14 zzz
* Clean up graphs.jsp - set K=1024 where appropriate, output image sizes in html, catch ooms, other minor tweaks * Fix current event count truncation which fixes graphs with low 60-sec event counts displaying high values (bw.* and router.* graphs for example were 1.5x too high) Affects all "events per period" (non-lifetime) counts.
This commit is contained in:
@ -55,10 +55,13 @@ public class GraphHelper {
|
|||||||
|
|
||||||
public String getImages() {
|
public String getImages() {
|
||||||
try {
|
try {
|
||||||
_out.write("<img src=\"viewstat.jsp?stat=bw.combined"
|
if (!_showEvents)
|
||||||
|
_out.write("<img width=\""
|
||||||
|
+ (_width + 83) + "\" height=\"" + (_height + 92)
|
||||||
|
+ "\" src=\"viewstat.jsp?stat=bw.combined"
|
||||||
+ "&periodCount=" + _periodCount
|
+ "&periodCount=" + _periodCount
|
||||||
+ "&width=" + _width
|
+ "&width=" + _width
|
||||||
+ "&height=" + _height
|
+ "&height=" + (_height - 14)
|
||||||
+ "\" title=\"Combined bandwidth graph\" />\n");
|
+ "\" title=\"Combined bandwidth graph\" />\n");
|
||||||
|
|
||||||
List listeners = StatSummarizer.instance().getListeners();
|
List listeners = StatSummarizer.instance().getListeners();
|
||||||
@ -68,7 +71,10 @@ public class GraphHelper {
|
|||||||
SummaryListener lsnr = (SummaryListener)iter.next();
|
SummaryListener lsnr = (SummaryListener)iter.next();
|
||||||
Rate r = lsnr.getRate();
|
Rate r = lsnr.getRate();
|
||||||
String title = r.getRateStat().getName() + " for " + DataHelper.formatDuration(_periodCount * r.getPeriod());
|
String title = r.getRateStat().getName() + " for " + DataHelper.formatDuration(_periodCount * r.getPeriod());
|
||||||
_out.write("<img src=\"viewstat.jsp?stat=" + r.getRateStat().getName()
|
_out.write("<img width=\""
|
||||||
|
+ (_width + 83) + "\" height=\"" + (_height + 92)
|
||||||
|
+ "\" src=\"viewstat.jsp?stat="
|
||||||
|
+ r.getRateStat().getName()
|
||||||
+ "&showEvents=" + _showEvents
|
+ "&showEvents=" + _showEvents
|
||||||
+ "&period=" + r.getPeriod()
|
+ "&period=" + r.getPeriod()
|
||||||
+ "&periodCount=" + _periodCount
|
+ "&periodCount=" + _periodCount
|
||||||
@ -119,4 +125,4 @@ class AlphaComparator implements Comparator {
|
|||||||
String rName = r.getRate().getRateStat().getName() + "." + r.getRate().getPeriod();
|
String rName = r.getRate().getRateStat().getName() + "." + r.getRate().getPeriod();
|
||||||
return lName.compareTo(rName);
|
return lName.compareTo(rName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -142,16 +142,17 @@ public class StatSummarizer implements Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean renderRatePng(OutputStream out, int width, int height, boolean hideLegend, boolean hideGrid, boolean hideTitle, boolean showEvents, int periodCount, boolean showCredit) throws IOException {
|
public boolean renderRatePng(OutputStream out, int width, int height, boolean hideLegend, boolean hideGrid, boolean hideTitle, boolean showEvents, int periodCount, boolean showCredit) throws IOException {
|
||||||
long end = _context.clock().now();
|
long end = _context.clock().now() - 60*1000;
|
||||||
if (periodCount <= 0) periodCount = SummaryListener.PERIODS;
|
if (periodCount <= 0) periodCount = SummaryListener.PERIODS;
|
||||||
if (periodCount > SummaryListener.PERIODS)
|
if (periodCount > SummaryListener.PERIODS)
|
||||||
periodCount = SummaryListener.PERIODS;
|
periodCount = SummaryListener.PERIODS;
|
||||||
long period = 60*1000;
|
long period = 60*1000;
|
||||||
long start = end - period*periodCount;
|
long start = end - period*periodCount;
|
||||||
long begin = System.currentTimeMillis();
|
//long begin = System.currentTimeMillis();
|
||||||
try {
|
try {
|
||||||
RrdGraphDef def = new RrdGraphDef();
|
RrdGraphDef def = new RrdGraphDef();
|
||||||
def.setTimePeriod(start/1000, end/1000);
|
def.setTimePeriod(start/1000, end/1000);
|
||||||
|
def.setBaseValue(1024);
|
||||||
String title = "Bandwidth usage";
|
String title = "Bandwidth usage";
|
||||||
if (!hideTitle)
|
if (!hideTitle)
|
||||||
def.setTitle(title);
|
def.setTitle(title);
|
||||||
@ -159,15 +160,15 @@ public class StatSummarizer implements Runnable {
|
|||||||
String recvName = SummaryListener.createName(_context, "bw.recvRate.60000");
|
String recvName = SummaryListener.createName(_context, "bw.recvRate.60000");
|
||||||
def.datasource(sendName, sendName, sendName, "AVERAGE", "MEMORY");
|
def.datasource(sendName, sendName, sendName, "AVERAGE", "MEMORY");
|
||||||
def.datasource(recvName, recvName, recvName, "AVERAGE", "MEMORY");
|
def.datasource(recvName, recvName, recvName, "AVERAGE", "MEMORY");
|
||||||
def.area(sendName, Color.BLUE, "Outbound bytes/second");
|
def.area(sendName, Color.BLUE, "Outbound bytes/sec");
|
||||||
//def.line(sendName, Color.BLUE, "Outbound bytes/second", 3);
|
//def.line(sendName, Color.BLUE, "Outbound bytes/sec", 3);
|
||||||
//def.line(recvName, Color.RED, "Inbound bytes/second@r", 3);
|
def.line(recvName, Color.RED, "Inbound bytes/sec@r", 3);
|
||||||
def.area(recvName, Color.RED, "Inbound bytes/second@r");
|
//def.area(recvName, Color.RED, "Inbound bytes/sec@r");
|
||||||
if (!hideLegend) {
|
if (!hideLegend) {
|
||||||
def.gprint(sendName, "AVERAGE", "outbound average: @2@sbytes/second");
|
def.gprint(sendName, "AVERAGE", "out average: @2@sbytes/sec");
|
||||||
def.gprint(sendName, "MAX", " max: @2@sbytes/second@r");
|
def.gprint(sendName, "MAX", " max: @2@sbytes/sec@r");
|
||||||
def.gprint(recvName, "AVERAGE", "inbound average: @2bytes/second@s");
|
def.gprint(recvName, "AVERAGE", "in average: @2@sbytes/sec");
|
||||||
def.gprint(recvName, "MAX", " max: @2@sbytes/second@r");
|
def.gprint(recvName, "MAX", " max: @2@sbytes/sec@r");
|
||||||
}
|
}
|
||||||
if (!showCredit)
|
if (!showCredit)
|
||||||
def.setShowSignature(false);
|
def.setShowSignature(false);
|
||||||
@ -188,7 +189,7 @@ public class StatSummarizer implements Runnable {
|
|||||||
data = graph.getPNGBytes();
|
data = graph.getPNGBytes();
|
||||||
else
|
else
|
||||||
data = graph.getPNGBytes(width, height);
|
data = graph.getPNGBytes(width, height);
|
||||||
long timeToPlot = System.currentTimeMillis() - begin;
|
//long timeToPlot = System.currentTimeMillis() - begin;
|
||||||
out.write(data);
|
out.write(data);
|
||||||
//File t = File.createTempFile("jrobinData", ".xml");
|
//File t = File.createTempFile("jrobinData", ".xml");
|
||||||
//_listener.getData().dumpXml(new FileOutputStream(t));
|
//_listener.getData().dumpXml(new FileOutputStream(t));
|
||||||
@ -201,6 +202,9 @@ public class StatSummarizer implements Runnable {
|
|||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
_log.error("Error rendering", ioe);
|
_log.error("Error rendering", ioe);
|
||||||
throw ioe;
|
throw ioe;
|
||||||
|
} catch (OutOfMemoryError oom) {
|
||||||
|
_log.error("Error rendering", oom);
|
||||||
|
throw new IOException("Error plotting: " + oom.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,7 +154,7 @@ class SummaryRenderer {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static synchronized void render(I2PAppContext ctx, OutputStream out, String filename) throws IOException {
|
public static synchronized void render(I2PAppContext ctx, OutputStream out, String filename) throws IOException {
|
||||||
long end = ctx.clock().now();
|
long end = ctx.clock().now() - 60*1000;
|
||||||
long start = end - 60*1000*SummaryListener.PERIODS;
|
long start = end - 60*1000*SummaryListener.PERIODS;
|
||||||
long begin = System.currentTimeMillis();
|
long begin = System.currentTimeMillis();
|
||||||
try {
|
try {
|
||||||
@ -174,16 +174,19 @@ class SummaryRenderer {
|
|||||||
}
|
}
|
||||||
public void render(OutputStream out) throws IOException { render(out, -1, -1, false, false, false, false, -1, true); }
|
public void render(OutputStream out) throws IOException { render(out, -1, -1, false, false, false, false, -1, true); }
|
||||||
public void render(OutputStream out, int width, int height, boolean hideLegend, boolean hideGrid, boolean hideTitle, boolean showEvents, int periodCount, boolean showCredit) throws IOException {
|
public void render(OutputStream out, int width, int height, boolean hideLegend, boolean hideGrid, boolean hideTitle, boolean showEvents, int periodCount, boolean showCredit) throws IOException {
|
||||||
long end = _listener.now();
|
long end = _listener.now() - 60*1000;
|
||||||
if (periodCount <= 0) periodCount = SummaryListener.PERIODS;
|
if (periodCount <= 0) periodCount = SummaryListener.PERIODS;
|
||||||
if (periodCount > SummaryListener.PERIODS)
|
if (periodCount > SummaryListener.PERIODS)
|
||||||
periodCount = SummaryListener.PERIODS;
|
periodCount = SummaryListener.PERIODS;
|
||||||
long start = end - _listener.getRate().getPeriod()*periodCount;
|
long start = end - _listener.getRate().getPeriod()*periodCount;
|
||||||
long begin = System.currentTimeMillis();
|
//long begin = System.currentTimeMillis();
|
||||||
try {
|
try {
|
||||||
RrdGraphDef def = new RrdGraphDef();
|
RrdGraphDef def = new RrdGraphDef();
|
||||||
def.setTimePeriod(start/1000, end/1000);
|
def.setTimePeriod(start/1000, end/1000);
|
||||||
String title = _listener.getRate().getRateStat().getName() + " averaged for "
|
String name = _listener.getRate().getRateStat().getName();
|
||||||
|
if ((name.startsWith("bw.") || name.endsWith("PacketSize")) && !showEvents)
|
||||||
|
def.setBaseValue(1024);
|
||||||
|
String title = name + " averaged for "
|
||||||
+ DataHelper.formatDuration(_listener.getRate().getPeriod());
|
+ DataHelper.formatDuration(_listener.getRate().getPeriod());
|
||||||
if (!hideTitle)
|
if (!hideTitle)
|
||||||
def.setTitle(title);
|
def.setTitle(title);
|
||||||
@ -233,7 +236,7 @@ class SummaryRenderer {
|
|||||||
data = graph.getPNGBytes();
|
data = graph.getPNGBytes();
|
||||||
else
|
else
|
||||||
data = graph.getPNGBytes(width, height);
|
data = graph.getPNGBytes(width, height);
|
||||||
long timeToPlot = System.currentTimeMillis() - begin;
|
//long timeToPlot = System.currentTimeMillis() - begin;
|
||||||
out.write(data);
|
out.write(data);
|
||||||
//File t = File.createTempFile("jrobinData", ".xml");
|
//File t = File.createTempFile("jrobinData", ".xml");
|
||||||
//_listener.getData().dumpXml(new FileOutputStream(t));
|
//_listener.getData().dumpXml(new FileOutputStream(t));
|
||||||
@ -245,6 +248,9 @@ class SummaryRenderer {
|
|||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
_log.error("Error rendering", ioe);
|
_log.error("Error rendering", ioe);
|
||||||
throw ioe;
|
throw ioe;
|
||||||
|
} catch (OutOfMemoryError oom) {
|
||||||
|
_log.error("Error rendering", oom);
|
||||||
|
throw new IOException("Error plotting: " + oom.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -184,6 +184,7 @@ public class Rate {
|
|||||||
private static final int SLACK = 2000;
|
private static final int SLACK = 2000;
|
||||||
public void coalesce() {
|
public void coalesce() {
|
||||||
long now = now();
|
long now = now();
|
||||||
|
double correctedTotalValue; // for summaryListener which divides by rounded EventCount
|
||||||
synchronized (_lock) {
|
synchronized (_lock) {
|
||||||
long measuredPeriod = now - _lastCoalesceDate;
|
long measuredPeriod = now - _lastCoalesceDate;
|
||||||
if (measuredPeriod < _period - SLACK) {
|
if (measuredPeriod < _period - SLACK) {
|
||||||
@ -198,9 +199,11 @@ public class Rate {
|
|||||||
// how much were we off by? (so that we can sample down the measured values)
|
// how much were we off by? (so that we can sample down the measured values)
|
||||||
double periodFactor = measuredPeriod / (double)_period;
|
double periodFactor = measuredPeriod / (double)_period;
|
||||||
_lastTotalValue = _currentTotalValue / periodFactor;
|
_lastTotalValue = _currentTotalValue / periodFactor;
|
||||||
_lastEventCount = (long) ( (_currentEventCount + periodFactor - 1) / periodFactor);
|
_lastEventCount = (long) (0.499999 + (_currentEventCount / periodFactor));
|
||||||
_lastTotalEventTime = (long) (_currentTotalEventTime / periodFactor);
|
_lastTotalEventTime = (long) (_currentTotalEventTime / periodFactor);
|
||||||
_lastCoalesceDate = now;
|
_lastCoalesceDate = now;
|
||||||
|
correctedTotalValue = _currentTotalValue *
|
||||||
|
(_lastEventCount / (double) _currentEventCount);
|
||||||
|
|
||||||
if (_lastTotalValue > _extremeTotalValue) {
|
if (_lastTotalValue > _extremeTotalValue) {
|
||||||
_extremeTotalValue = _lastTotalValue;
|
_extremeTotalValue = _lastTotalValue;
|
||||||
@ -213,7 +216,7 @@ public class Rate {
|
|||||||
_currentTotalEventTime = 0;
|
_currentTotalEventTime = 0;
|
||||||
}
|
}
|
||||||
if (_summaryListener != null)
|
if (_summaryListener != null)
|
||||||
_summaryListener.add(_lastTotalValue, _lastEventCount, _lastTotalEventTime, _period);
|
_summaryListener.add(correctedTotalValue, _lastEventCount, _lastTotalEventTime, _period);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSummaryListener(RateSummaryListener listener) { _summaryListener = listener; }
|
public void setSummaryListener(RateSummaryListener listener) { _summaryListener = listener; }
|
||||||
|
10
history.txt
10
history.txt
@ -1,4 +1,12 @@
|
|||||||
$Id: history.txt,v 1.573 2007-07-07 15:03:52 zzz Exp $
|
$Id: history.txt,v 1.574 2007-07-09 20:20:38 zzz Exp $
|
||||||
|
|
||||||
|
2007-07-14 zzz
|
||||||
|
* Clean up graphs.jsp - set K=1024 where appropriate,
|
||||||
|
output image sizes in html, catch ooms, other minor tweaks
|
||||||
|
* Fix current event count truncation which fixes graphs with low
|
||||||
|
60-sec event counts displaying high values
|
||||||
|
(bw.* and router.* graphs for example were 1.5x too high)
|
||||||
|
Affects all "events per period" (non-lifetime) counts.
|
||||||
|
|
||||||
2007-07-09 zzz
|
2007-07-09 zzz
|
||||||
* i2psnark: give a better error message for a non-i2p torrent
|
* i2psnark: give a better error message for a non-i2p torrent
|
||||||
|
@ -15,9 +15,9 @@ import net.i2p.CoreVersion;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class RouterVersion {
|
public class RouterVersion {
|
||||||
public final static String ID = "$Revision: 1.508 $ $Date: 2007-07-07 15:03:50 $";
|
public final static String ID = "$Revision: 1.509 $ $Date: 2007-07-09 20:20:37 $";
|
||||||
public final static String VERSION = "0.6.1.28";
|
public final static String VERSION = "0.6.1.28";
|
||||||
public final static long BUILD = 11;
|
public final static long BUILD = 12;
|
||||||
public static void main(String args[]) {
|
public static void main(String args[]) {
|
||||||
System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
|
System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
|
||||||
System.out.println("Router ID: " + RouterVersion.ID);
|
System.out.println("Router ID: " + RouterVersion.ID);
|
||||||
|
Reference in New Issue
Block a user