Skip to content
Snippets Groups Projects
Commit 38813c7a authored by Wes Felter's avatar Wes Felter
Browse files

UI: Display port state (up/down) and speed.

Display port name (ethN, brN, etc.) for OVS ports.
Cleaned up some more formatting.
parent d54dfe22
Branches master
No related tags found
No related merge requests found
...@@ -16,17 +16,18 @@ ...@@ -16,17 +16,18 @@
window.Port = Backbone.Model.extend({ window.Port = Backbone.Model.extend({
defaults: { defaults: {
receiveBytes: 0, name: '',
receivePackets: 0, receiveBytes: 0,
transmitBytes: 0, receivePackets: 0,
transmitPackets: 0, transmitBytes: 0,
dropped: 0, transmitPackets: 0,
errors: 0, dropped: 0,
}, errors: 0,
},
initialize:function () { initialize:function () {
// TODO hook up associated hosts // TODO hook up associated hosts
} }
}); });
......
...@@ -49,50 +49,104 @@ window.Switch = Backbone.Model.extend({ ...@@ -49,50 +49,104 @@ window.Switch = Backbone.Model.extend({
dataType:"json", dataType:"json",
success:function (data) { success:function (data) {
//console.log("fetched switch " + self.id + " aggregate"); //console.log("fetched switch " + self.id + " aggregate");
//console.log(data[self.id][0]); //console.log(data[self.id][0]);
self.set(data[self.id][0]); self.set(data[self.id][0]);
} }
}); });
self.trigger('add'); self.trigger('add');
this.ports = new PortCollection(); this.ports = new PortCollection();
this.flows = new FlowCollection(); this.flows = new FlowCollection();
this.loadPorts(); //this.loadPorts();
this.loadFlows(); //this.loadFlows();
}, },
fetch:function () { fetch:function () {
this.initialize() this.initialize()
}, },
loadPorts:function () { loadPorts:function () {
if (this.ports.length == 0) { var self = this;
var self = this; //console.log("fetching switch " + this.id + " ports")
//console.log("fetching switch " + this.id + " ports") //console.log("fetching switch " + this.id + " features")
$.ajax({ $.when($.ajax({
url:hackBase + "/wm/core/switch/" + self.id + '/port/json', url:hackBase + "/wm/core/switch/" + self.id + '/port/json',
dataType:"json", dataType:"json",
success:function (data) { success:function (data) {
//console.log("fetched switch " + self.id + " ports"); //console.log("fetched switch " + self.id + " ports");
//console.log(data[self.id]); //console.log(data[self.id]);
// create port models // create port models
// TODO maybe clean up the errors _.each(data[self.id], function(p) {
_.each(data[self.id], function(p) { p.id = self.id+'-'+p.portNumber;
p.id = self.id+'-'+p.portNumber; p.dropped = p.receiveDropped + p.transmitDropped;
p.dropped = p.receiveDropped + p.transmitDropped; p.errors = p.receiveCRCErrors + p.receiveErrors + p.receiveOverrunErrors +
p.errors = p.receiveCRCErrors + p.receiveErrors + p.receiveOverrunErrors + p.receiveFrameErrors + p.transmitErrors;
p.receiveFrameErrors + p.transmitErrors; // this is a knda kludgy way to merge models
var m = self.ports.get(p.id);
if(m) {
m.set(p, {silent: true});
} else {
self.ports.add(p, {silent: true});
}
//console.log(p);
});
}
}),
$.ajax({
url:hackBase + "/wm/core/switch/" + self.id + '/features/json',
dataType:"json",
success:function (data) {
//console.log("fetched switch " + self.id + " features");
//console.log(data[self.id]);
// update port models
_.each(data[self.id].ports, function(p) {
p.id = self.id+'-'+p.portNumber;
if(p.name != p.portNumber) {
p.name = p.portNumber + ' (' + p.name + ')';
}
p.status = '';
p.status += (p.state & 1) ? 'DOWN' : 'UP';
switch(p.currentFeatures & 0x7f) {
case 1:
p.status += ' 10 Mbps';
break;
case 2:
p.status += ' 10 Mbps FDX';
break;
case 4:
p.status += ' 100 Mbps';
break;
case 8:
p.status += ' 100 Mbps FDX';
break;
case 16:
p.status += ' 1 Gbps'; // RLY?
break;
case 32:
p.status += ' 1 Gbps FDX';
break;
case 64:
p.status += ' 10 Gbps FDX';
break;
}
// TODO parse copper/fiber, autoneg, pause
// this is a knda kludgy way to merge models
var m = self.ports.get(p.id);
if(m) {
m.set(p, {silent: true});
} else {
self.ports.add(p, {silent: true}); self.ports.add(p, {silent: true});
//console.log(p); }
}); //console.log(p);
self.ports.trigger('add'); // batch redraws });
} }
}); })).done(function() {
// TODO maybe load /features/json here self.ports.trigger('add'); // batch redraws
} });
}, },
loadFlows:function () { loadFlows:function () {
var self = this; var self = this;
//console.log("fetching switch " + this.id + " flows") //console.log("fetching switch " + this.id + " flows")
$.ajax({ $.ajax({
url:hackBase + "/wm/core/switch/" + self.id + '/flow/json', url:hackBase + "/wm/core/switch/" + self.id + '/flow/json',
...@@ -103,21 +157,20 @@ window.Switch = Backbone.Model.extend({ ...@@ -103,21 +157,20 @@ window.Switch = Backbone.Model.extend({
// create flow models // create flow models
var i = 0; var i = 0;
_.each(data[self.id], function(f) { _.each(data[self.id], function(f) {
f.id = self.id + '-' + i++; f.id = self.id + '-' + i++;
f.matchHTML = "src=<a href='/host/" + f.match.dataLayerSource + "'>" + f.matchHTML = "src=<a href='/host/" + f.match.dataLayerSource + "'>" +
f.match.dataLayerSource + f.match.dataLayerSource +
"</a>, dst=<a href='/host/" + f.match.dataLayerDestination + "'>" + "</a>, dst=<a href='/host/" + f.match.dataLayerDestination + "'>" +
f.match.dataLayerDestination + f.match.dataLayerDestination +
"</a>, port=" + f.match.inputPort; // FIXME "</a>, port=" + f.match.inputPort; // FIXME
f.actionText = f.actions[0].type + " " + f.actions[0].port; // FIXME f.actionText = f.actions[0].type + " " + f.actions[0].port; // FIXME
// console.log(f); // console.log(f);
self.flows.add(f, {silent: true}); self.flows.add(f, {silent: true});
}); });
self.flows.trigger('add'); self.flows.trigger('add');
} }
}); });
}, },
}); });
window.SwitchCollection = Backbone.Collection.extend({ window.SwitchCollection = Backbone.Collection.extend({
......
<td><a id="<%= portNumber %>"><%= portNumber %></a></td><td><!-- link status --> </td><td><%= transmitBytes %></td><td><%= receiveBytes %></td><td><%= transmitPackets %></td><td><%= receivePackets %></td><td><%= dropped %></td><td><%= errors %></td> <td><a id="<%= portNumber %>"><%= name %></a></td><td><%= status %></td><td><%= transmitBytes %></td><td><%= receiveBytes %></td><td><%= transmitPackets %></td><td><%= receivePackets %></td><td><%= dropped %></td><td><%= errors %></td>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment