Added rest API to look into the topology events map for debugging

Change-Id: I15f95fa7184bf6e087926c8cbc49db2dd6f65a5a
diff --git a/src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java b/src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java
index 28399c8..a8c3f5b 100755
--- a/src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java
+++ b/src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java
@@ -20,6 +20,7 @@
         router.attach("/add/intents/json", IntentResource.class);
         router.attach("/get/intents/json", IntentResource.class);
         router.attach("/get/intent/{intent_id}/json", IntentResource.class);
+        router.attach("/get/ng-events/json", GetNGEventsResource.class);
         return router;
     }
 
diff --git a/src/main/java/net/onrc/onos/datagrid/web/GetNGEventsResource.java b/src/main/java/net/onrc/onos/datagrid/web/GetNGEventsResource.java
new file mode 100644
index 0000000..20efa68
--- /dev/null
+++ b/src/main/java/net/onrc/onos/datagrid/web/GetNGEventsResource.java
@@ -0,0 +1,41 @@
+package net.onrc.onos.datagrid.web;
+
+import java.util.Collection;
+
+import net.onrc.onos.datagrid.IDatagridService;
+import net.onrc.onos.datagrid.IEventChannel;
+import net.onrc.onos.ofcontroller.networkgraph.TopologyEvent;
+import net.onrc.onos.ofcontroller.networkgraph.TopologyManager;
+
+import org.restlet.resource.Get;
+import org.restlet.resource.ServerResource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class GetNGEventsResource extends ServerResource {
+
+	public static final Logger log = LoggerFactory.getLogger(GetNGEventsResource.class);
+	
+	@Get("json")
+	public String retrieve() {
+		IDatagridService datagridService = 
+				(IDatagridService) getContext().getAttributes().
+				get(IDatagridService.class.getCanonicalName());
+		
+		
+		log.debug("Get network graph events");
+		
+		IEventChannel<byte[], TopologyEvent> channel = datagridService.createChannel(TopologyManager.EVENT_CHANNEL_NAME, 
+				byte[].class, TopologyEvent.class);
+		
+		Collection<TopologyEvent> entries = channel.getAllEntries();
+		
+		String result = "";
+		for (TopologyEvent event : entries) {
+			result += event.toString() + "\n";
+		}
+		
+		return result;
+	}
+
+}
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyManager.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyManager.java
index 315cee7..642a536 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyManager.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyManager.java
@@ -48,7 +48,7 @@
 	    .getLogger(TopologyManager.class);
 
     private IEventChannel<byte[], TopologyEvent> eventChannel;
-    private static final String EVENT_CHANNEL_NAME = "onos.topology";
+    public static final String EVENT_CHANNEL_NAME = "onos.topology";
     private EventHandler eventHandler = new EventHandler();
 
     private final NetworkGraphDatastore datastore;
diff --git a/web/get_datagrid_ngevents.py b/web/get_datagrid_ngevents.py
new file mode 100755
index 0000000..34c3338
--- /dev/null
+++ b/web/get_datagrid_ngevents.py
@@ -0,0 +1,63 @@
+#! /usr/bin/env python
+# -*- Mode: python; py-indent-offset: 4; tab-width: 8; indent-tabs-mode: t; -*-
+
+import pprint
+import os
+import sys
+import subprocess
+import json
+import argparse
+import io
+import time
+
+from flask import Flask, json, Response, render_template, make_response, request
+
+## Global Var ##
+ControllerIP="127.0.0.1"
+ControllerPort=8080
+
+DEBUG=0
+pp = pprint.PrettyPrinter(indent=4)
+
+app = Flask(__name__)
+
+## Worker Functions ##
+def log_error(txt):
+  print '%s' % (txt)
+
+def debug(txt):
+  if DEBUG:
+    print '%s' % (txt)
+
+# @app.route("/wm/onos/datagrid/get/map/<map-name>/json ")
+# Sample output:
+
+def print_datagrid_map(parsedResult):
+  print '%s' % (parsedResult)
+
+def get_datagrid_map():
+  try:
+    command = "curl -s \"http://%s:%s/wm/onos/datagrid/get/ng-events/json\"" % (ControllerIP, ControllerPort)
+    debug("get_datagrid_map %s" % command)
+
+    result = os.popen(command).read()
+    debug("result %s" % result)
+    if len(result) == 0:
+      print "No Map found"
+      return;
+
+    # TODO: For now, the string is not JSON-formatted
+    # parsedResult = json.loads(result)
+    parsedResult = result
+    debug("parsed %s" % parsedResult)
+  except:
+    log_error("Controller IF has issue")
+    exit(1)
+
+  print_datagrid_map(parsedResult)
+
+
+if __name__ == "__main__":
+  
+  # Do the work
+  get_datagrid_map()