diff --git a/web/js/controller-status.js b/web/js/controller-status.js
new file mode 100644
index 0000000..509b344
--- /dev/null
+++ b/web/js/controller-status.js
@@ -0,0 +1,145 @@
+function controller_status(data_source){
+/*    var data = [{name:'onos9vpc',  onos: 1, cassandra: 1},
+		{name:'onos10vpc', onos: 0, cassandra: 1},
+		{name:'onos11vpc', onos: 1, cassandra: 1},
+		{name:'onos12vpc', onos: 0, cassandra: 1}] */
+
+    var barWidth = 100;
+    var width = (barWidth + 10) * 4
+    var height = 50;
+
+
+    var Servers = d3.select("#servers").
+	append("svg:svg").
+	attr("width", 800).
+	attr("height", 30);
+
+    var ContStatus = d3.select("#onos-status").
+	append("svg:svg").
+	attr("width", 800).
+	attr("height", 50);
+
+    var CassandraStatus = d3.select("#cassandra-status").
+	append("svg:svg").
+	attr("width", 800).
+	attr("height", 50);
+
+    d3.json(data_source, draw);
+
+    function draw(json){
+//	var data = json.data;
+	var data = json;
+	var server = Servers.selectAll("text").data(data);
+	var controller_rect = ContStatus.selectAll("rect").data(data);
+	var controller_text = ContStatus.selectAll("text").data(data);
+	var cassandra_rect = CassandraStatus.selectAll("rect").data(data);
+	var cassandra_text = CassandraStatus.selectAll("text").data(data);
+
+	var x = d3.scale.linear().domain([0, data.length]).range([0, width]);
+	var y = d3.scale.linear().domain([0, d3.max(data, function(datum) { return datum.onos; })]).rangeRound([0, height]);
+	var y2 = d3.scale.linear().domain([0, d3.max(data, function(datum) { return datum.cassandra; })]).rangeRound([0, height]);
+
+	console.log(data)
+	server.
+	    enter().
+	    append("svg:text").
+	    attr("x", function(datum, index) { return x(index); }).
+	    attr("y", function(datum) { return 20; }).
+	    text(function(datum) { return datum.name; });
+
+	controller_rect.
+	    enter().
+	    append("svg:rect").
+	    attr("x", function(datum, index) { return x(index); }).
+	    attr("y", function(datum) { return height - y(datum.onos); }).
+	    attr("height", function(datum) { return y(datum.onos); }).
+	    attr("width", barWidth).
+	    attr("fill", "#2d578b");
+
+	controller_text.
+	    enter().
+	    append("svg:text").
+	    text(function(){return "ONOS"}).
+	    attr("x", function(datum, index) { return x(index)+10; }).
+	    attr("y", function(datum) { return 30 ; }).
+	    attr("height", function(datum) { return y(datum.onos); }).
+	    attr("width", barWidth).
+	    attr('fill', 'white'); 
+
+	cassandra_rect.
+	    enter().
+	    append("svg:rect").
+	    attr("x", function(datum, index) { return x(index); }).
+	    attr("y", function(datum) { return height - y2(datum.cassandra); }).
+	    attr("height", function(datum) { return y2(datum.cassandra); }).
+	    attr("width", barWidth).
+	    attr("fill", "#aa0000");
+
+	cassandra_text.
+	    enter().
+	    append("svg:text").
+	    text(function(){return "Cassandra"}).
+	    attr("x", function(datum, index) { return x(index); }).
+	    attr("y", function(datum) { return 30 ; }).
+	    attr("height", function(datum) { return y(datum.onos); }).
+	    attr("width", barWidth).
+	    attr('fill', 'white'); 
+
+	controller_rect.
+	    attr("x", function(datum, index) { return x(index); }).
+	    attr("y", function(datum) { return height - y(datum.onos); }).
+	    attr("height", function(datum) { return y(datum.onos); }).
+	    attr("width", barWidth).
+	    attr("fill", "#2d578b");
+
+	controller_text.
+	    text(function(){return "ONOS"}).
+	    attr("x", function(datum, index) { return x(index)+10; }).
+	    attr("y", function(datum) { return 30 ; }).
+	    attr("height", function(datum) { return y(datum.onos); }).
+	    attr("width", barWidth).
+	    attr('fill', 'white'); 
+
+	cassandra_rect.
+	    attr("x", function(datum, index) { return x(index); }).
+	    attr("y", function(datum) { return height - y2(datum.cassandra); }).
+	    attr("height", function(datum) { return y2(datum.cassandra); }).
+	    attr("width", barWidth).
+	    attr("fill", "#aa0000");
+
+	cassandra_text.
+	    text(function(){return "Cassandra"}).
+	    attr("x", function(datum, index) { return x(index); }).
+	    attr("y", function(datum) { return 30 ; }).
+	    attr("height", function(datum) { return y(datum.cassandra); }).
+	    attr("width", barWidth).
+	    attr('fill', 'white'); 
+
+
+	server.exit().remove();
+	controller_rect.exit().remove();
+	controller_text.exit().remove();
+	cassandra_rect.exit().remove();
+	cassandra_text.exit().remove();
+    }
+    $("#more").click( function() {
+        $.ajax({
+	    url: 'http://gui.onlab.us:8080/controller_status1',
+	    success: function(json) {
+		draw(json);
+	    },
+	    dataType: "json"
+        });
+    });
+    $("#less").click( function() {
+        $.ajax({
+	    url: 'http://gui.onlab.us:8080/controller_status2',
+	    success: function(json) {
+		draw(json);
+	    },
+	    dataType: "json"
+        });
+    });
+
+}
+
