adding rest call hack for performance measurements
diff --git a/perf-scripts/flow-manager-perf.py b/perf-scripts/flow-manager-perf.py
index 3168f63..4ee6beb 100644
--- a/perf-scripts/flow-manager-perf.py
+++ b/perf-scripts/flow-manager-perf.py
@@ -8,6 +8,7 @@
 import csv
 import os
 import sys
+import re
 from time import sleep, strftime
 from subprocess import Popen, call, check_output, PIPE
 from datetime import datetime
@@ -22,37 +23,88 @@
 
 ONOS_HOME = '..'
 ONOS_LOG = '%s/onos-logs/onos.%s.log' % ( ONOS_HOME, check_output( 'hostname').strip() )
-ONOS_LOG = '/tmp/onos-1.logs/onos.onos-vm.log'
+ONOS_URL = 'http://127.0.0.1:8080/wm/onos/flows/get/%d/json'
+ONOS_LOG = '/tmp/onos-0.logs/onos.onos-vm.log'
 print "ONOS Log File:", ONOS_LOG
 
 PORT = 's1-eth2'
-N = 100
+N = 5
 
 # ----------------- Running the test and output  -------------------------
 
-# 17:43:37.206 [main] ERROR n.o.o.o.f.PerformanceMonitor - Performance Results: {a=0.001ms, b=0.0ms, c=0.0ms} with measurement overhead: 0.022 ms
+class Result(object):
+  def __init__(self, tsharkTime, flowmods, onosTime, overhead, details):
+    self.tsharkTime = tsharkTime
+    self.flowmods = flowmods
+    self.onosTime = onosTime
+    self.overhead = overhead
+    # sorted by start time
+    self.details = sorted(details, key=lambda x: float(x[2]) )
+
+  def __repr__(self):
+    return '%f %f %f %d %s' % (self.tsharkTime, self.onosTime, self.overhead, self.flowmods, self.details)
+
+
+def clearResults():
+  cmd = 'curl %s' % ONOS_URL % -200
+  call( cmd, shell=True )
+  pass
+
+def reportResults():
+  cmd = 'curl %s' % ONOS_URL % -100
+  call( cmd, shell=True )
 
 def test():
   # Start tailing the onos log
   tail = pexpect.spawn( "tail -0f %s" % ONOS_LOG )
+  tshark = pexpect.spawn( 'tshark -i lo -R "of.type == 12 || of.type == 14"' )
+  tshark.expect('Capturing on lo')
+  sleep(1) # wait for tshark to start
 
+  clearResults() # REST call to ONOS
   # Take link down
   call( 'ifconfig %s down' % PORT, shell=True )
 
-  # Wait for performance results in the log
-  tail.expect('Performance Results: \{([^\}]*)\} with measurement overhead: ([\d.]+) ms', timeout=6000)
-  s = tail.match.group(1)
-  overhead = float( tail.match.group(2) )
-  results = dict( re.findall(r'(\w[\w\s]*)=([\d.]+)', s) )
+  # collect openflow packets using tshark
+  count = 0 
+  timeout = 6000
+  start = -1
+  end = -1
+  while True:
+    i = tshark.expect( ['(\d+\.\d+)', pexpect.TIMEOUT], timeout=timeout )
+    if i == 1:
+      break
+    time = float(tshark.match.group(1))
+    if start == -1:
+      start = time
+    if time > end:
+      end = time
+    i = tshark.expect( ['Port Status', 'Flow Mod'] )
+    if i == 1:
+      count += 1
+      timeout = 3 #sec
+  elapsed = (end - start) * 1000
 
+  # read the performance results from ONOS
+  reportResults() # REST call
+
+  # Wait for performance results in the log
+  tail.expect('Performance Results: \(avg/start/stop/count\)', timeout=10)
+  i = tail.expect('TotalTime:([\d\.]+)/Overhead:([\d\.]+)')
+  totalTime = float(tail.match.group(1))
+  overhead = float(tail.match.group(2))
+  tags = re.findall( r'([\w\.]+)=([\d\.]+)/([\d\.]+)/([\d\.]+)/(\d+)', tail.before )
+  result = Result(elapsed, count, totalTime, overhead, tags)
   # Output results
