forked from I2P_Developers/i2p.i2p
108 lines
4.5 KiB
Plaintext
108 lines
4.5 KiB
Plaintext
<%
|
|
/*
|
|
* USE CAUTION WHEN EDITING
|
|
* Trailing whitespace OR NEWLINE on the last line will cause
|
|
* IllegalStateExceptions !!!
|
|
*
|
|
* Do not tag this file for translation.
|
|
*/
|
|
net.i2p.I2PAppContext ctx = net.i2p.I2PAppContext.getGlobalContext();
|
|
net.i2p.router.web.StatSummarizer ss = net.i2p.router.web.StatSummarizer.instance(ctx);
|
|
if (ss == null) {
|
|
response.sendError(403, "Stats disabled");
|
|
return;
|
|
}
|
|
boolean rendered = false;
|
|
/**** unused
|
|
String templateFile = request.getParameter("template");
|
|
if (templateFile != null) {
|
|
java.io.OutputStream cout = response.getOutputStream();
|
|
response.setContentType("image/png");
|
|
rendered = ss.renderPng(cout, templateFile);
|
|
}
|
|
****/
|
|
net.i2p.stat.Rate rate = null;
|
|
String stat = request.getParameter("stat");
|
|
String period = request.getParameter("period");
|
|
boolean fakeBw = (stat != null && ("bw.combined".equals(stat)));
|
|
net.i2p.stat.RateStat rs = null;
|
|
if (stat != null)
|
|
rs = ctx.statManager().getRate(stat);
|
|
if ( !rendered && ((rs != null) || fakeBw) ) {
|
|
long per = -1;
|
|
try {
|
|
if (fakeBw)
|
|
per = 60*1000;
|
|
else
|
|
per = Long.parseLong(period);
|
|
if (!fakeBw)
|
|
rate = rs.getRate(per);
|
|
if ( (rate != null) || (fakeBw) ) {
|
|
if (stat != null &&
|
|
(stat.indexOf('\n') >= 0 || stat.indexOf('\r') >= 0)) {
|
|
response.sendError(403, "param");
|
|
return;
|
|
}
|
|
java.io.OutputStream cout = response.getOutputStream();
|
|
String format = request.getParameter("format");
|
|
response.setHeader("X-Content-Type-Options", "nosniff");
|
|
if ("xml".equals(format)) {
|
|
if (!fakeBw) {
|
|
response.setContentType("text/xml");
|
|
response.setHeader("Content-Disposition", "attachment; filename=\"" + stat + ".xml\"");
|
|
rendered = ss.getXML(rate, cout);
|
|
}
|
|
} else {
|
|
response.setContentType("image/png");
|
|
response.setHeader("Content-Disposition", "inline; filename=\"" + stat + ".png\"");
|
|
// very brief 45 sec expire
|
|
response.setDateHeader("Expires", ctx.clock().now() + (45*1000));
|
|
response.setHeader("Accept-Ranges", "none");
|
|
// http://jira.codehaus.org/browse/JETTY-1346
|
|
// This doesn't actually appear in the response, but it fixes the problem,
|
|
// so Jetty must look for this header and close the connection.
|
|
response.setHeader("Connection", "Close");
|
|
int width = -1;
|
|
int height = -1;
|
|
int periodCount = -1;
|
|
int end = 0;
|
|
String str = request.getParameter("width");
|
|
if (str != null) try { width = Integer.parseInt(str); } catch (NumberFormatException nfe) {}
|
|
str = request.getParameter("height");
|
|
if (str != null) try { height = Integer.parseInt(str); } catch (NumberFormatException nfe) {}
|
|
str = request.getParameter("periodCount");
|
|
if (str != null) try { periodCount = Integer.parseInt(str); } catch (NumberFormatException nfe) {}
|
|
str = request.getParameter("end");
|
|
if (str != null) try { end = Integer.parseInt(str); } catch (NumberFormatException nfe) {}
|
|
boolean hideLegend = Boolean.parseBoolean(request.getParameter("hideLegend"));
|
|
boolean hideGrid = Boolean.parseBoolean(request.getParameter("hideGrid"));
|
|
boolean hideTitle = Boolean.parseBoolean(request.getParameter("hideTitle"));
|
|
boolean showEvents = Boolean.parseBoolean(request.getParameter("showEvents"));
|
|
boolean showCredit = false;
|
|
if (request.getParameter("showCredit") != null)
|
|
showCredit = Boolean.parseBoolean(request.getParameter("showCredit"));
|
|
if (fakeBw)
|
|
rendered = ss.renderRatePng(cout, width, height, hideLegend, hideGrid, hideTitle, showEvents, periodCount, end, showCredit);
|
|
else
|
|
rendered = ss.renderPng(rate, cout, width, height, hideLegend, hideGrid, hideTitle, showEvents, periodCount, end, showCredit);
|
|
}
|
|
if (rendered)
|
|
cout.close();
|
|
//System.out.println("Rendered period " + per + " for the stat " + stat + "? " + rendered);
|
|
}
|
|
} catch (NumberFormatException nfe) {}
|
|
}
|
|
/*
|
|
* Send a 403 instead of a 404, because the server sends error.jsp
|
|
* for 404 errors, complete with the summary bar, which would be
|
|
* a huge load for a page full of graphs if there's a problem
|
|
*/
|
|
if (!rendered) {
|
|
if (stat != null) {
|
|
stat = net.i2p.data.DataHelper.stripHTML(stat);
|
|
response.sendError(403, "The stat " + stat + " is not available, it must be enabled for graphing on the stats configuration page.");
|
|
} else {
|
|
response.sendError(403, "No stat specified");
|
|
}
|
|
}
|
|
%> |