* Console: Better handling of missing font for graphing (ticket #915)

- Remove unused imports
This commit is contained in:
zzz
2013-04-17 14:45:24 +00:00
parent c61f2af8b3
commit 6af73d087b
2 changed files with 23 additions and 16 deletions

View File

@ -1,23 +1,14 @@
package net.i2p.router.web; package net.i2p.router.web;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.Semaphore; import java.util.concurrent.Semaphore;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import javax.imageio.stream.MemoryCacheImageOutputStream;
import net.i2p.router.RouterContext; import net.i2p.router.RouterContext;
import net.i2p.stat.Rate; import net.i2p.stat.Rate;
import net.i2p.stat.RateStat; import net.i2p.stat.RateStat;
@ -25,18 +16,13 @@ import net.i2p.util.FileUtil;
import net.i2p.util.Log; import net.i2p.util.Log;
import net.i2p.util.SystemVersion; import net.i2p.util.SystemVersion;
import org.jrobin.core.RrdException;
import org.jrobin.graph.RrdGraph;
import org.jrobin.graph.RrdGraphDef;
/** /**
* A thread started by RouterConsoleRunner that * A thread started by RouterConsoleRunner that
* checks the configuration for stats to be tracked via jrobin, * checks the configuration for stats to be tracked via jrobin,
* and adds or deletes RRDs as necessary. * and adds or deletes RRDs as necessary.
* *
* This also contains methods to generate xml or png image output. * This also contains methods to generate xml or png image output.
* The actual png rendering code is here for the special dual-rate graph; * The rendering for graphs is in SummaryRenderer.
* the rendering for standard graphs is in SummaryRenderer.
* *
* To control memory, the number of simultaneous renderings is limited. * To control memory, the number of simultaneous renderings is limited.
* *
@ -47,6 +33,7 @@ public class StatSummarizer implements Runnable {
private final Log _log; private final Log _log;
/** list of SummaryListener instances */ /** list of SummaryListener instances */
private final List<SummaryListener> _listeners; private final List<SummaryListener> _listeners;
// TODO remove static instance
private static StatSummarizer _instance; private static StatSummarizer _instance;
private static final int MAX_CONCURRENT_PNG = 3; private static final int MAX_CONCURRENT_PNG = 3;
private final Semaphore _sem; private final Semaphore _sem;
@ -94,6 +81,18 @@ public class StatSummarizer implements Runnable {
return _instance == null || _instance._isDisabled; return _instance == null || _instance._isDisabled;
} }
/**
* Disable graph generation until restart
* See SummaryRenderer.render()
* @since 0.9.6
*/
static void setDisabled() {
if (_instance != null) {
_instance._isDisabled = true;
_instance._isRunning = false;
}
}
/** list of SummaryListener instances */ /** list of SummaryListener instances */
List<SummaryListener> getListeners() { return _listeners; } List<SummaryListener> getListeners() { return _listeners; }

View File

@ -229,7 +229,15 @@ class SummaryRenderer {
def.setImageFormat("PNG"); def.setImageFormat("PNG");
def.setLazy(true); def.setLazy(true);
RrdGraph graph = new RrdGraph(def); RrdGraph graph;
try {
// NPE here if system is missing fonts - see ticket #915
graph = new RrdGraph(def);
} catch (NullPointerException npe) {
_log.error("Error rendering", npe);
StatSummarizer.setDisabled();
throw new IOException("Error rendering - disabling graph generation. Missing font? See http://trac.i2p2.i2p/ticket/915");
}
int totalWidth = graph.getRrdGraphInfo().getWidth(); int totalWidth = graph.getRrdGraphInfo().getWidth();
int totalHeight = graph.getRrdGraphInfo().getHeight(); int totalHeight = graph.getRrdGraphInfo().getHeight();
BufferedImage img = new BufferedImage(totalWidth, totalHeight, BufferedImage.TYPE_USHORT_565_RGB); BufferedImage img = new BufferedImage(totalWidth, totalHeight, BufferedImage.TYPE_USHORT_565_RGB);