mirror of
https://github.com/webmin/webmin.git
synced 2025-07-21 23:40:34 +00:00
140 lines
3.0 KiB
Java
140 lines
3.0 KiB
Java
import java.awt.*;
|
|
import java.net.*;
|
|
import java.io.*;
|
|
import java.util.*;
|
|
import java.applet.*;
|
|
|
|
public class Tracer extends Applet implements Runnable,CbButtonCallback
|
|
{
|
|
MultiColumn log;
|
|
StringBuffer logbuffer = new StringBuffer();
|
|
LineInputStream is;
|
|
Thread th;
|
|
CbButton pause, button;
|
|
boolean paused = false;
|
|
int MAX_ROWS = 1000;
|
|
Vector buffer = new Vector();
|
|
|
|
public void init()
|
|
{
|
|
// Create the UI
|
|
setLayout(new BorderLayout());
|
|
String cols[] = { "Time", "System Call", "Parameters", "Return" };
|
|
add("Center", log = new MultiColumn(cols));
|
|
float widths[] = { .1f, .15f, .65f, .1f };
|
|
log.setWidths(widths);
|
|
Util.setFont(new Font("TimesRoman", Font.PLAIN, 12));
|
|
Panel bot = new Panel();
|
|
bot.setBackground(Color.white);
|
|
bot.setForeground(Color.white);
|
|
bot.setLayout(new FlowLayout(FlowLayout.RIGHT));
|
|
bot.add(pause = new CbButton(" Pause ", this));
|
|
add("South", bot);
|
|
}
|
|
|
|
public void start()
|
|
{
|
|
// Start download thread
|
|
log.clear();
|
|
th = new Thread(this);
|
|
th.start();
|
|
}
|
|
|
|
public void stop()
|
|
{
|
|
// Stop download
|
|
try {
|
|
String killurl = getParameter("killurl");
|
|
if (killurl != null) {
|
|
// Call this CGI at stop time
|
|
try {
|
|
URL u = new URL(getDocumentBase(), killurl);
|
|
URLConnection uc = u.openConnection();
|
|
String session = getParameter("session");
|
|
if (session != null)
|
|
uc.setRequestProperty("Cookie", session);
|
|
uc.getInputStream().close();
|
|
}
|
|
catch(Exception e2) { }
|
|
}
|
|
if (is != null) is.close();
|
|
if (th != null) th.stop();
|
|
}
|
|
catch(Exception e) {
|
|
// ignore it
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public void run()
|
|
{
|
|
try {
|
|
URL u = new URL(getDocumentBase(), getParameter("url"));
|
|
URLConnection uc = u.openConnection();
|
|
String session = getParameter("session");
|
|
if (session != null)
|
|
uc.setRequestProperty("Cookie", session);
|
|
is = new LineInputStream(uc.getInputStream());
|
|
while(true) {
|
|
StringSplitter tok =
|
|
new StringSplitter(is.gets(), '\t', false);
|
|
if (tok.countTokens() == 4) {
|
|
Object row[] = { tok.nextToken(),
|
|
tok.nextToken(),
|
|
tok.nextToken(),
|
|
tok.nextToken() };
|
|
if (paused) {
|
|
// Store in temp buffer
|
|
buffer.addElement(row);
|
|
if (buffer.size() > MAX_ROWS) {
|
|
buffer.removeElementAt(0);
|
|
}
|
|
}
|
|
else {
|
|
// Add immediately
|
|
log.addItem(row);
|
|
cleanup();
|
|
log.scrollto(log.count()-1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch(EOFException e) {
|
|
// end of file ..
|
|
}
|
|
catch(IOException e) {
|
|
// shouldn't happen!
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
void cleanup()
|
|
{
|
|
while(log.count() > MAX_ROWS) {
|
|
log.deleteItem(0);
|
|
}
|
|
}
|
|
|
|
public void click(CbButton b) {
|
|
if (b == pause) {
|
|
if (paused) {
|
|
// Resume display, and add missed stuff
|
|
pause.setText(" Pause ");
|
|
for(int i=0; i<buffer.size(); i++) {
|
|
Object row[] =
|
|
(Object[])buffer.elementAt(i);
|
|
log.addItem(row);
|
|
}
|
|
cleanup();
|
|
log.scrollto(log.count()-1);
|
|
buffer.removeAllElements();
|
|
} else {
|
|
// Stop display
|
|
pause.setText("Resume");
|
|
}
|
|
paused = !paused;
|
|
}
|
|
}
|
|
}
|
|
|