Merge branch 'master' of github.com:OPENNETWORKINGLAB/ONOS
diff --git a/web/js/controller-status.js b/web/js/controller-status.js
index 75cc5cc..1cca38f 100644
--- a/web/js/controller-status.js
+++ b/web/js/controller-status.js
@@ -24,6 +24,15 @@
attr("height", 50);
d3.json(data_source, draw);
+ setInterval(function() {
+ $.ajax({
+ url: data_source,
+ success: function(json) {
+ draw(json)
+ },
+ dataType: "json"
+ });
+ }, 5000);
function draw(json){
// var data = json.data;
@@ -159,15 +168,6 @@
cassandra_rect.exit().remove();
cassandra_text.exit().remove();
- setInterval(function() {
- $.ajax({
- url: data_source,
- success: function(json) {
- draw(json)
- },
- dataType: "json"
- });
- }, 3000);
}
/*
$("#more").click( function() {
diff --git a/web/js/onos-topology-route.js b/web/js/onos-topology-route.js
index 3b13b9c..cca644b 100644
--- a/web/js/onos-topology-route.js
+++ b/web/js/onos-topology-route.js
@@ -374,8 +374,7 @@
return "M" + d.source.x + "," + d.source.y + "A" + dr + "," + dr + " 0 0,1 " + d.target.x + "," + d.target.y;
});
- path
- .attr("stroke", function(d) {
+ path.attr("stroke", function(d) {
if(d.type == 1){
return "red"
} else {
diff --git a/web/js/onos-topology.js b/web/js/onos-topology.js
index 8573f7c..062d37b 100644
--- a/web/js/onos-topology.js
+++ b/web/js/onos-topology.js
@@ -208,23 +208,50 @@
}
}
}
+ for (var i = 0; i < links.length; i++) {
+ for (var j = 0; j < json.links.length; j++) {
+ if (links[i].target.name == json.nodes[json.links[j].target].name &&
+ links[i].source.name == json.nodes[json.links[j].source].name ){
+ if (links[i].type != json.links[j].type){
+ links[i].type = json.links[j].type;
+ changed = true;
+ }
+ }
+ }
+ }
return changed
}
function draw(force, path, circle, text){
force.stop();
path.enter().append("svg:path")
- .attr("class", function(d) { return "link"; });
+ .attr("class", function(d) { return "link"; })
+ .attr("marker-end", function(d) {
+ if(d.type == 1){
+ return "url(#TriangleRed)";
+ } else {
+ return "url(#Triangle)";
+ }
+ });
circle.enter().append("svg:circle")
- .attr("r", radius)
+ .attr("r", function(d) {
+ if (d.group == 1000){
+ return radius/2;
+ }else{
+ return radius;
+ }
+ })
.call(node_drag);
// .call(force.drag);
text.enter().append("svg:text")
.attr("x", radius)
.attr("y", ".31em")
- .text(function(d) { return d.name.split(":")[5] + d.name.split(":")[6] + d.name.split(":")[7] });
+ .text(function(d) {
+ l=d.name.split(":").length
+ return d.name.split(":")[l-3] + ":" + d.name.split(":")[l-2] + ":" + d.name.split(":")[l-1]
+ });
circle.append("title")
.text(function(d) { return d.name; });
@@ -234,6 +261,7 @@
else if (d.group == 2){return "blue";}
else if (d.group == 3){return "green";}
else if (d.group == 4){return "orange";}
+ else if (d.group == 1000){return "black";}
else{ return "gray"; }
});
@@ -245,7 +273,7 @@
}
}).attr("stroke-width", function(d) {
if(d.type == 1){
- return "4px";
+ return "2px";
} else {
return "1.5px";
}
@@ -271,13 +299,13 @@
var changed = cdiff(json);
console.log("changed? " + changed);
+ path = svg.selectAll("path").data(links)
+ circle = svg.selectAll("circle").data(nodes);
+ text = svg.selectAll("text").data(nodes);
+ console.log(path)
if (changed){
- path = svg.selectAll("path").data(links)
- circle = svg.selectAll("circle").data(nodes);
- text = svg.selectAll("text").data(nodes);
-
draw(force, path, circle, text);
}
}
@@ -299,8 +327,6 @@
});
}, 3000);
}
-
-
function tick() {
path.attr("d", function(d) {
var dx = d.target.x - d.source.x,
@@ -309,6 +335,26 @@
dr = 0; // 0 for direct line
return "M" + d.source.x + "," + d.source.y + "A" + dr + "," + dr + " 0 0,1 " + d.target.x + "," + d.target.y;
});
+ path.attr("stroke", function(d) {
+ if(d.type == 1){
+ return "red"
+ } else {
+ return "black"
+ }
+ }).attr("stroke-width", function(d) {
+ if(d.type == 1){
+ return "3px";
+ } else {
+ return "1.5px";
+ }
+ }).attr("marker-end", function(d) {
+ if(d.type == 1){
+ return "url(#TriangleRed)";
+ } else {
+ return "url(#Triangle)";
+ }
+ });
+
// circle.attr("cx", function(d) { return d.x; }).attr("cy", function(d) { return d.y; });
circle.attr("transform", function(d) {
x = Math.max(radius, Math.min(width - radius, d.x));
@@ -322,6 +368,7 @@
else if (d.group == 2){return "blue";}
else if (d.group == 3){return "green";}
else if (d.group == 4){return "orange";}
+ else if (d.group == 1000){return "black";}
else{ return "gray"; }
});
// text.attr("x", function(d) { return d.x; }).attr("y", function(d) { return d.y; });
diff --git a/web/onos-topology-route.html b/web/onos-topology-route.html
index 860a096..6c167c7 100644
--- a/web/onos-topology-route.html
+++ b/web/onos-topology-route.html
@@ -42,7 +42,7 @@
</marker>
</defs>
<script type="text/javascript">
-gui("http://onosnat.onlab.us:8080/wm/topology/toporoute/00:00:00:00:00:a1/2/00:00:00:00:00:c1/3/json");
+gui("http://onosnat.onlab.us:8080/wm/topology/toporoute/00:00:00:0d:00:d1/2/00:00:00:0d:00:d3/3/json");
</script>
</svg>
</body>
diff --git a/web/onos-topology.html b/web/onos-topology.html
index b0614c9..9d90ea4 100644
--- a/web/onos-topology.html
+++ b/web/onos-topology.html
@@ -2,11 +2,6 @@
<html>
<meta charset="utf-8">
<style>
-path.link {
- fill: none;
- stroke: #666;
- stroke-width: 1.5px;
-}
circle {
stroke: #333;
stroke-width: 1.5px;
@@ -40,6 +35,13 @@
orient="auto">
<path d="M0,-5L10,0L0,5"/>
</marker>
+ <marker id="TriangleRed"
+ viewBox="0 -5 10 10" refX="10" refY="-0.2"
+ markerUnits="strokeWidth"
+ markerWidth="6" markerHeight="6"
+ orient="auto">
+ <path d="M0,-5L10,0L0,5" fill="red" stroke="red"/>
+ </marker>
</defs>
<h1>ONOS Sprint 4 Demo GUI</h1>
<h2>Controller Status</h2>
diff --git a/web/topology_rest.py b/web/topology_rest.py
index 5eaed03..b109ccc 100755
--- a/web/topology_rest.py
+++ b/web/topology_rest.py
@@ -114,6 +114,7 @@
topo = {}
switches = []
links = []
+ devices = []
for v in parsedResult:
if v.has_key('dpid'):
@@ -123,19 +124,45 @@
sw = {}
sw['name']=dpid
sw['group']= -1
- if state == "ACTIVE":
- if dpid.split(":")[5] == "0a":
- sw['group']=1
- if dpid.split(":")[5] == "0b":
- sw['group']=2
- if dpid.split(":")[5] == "0c":
- sw['group']=3
- if dpid.split(":")[5] == "0d":
- sw['group']=4
+
+# if state == "ACTIVE":
+# if dpid.split(":")[5] == "0a":
+# sw['group']=1
+# if dpid.split(":")[5] == "0b":
+# sw['group']=2
+# if dpid.split(":")[5] == "0c":
+# sw['group']=3
+# if dpid.split(":")[5] == "0d":
+# sw['group']=4
if state == "INACTIVE":
sw['group']=0
switches.append(sw)
+## Comment in if we need devies
+# sw_index = len(switches) - 1
+# for p in v['ports']:
+# for d in p['devices']:
+# device = {}
+# device['attached_switch']=dpid
+# device['name']=d['mac']
+# if d['state'] == "ACTIVE":
+# device['group']=1000
+# else:
+# device['group']=1001
+#
+# switches.append(device)
+# device_index = len (switches) -1
+# link = {}
+# link['source'] = device_index
+# link['target'] = sw_index
+# link['type'] = -1
+# links.append(link)
+# link = {}
+# link['source'] = sw_index
+# link['target'] = device_index
+# link['type'] = -1
+# links.append(link)
+
# try:
# command = "curl -s \'http://%s:%s/wm/registry/controllers/json\'" % (RestIP, RestPort)
# result = os.popen(command).read()
@@ -162,23 +189,26 @@
try:
v1 = "00:00:00:00:00:0a:0d:00"
+# v1 = "00:00:00:00:00:0d:00:d1"
p1=1
v2 = "00:00:00:00:00:0b:0d:03"
- p1=2
+# v2 = "00:00:00:00:00:0d:00:d3"
+ p2=1
command = "curl -s http://%s:%s/wm/topology/route/%s/%s/%s/%s/json" % (RestIP, RestPort, v1, p1, v2, p2)
result = os.popen(command).read()
parsedResult = json.loads(result)
except:
log_error("No route")
- parsedResult = []
+ parsedResult = {}
- path = [];
- for i, v in enumerate(parsedResult):
- if i < len(parsedResult) - 1:
- sdpid= parsedResult[i]['switch']
- ddpid = parsedResult[i+1]['switch']
- path.append( (sdpid, ddpid))
-
+ path = []
+ if parsedResult.has_key('flowEntries'):
+ flowEntries= parsedResult['flowEntries']
+ for i, v in enumerate(flowEntries):
+ if i < len(flowEntries) - 1:
+ sdpid= flowEntries[i]['dpid']['value']
+ ddpid = flowEntries[i+1]['dpid']['value']
+ path.append( (sdpid, ddpid))
try:
command = "curl -s \'http://%s:%s/wm/core/topology/links/json\'" % (RestIP, RestPort)
@@ -212,12 +242,11 @@
topo['nodes'] = switches
topo['links'] = links
-# pp.pprint(topo)
+ pp.pprint(topo)
js = json.dumps(topo)
resp = Response(js, status=200, mimetype='application/json')
return resp
-
#@app.route("/wm/topology/toporoute/00:00:00:00:00:a1/2/00:00:00:00:00:c1/3/json")
#@app.route("/wm/topology/toporoute/<srcdpid>/<srcport>/<destdpid>/<destport>/json")
@app.route("/wm/topology/toporoute/<v1>/<p1>/<v2>/<p2>/json")