forked from I2P_Developers/i2p.i2p

(while i want to spend another few days on it, there are more pressing things and this will meet my needs for testnet). the engine works as before, and the gui now actually plots out and follows the chart over time. The gui does have a lot of things left to be done before it can be adopted by joe sixpack - * load/store the URLs being monitored so you don't have to reenter them on each startup * clear out the x axis on refetch (now it just keeps growing, which is good and bad) * adjustable refresh rate * implement snapshots (saving all the current state files to a dir, and allowing that dir to be loaded all at once) * beautification (override the colors, etc) the net.i2p.heartbeat.** code is all public domain, BUT net.i2p.heartbeat.gui.JFreeChart* classes depend on the LGPL'ed jfreechart code, which in turn depends on apache licensed code (log4j). for the time being, this code doesn't include the jfreechart code (and dependencies), but the ant task in apps/heartbeat/java 'fetchJfreechart' downloads it and places it under apps/heartbeat/java/lib, after which you can build the GUI by running the ant task 'buildGUI' (buildGUI / etc are NOT in the standard build process). once we figure out all the details to comply with the requirements of log4j's license we'll do so. but for now, the above works.
63 lines
1.9 KiB
Java
63 lines
1.9 KiB
Java
package net.i2p.heartbeat.gui;
|
|
|
|
import java.awt.Color;
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.IOException;
|
|
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JTextArea;
|
|
|
|
import net.i2p.heartbeat.PeerDataWriter;
|
|
import net.i2p.util.Log;
|
|
|
|
/**
|
|
* Render the graph and legend
|
|
*/
|
|
class HeartbeatPlotPane extends JPanel {
|
|
private final static Log _log = new Log(HeartbeatPlotPane.class);
|
|
protected HeartbeatMonitorGUI _gui;
|
|
private JTextArea _text;
|
|
|
|
/**
|
|
* Constructs the plot pane
|
|
* @param gui the gui the pane is attached to
|
|
*/
|
|
public HeartbeatPlotPane(HeartbeatMonitorGUI gui) {
|
|
_gui = gui;
|
|
initializeComponents();
|
|
}
|
|
|
|
/**
|
|
* Callback: when things change . . .
|
|
*/
|
|
public void stateUpdated() {
|
|
StringBuffer buf = new StringBuffer(32*1024);
|
|
PeerDataWriter writer = new PeerDataWriter();
|
|
|
|
for (int i = 0; i < _gui.getMonitor().getState().getTestCount(); i++) {
|
|
StaticPeerData data = _gui.getMonitor().getState().getTest(i).getCurrentData();
|
|
ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
|
|
try {
|
|
writer.persist(data, baos);
|
|
} catch (IOException ioe) {
|
|
_log.error("wtf, error writing to a byte array?", ioe);
|
|
}
|
|
buf.append(new String(baos.toByteArray())).append("\n\n\n");
|
|
}
|
|
|
|
_text.setText(buf.toString());
|
|
}
|
|
|
|
protected void initializeComponents() {
|
|
setBackground(_gui.getBackground());
|
|
//Dimension size = new Dimension(800, 600);
|
|
_text = new JTextArea("",30,80); // 16, 60);
|
|
_text.setAutoscrolls(true);
|
|
_text.setEditable(false);
|
|
// _text.setLineWrap(true);
|
|
// add(new JScrollPane(_text));
|
|
add(_text);
|
|
// add(new JScrollPane(_text, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS));
|
|
// setPreferredSize(size);
|
|
}
|
|
} |