-  print "* Results:", results, "Overhead:", overhead
- 
+  print result
+
+
   # Bring port back up
   call( 'ifconfig %s up' % PORT, shell=True )
 
   tail.terminate()
-  return results
+  tshark.terminate()
+  return []
 
 def outputResults(filename, results):
   with open(filename, 'a') as csvfile:
@@ -65,10 +117,12 @@
   start = datetime.now()
   for i in range(n):
     results = test()
-    outputResults(filename, results)
+    #outputResults(filename, results)
+    sys.stdout.write('$')
+    sys.stdout.flush()
+    sleep(5) # sleep for 5 seconds between tests
     sys.stdout.write('.')
     sys.stdout.flush()
-    sleep(5000) # sleep for 5 seconds between tests
   totalTime = datetime.now() - start
   print '\nExperiments complete in %s (h:m:s.s)' % totalTime
 
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowEventHandler.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowEventHandler.java
index cca1390..662e81b 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowEventHandler.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowEventHandler.java
@@ -402,8 +402,8 @@
 //	    PerformanceMonitor.report("EventHandler.WriteFlowsToDb");
 //	    PerformanceMonitor.report("EventHandler.NotificationSend.FlowEntryRemoved");
 //	    PerformanceMonitor.report("EventHandler.ProcessAllEvents");
-	    PerformanceMonitor.report();
-	    PerformanceMonitor.clear();
+//	    PerformanceMonitor.report();
+//	    PerformanceMonitor.clear();
 
 	    return;
 	}
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java
index 78a3a6e..5651f73 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java
@@ -39,7 +39,6 @@
 import net.onrc.onos.ofcontroller.util.serializers.KryoFactory;
 
 import com.thinkaurelius.titan.core.TitanException;
-
 import com.esotericsoftware.kryo2.Kryo;
 
 import org.slf4j.Logger;
@@ -328,6 +327,16 @@
      */
     @Override
     public FlowPath getFlow(FlowId flowId) {
+	log.debug("FlowID: {}", flowId);
+	if(flowId.value() == -100) {
+	    log.debug("Printing results...");
+	    PerformanceMonitor.report();
+	    PerformanceMonitor.clear();
+	}
+	else if(flowId.value() == -200) {
+	    log.debug("Clearing results...");
+	    PerformanceMonitor.clear();
+	}
 	return FlowDatabaseOperation.getFlow(dbHandlerApi, flowId);
     }
 
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/PerformanceMonitor.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/PerformanceMonitor.java
index f265684..7c38a3c 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/PerformanceMonitor.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/PerformanceMonitor.java
@@ -80,6 +80,11 @@
      */
     public static void report() {
 	String result = "Performance Results: (avg/start/stop/count)\n";
+	if(map.size() == 0) {
+	    result += "No Measurements";
+	    log.error(result);
+	    return;
+	}
 	long experimentEnd = -1;
 	for(Entry<String, List<Measurement>> e : map.entrySet()) {
 	    String key = e.getKey();
@@ -132,10 +137,10 @@
 	//TODO: fix this;
 	Measurement m = list.get(0);
 	if (m != null) {
-	    log.error("Performance Results: tag = {} start = {} stop = {} elapsed = {}",
+	    log.error("Performance Result: tag = {} start = {} stop = {} elapsed = {}",
 		      tag, m.start, m.stop, m.toString());
 	} else {
-	    log.error("Performance Results: unknown tag {}", tag);
+	    log.error("Performance Result: unknown tag {}", tag);
 	}
     }
 
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/GetFlowByIdResource.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/GetFlowByIdResource.java
index 1cbeece..de625d7 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/GetFlowByIdResource.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/web/GetFlowByIdResource.java
@@ -1,6 +1,7 @@
 package net.onrc.onos.ofcontroller.flowmanager.web;
 
 import net.onrc.onos.ofcontroller.flowmanager.IFlowService;
+import net.onrc.onos.ofcontroller.flowmanager.PerformanceMonitor;
 import net.onrc.onos.ofcontroller.util.FlowId;
 import net.onrc.onos.ofcontroller.util.FlowPath;