[Tinyos-contrib-commits]
CVS: tinyos-1.x/contrib/wustl/tools/java/edu/wustl/mobilab/directory
ResultsCollector.java, NONE, 1.1 ExperimentDataCollector.java,
1.4, 1.5
borndigerati
borndigerati at users.sourceforge.net
Sat Apr 8 04:01:23 PDT 2006
Update of /cvsroot/tinyos/tinyos-1.x/contrib/wustl/tools/java/edu/wustl/mobilab/directory
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19936/edu/wustl/mobilab/directory
Modified Files:
ExperimentDataCollector.java
Added Files:
ResultsCollector.java
Log Message:
--- NEW FILE: ResultsCollector.java ---
package edu.wustl.mobilab.directory;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.util.*;
import java.io.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import edu.wustl.mobilab.agilla.AgillaConstants;
import edu.wustl.mobilab.agilla.messages.*;
import net.tinyos.message.*;
import net.tinyos.packet.BuildSource;
import net.tinyos.util.PrintStreamMessenger;
public class ResultsCollector implements AgillaConstants {
// public static final int AGENT_MOVED = 0;
// public static final int QUERY_ISSUED = 1;
// public static final int QUERY_RESULTS_RECEIVED = 2;
// public static final int SET_CLUSTER_HEAD = 3;
//
// public static final int MAX_NUM_QUERIES = 100; // how many queries to wait for before stopping experiment
private boolean debug;
// private Vector<Mote> motes = new Vector<Mote>();
//private TraceReceiver traceRcvr = new TraceReceiver();
// private int numQs = 0;
// private JFrame frame;
// private JLabel resultCountLabel;
/* public ResultsCollector(int[] ports, boolean debug) {
this.debug = debug;
for (int i = 0; i < ports.length; i++) {
String source = "sf at localhost:" + ports[i];
log("Connecting to " + source);
MoteIF moteIF = new MoteIF(BuildSource.makePhoenix(source, PrintStreamMessenger.err));
Mote mote = new Mote(ports[i], moteIF);
moteIF.registerListener(new AgillaExpLatencyMsg(), mote);
moteIF.registerListener(new AgillaExpResultsMsg(), mote);
moteIF.registerListener(new AgillaTraceMsg(), traceRcvr);
motes.add(mote);
}
createGUI();
}*/
public ResultsCollector(int port, boolean debug) {
this.debug = debug;
String source = "sf at localhost:" + port;
MoteIF moteIF = new MoteIF(BuildSource.makePhoenix(source, PrintStreamMessenger.err));
Mote mote = new Mote(port, moteIF);
moteIF.registerListener(new AgillaExpResultsMsg(), mote);
mote.fetchResults();
System.out.println(mote.toString());
//System.exit(0);
}
/**
* Gather all of the data from the experiment and print them to StdOut.
*/
// private void doFinish() {
// // for each mote, get the number of queries and updates
// int totalNumQueries = 0, totalNumUpdates = 0;
// long totalLatencies = 0, totalLatenciesCount = 0;
//
// // stop receiving trace messages
// for (int i = 0; i < motes.size(); i++) {
// Mote c = motes.get(i);
// c.moteIF.deregisterListener(new AgillaTraceMsg(), traceRcvr);
// }
//
//
// for (int i = 0; i < motes.size(); i++) {
// Mote c = motes.get(i);
// c.fetchResults();
// System.out.println(c);
// totalNumQueries += c.numQueries;
// totalNumUpdates += c.numUpdates;
// totalLatencies += c.totalLatency();
// totalLatenciesCount += c.numLatencies();
// }
//
// System.out.println("-------- Overall Results --------");
// System.out.println("Total Number of Queries: " + totalNumQueries);
// System.out.println("Total Number of Updates: " + totalNumUpdates);
// System.out.println("Average Query Latency = " + (totalLatenciesCount == 0 ? "NaN" : totalLatencies/totalLatenciesCount));
// System.exit(0);
// }
// private void createGUI() {
// JButton button = new JButton("Stop");
// button.addActionListener(new java.awt.event.ActionListener() {
// public void actionPerformed(ActionEvent ae) {
// doFinish();
// }
// });
// frame = new JFrame();
// frame.setTitle("Exp Data Collector");
// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// frame.add(button, java.awt.BorderLayout.CENTER);
// resultCountLabel = new JLabel("0");
// frame.add(resultCountLabel, BorderLayout.SOUTH);
// frame.pack();
// frame.setVisible(true);
// }
// private class TraceReceiver implements MessageListener {
// public TraceReceiver() {
// }
//
// private String convString(int action) {
// switch(action) {
// case AGENT_MOVED:
// return "AGENT_MOVED";
// case QUERY_ISSUED:
// return "QUERY_ISSUED";
// case QUERY_RESULTS_RECEIVED:
// return "QUERY_RESULTS_RECEIVED";
// case SET_CLUSTER_HEAD:
// return "SET_CLUSTER_HEAD";
// }
// return "UNKNOWN";
// }
//
// public void messageReceived(int to, Message m) {
// AgillaTraceMsg trace = (AgillaTraceMsg)m;
// System.out.println("TRACE: " + trace.get_agentID() + " " + trace.get_nodeID() + " "
// + trace.get_timestamp_high32() + "" + trace.get_timestamp_low32() + " "
// + convString(trace.get_action()) + " " + trace.get_success() + " "
// + trace.get_loc_x()+ " " + trace.get_loc_y());
//
// // once MAX_NUM_QUERIES has been performed, stop the experiment
// if (trace.get_action() == QUERY_RESULTS_RECEIVED) {
// if (++numQs == MAX_NUM_QUERIES) {
// frame.setVisible(false);
// doFinish();
// } else
// resultCountLabel.setText("" + numQs);
// }
// }
// }
/**
* Keeps track of the statistics for a single mote.
*
* @author liang
*/
private class Mote implements MessageListener {
int tcpPort;
int numQueries;
int numUpdates;
MoteIF moteIF;
Vector<AgillaExpLatencyMsgJ> latencies = new Vector<AgillaExpLatencyMsgJ>();
Object lock = new Object();
boolean gotResults = false;
FetchResultsTimer timer = null;
public Mote(int tcpPort, MoteIF moteIF) {
this.tcpPort = tcpPort;
this.moteIF = moteIF;
}
public void messageReceived(int to, Message m) {
// if (m instanceof AgillaExpLatencyMsg) {
// AgillaExpLatencyMsg ajm = (AgillaExpLatencyMsg)m;
// AgillaExpLatencyMsgJ msgj = new AgillaExpLatencyMsgJ(ajm);
// //log("Port " + tcpPort + ": Latency " + msgj);
// log("Port " + tcpPort + ": Latency " + ajm.get_latency() + " " + msgj);
// latencies.add(msgj);
// } else
// if (m instanceof AgillaExpResultsMsg) {
synchronized(lock) {
numQueries = ((AgillaExpResultsMsg)m).get_numQueries();
numUpdates = ((AgillaExpResultsMsg)m).get_numUpdates();
log("\tnumQueries = " + numQueries + ", numUpdates = " + numUpdates);
gotResults = true;
if (timer != null) {
timer.kill();
timer = null;
}
lock.notify();
}
// }
}
public void fetchResults() {
gotResults = false;
int numTries = 0;
while (!gotResults && numTries++ < 5) {
try {
synchronized(lock) {
System.out.println("Fetching results from TCP Port " + tcpPort + "...");
moteIF.send(TOS_BCAST_ADDRESS, new AgillaExpQueryResultsMsg());
timer = new FetchResultsTimer(lock);
try {
lock.wait();
} catch(InterruptedException e) {
e.printStackTrace();
}
if (!gotResults)
log("Did not get results, trying again...");
}
} catch(IOException ioe) {
ioe.printStackTrace();
}
}
if (!gotResults) {
System.out.println("Failed to get results from TCP Port " + tcpPort + ".");
numQueries = numUpdates = 0;
}
}
private class FetchResultsTimer implements Runnable {
private static final int FETCH_RESULTS_TIMER = 1000;
private Object lock;
private boolean alive = true;
public FetchResultsTimer(Object lock) {
this.lock = lock;
new Thread(this).start();
}
public void kill() {
synchronized(lock) {
alive = false;
}
}
public void run () {
try {
Thread.sleep(FETCH_RESULTS_TIMER);
} catch(Exception e) {
e.printStackTrace();
}
synchronized(lock) {
if (alive) lock.notify();
}
}
}
public int numLatencies() {
return latencies.size();
}
public long totalLatency() {
long result = 0;
if (latencies.size() == 0)
return 0;
for (int i = 0; i < latencies.size(); i++) {
result += latencies.get(i).latency();
}
return result;
}
public long avgLatency() {
return totalLatency() / numLatencies();
}
public String printLatencies() {
String result = "";
for (int i = 0; i < latencies.size(); i++) {
result += latencies.get(i) + " ";
}
return result;
}
public String toString() {
return "TCP Port " + tcpPort + ", numQueries = " + numQueries + ", numUpdates = " + numUpdates + "\n" + printLatencies();
}
}
private void log(String msg) {
if (debug)
System.out.println("ExpDataCollector: " + msg);
}
/**
* @param args
*/
public static void main(String[] args) {
boolean debug = false;
int port = 0;
if (args.length == 0) {
usage();
System.exit(0);
}
try {
int index = 0;
while (index < args.length) {
String arg = args[index];
if (arg.equals("-h") || arg.equals("--help")) {
usage();
System.exit(0);
} else if (arg.equals("-p")) {
//System.err.println("args length = "+args.length);
index++;
while(index < args.length){
try{
port = Integer.parseInt(args[index]);
//System.err.println("index = " + index + " Port = "+port);
if (port == 0) {
usage();
System.exit(0);
}
try {
new ResultsCollector(port, debug);
} catch(Exception e) {
e.printStackTrace();
}
} catch (NumberFormatException e){
//System.err.println(e);
index--;
break;
}
index++;
}
}else if (arg.equals("-d")) {
debug = true;
} else {
usage();
System.exit(1);
}
index++;
}
} catch (Exception e) {
e.printStackTrace();
}
System.exit(0);
}
private static void usage() {
System.err.println("Usage: ExperimentDataCollector [-h | -d | -p ports]");
System.err.println("\t-h Print this help message");
System.err.println("\t-d Enable Debug mode");
System.err.println("\tports A list of TCP ports to connect to.");
}
}
Index: ExperimentDataCollector.java
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/contrib/wustl/tools/java/edu/wustl/mobilab/directory/ExperimentDataCollector.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** ExperimentDataCollector.java 8 Apr 2006 05:22:41 -0000 1.4
--- ExperimentDataCollector.java 8 Apr 2006 11:01:20 -0000 1.5
***************
*** 1,4 ****
--- 1,5 ----
package edu.wustl.mobilab.directory;
+ import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.util.*;
***************
*** 7,10 ****
--- 8,12 ----
import javax.swing.JButton;
import javax.swing.JFrame;
+ import javax.swing.JLabel;
import edu.wustl.mobilab.agilla.AgillaConstants;
***************
*** 28,31 ****
--- 30,34 ----
private int numQs = 0;
private JFrame frame;
+ private JLabel resultCountLabel;
public ExperimentDataCollector(int[] ports, boolean debug) {
***************
*** 44,47 ****
--- 47,58 ----
createGUI();
}
+
+ /* public ExperimentDataCollector(int port, boolean debug) {
+ this.debug(debug);
+ String source = "sf at localhost:" + ports[i];
+ MoteIF moteIF = new MoteIF(BuildSource.makePhoenix(source), PrintStreamMessenger.err));
+ Mote mote = new Mote(ports[i], moteIF);
+
+ }*/
/**
***************
*** 87,91 ****
frame.setTitle("Exp Data Collector");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
! frame.add(button);
frame.pack();
frame.setVisible(true);
--- 98,104 ----
frame.setTitle("Exp Data Collector");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
! frame.add(button, java.awt.BorderLayout.CENTER);
! resultCountLabel = new JLabel("0");
! frame.add(resultCountLabel, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
***************
*** 122,126 ****
frame.setVisible(false);
doFinish();
! }
}
}
--- 135,140 ----
frame.setVisible(false);
doFinish();
! } else
! resultCountLabel.setText("" + numQs);
}
}
More information about the Tinyos-contrib-commits
mailing list