[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