Files
i2p.i2p/apps/heartbeat/java/src/net/i2p/heartbeat/gui/HeartbeatPlotPane.java
jrandom 33782859b8 the heartbeat engine and gui are good 'nuff for now
(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.
2004-04-13 03:24:04 +00:00

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);
}
}