Skip to content

Commit

Permalink
misc optimizations
Browse files Browse the repository at this point in the history
  • Loading branch information
Maen Artimy committed Oct 3, 2018
1 parent 9f21e55 commit c841ffe
Show file tree
Hide file tree
Showing 10 changed files with 105 additions and 146 deletions.
64 changes: 24 additions & 40 deletions flowmanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,38 +95,34 @@ def get_switches(self):
"""Return switches."""
return self.dpset.get_all()

def get_switch_desc(self, dpid):
dp = self.dpset.get(dpid)
if dp:
return self.ofctl.get_desc_stats(dp, self.waiters, to_user=True)
else:
return None
def get_stats(self, req, dpid):
dp = self.dpset.get(int(str(dpid), 0))
if req == "flows":
return self.ofctl.get_flow_stats(dp, self.waiters)
elif req == "groups":
return {"desc": self.ofctl.get_group_desc(dp, self.waiters),
"stats": self.ofctl.get_group_stats(dp, self.waiters)}
elif req == "meters":
return {"desc": self.ofctl.get_meter_config(dp, self.waiters),
"stats": self.ofctl.get_meter_stats(dp, self.waiters)}

def get_port_desc(self, dpid):
# merg with abo
def get_stats_request(self, request, dpid):
dp = self.dpset.get(dpid)
if dp:
return self.ofctl.get_port_desc(dp, self.waiters)
else:
return None

def get_port_stat(self, dpid):
dp = self.dpset.get(dpid)
if dp:
return self.ofctl.get_port_stats(dp, self.waiters, port=None, to_user=True)
return None
if not dp:
return None

def get_flow_summary(self, dpid):
dp = self.dpset.get(dpid)
if dp:
return self.ofctl.get_aggregate_flow_stats(dp, self.waiters)
return None
switch = {
"switchdesc": self.ofctl.get_desc_stats(dp, self.waiters, to_user=True),
"portdesc": self.ofctl.get_port_desc(dp, self.waiters),
"portstat": self.ofctl.get_port_stats(dp, self.waiters, port=None, to_user=True),
"flowsumm": self.ofctl.get_aggregate_flow_stats(dp, self.waiters),
"tablestat": self.ofctl.get_table_stats(dp, self.waiters),
"meterstat": self.ofctl.get_meter_stats(dp, self.waiters),
}

def get_table_stat(self, dpid):
dp = self.dpset.get(dpid)
if dp:
return self.ofctl.get_table_stats(dp, self.waiters)
else:
return None
return switch.get(request, None)

def read_logs(self):
items = []
Expand Down Expand Up @@ -520,18 +516,6 @@ def process_meter_message(self, d):
# dp = self.dpset.get(int(str(dpid), 0))
# return self.ofctl.get_flow_stats(dp, self.waiters, flow)

def get_stats(self, req, dpid):
dp = self.dpset.get(int(str(dpid), 0))
if req == "flows":
return self.ofctl.get_flow_stats(dp, self.waiters)
elif req == "groups":
return {"desc": self.ofctl.get_group_desc(dp, self.waiters),
"stats": self.ofctl.get_group_stats(dp, self.waiters)}
elif req == "meters":
return {"desc": self.ofctl.get_meter_config(dp, self.waiters),
"stats": self.ofctl.get_meter_stats(dp, self.waiters)}


def get_packet_summary(self, content):
pkt = packet.Packet(content)
eth = pkt.get_protocols(ethernet.ethernet)[0]
Expand All @@ -553,7 +537,7 @@ def get_packet_summary(self, content):
# ofp_event.EventOFPQueueStatsReply,
# ofp_event.EventOFPQueueDescStatsReply,
ofp_event.EventOFPMeterStatsReply,
# ofp_event.EventOFPMeterFeaturesStatsReply,
ofp_event.EventOFPMeterFeaturesStatsReply,
ofp_event.EventOFPMeterConfigStatsReply,
ofp_event.EventOFPGroupStatsReply,
# ofp_event.EventOFPGroupFeaturesStatsReply,
Expand Down
1 change: 0 additions & 1 deletion flows.html
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,5 @@ <h1>Flow Tables</h1>
<script src="js\mainmenu.js"></script>
<script src="js\common.js?v2"></script>
<script src="js\flowtables.js?v2"></script>
<script src="js\tablesort.js?v2"></script>
</body>
</html>
1 change: 0 additions & 1 deletion groups.html
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,5 @@ <h1>Group Tables</h1>
<script src="js\mainmenu.js"></script>
<script src="js\common.js?v1"></script>
<script src="js\grouptables.js?v1"></script>
<script src="js\tablesort.js?v2"></script>
</body>
</html>
2 changes: 1 addition & 1 deletion js/cards.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,5 +102,5 @@ var views = [
//{id:"mTableFeature", cmd:"/stats/tablefeatures/<dpid>", dsc:"Table Features", call:dpTable, ref:true},
//{id:"mQueueStats", cmd:"/stats/queue/<dpid>", dsc:"Queue Stats", call:dpTable, ref:true},
//{id:"mQueueDesc", cmd:"/stats/queuedesc/<dpid>", dsc:"Queue Desc", call:dpTable, ref:true},
//{id:"mMeters", cmd:"/stats/meter/<dpid>", dsc:"Meters stats"}
{id:"mMeters", cmd:"/data?meterstat=<dpid>", dsc:"Meter stats", call:dpTable, ref:true}
];
75 changes: 70 additions & 5 deletions js/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ function Tables(category) {
function makeRows(dpid, table, hdr_format, cell_format) {
var cols = [];
var $col = $('<tr></tr>');
$col.append($('<th><input type="checkbox"/></th>').attr('data-sort', "nosort"));
for(var i in table.fields) {
cols.push(table.fields[i]);
var $hdr = $('<th></th>');
Expand All @@ -34,22 +35,23 @@ function Tables(category) {
var rows = [];
table.data.forEach(function(item) {
var $row = $('<tr></tr>').addClass('editable');
$row.append($('<td><input type="checkbox"/></td>'));
item.dpid = dpid;
for(var i in cols) {
var field = cols[i];
var txt = cell_format(item[field]);
$row.append($('<td></td>').text(txt));
}
rows.push({
datum: item,
dataitem: item,
$row: $row
});
});

//default sort - works for flows only
if(category === 'flow') {
function compare(a,b) {
return b.datum.priority - a.datum.priority;
return b.dataitem.priority - a.dataitem.priority;
}
rows.sort(compare);
}
Expand Down Expand Up @@ -80,7 +82,7 @@ function Tables(category) {
$(row.$row).unbind('click');
$(row.$row).on('click', function(e) {
e.preventDefault();
sessionStorage.setItem(category, JSON.stringify(row.datum));
sessionStorage.setItem(category, JSON.stringify(row.dataitem));
msg = "Table entry copied to session storage.";
displayMessage(msg);
});
Expand All @@ -96,15 +98,15 @@ function Tables(category) {
if(dp_table.rows) {
dp_table.rows.forEach(function(row) {
$tableBody.append(row.$row);
eventListener(row);
//eventListener(row);
});
}
$table.append($tableHead);
$table.append($tableBody);
return $table;
}

// Build the card surrounding the table the card
// Build the card surrounding the table. The card
// may have additional data, such as caption and stats
function buildTableCard(dp_table) {
var $card = $('<div></div>').addClass('card').addClass('wide');
Expand Down Expand Up @@ -308,3 +310,66 @@ function cellFormating(cell) {
}
return newcell;
}

// Table sort
var compare = { // Declare compare object
number: function(a, b) { // Add a method called name
a = Number(a);
b = Number(b);
return a - b;
},
alphanum: function(a, b) { // Add a method called name
if (a < b) { // If value a is less than value b
return -1; // Return -1
} else { // Otherwise
return a > b ? 1 : 0; // If a is greater than b return 1 OR
} // if they are the same return 0
},
duration: function(a, b) { // Add a method called duration
a = a.split(':'); // Split the time at the colon
b = b.split(':'); // Split the time at the colon

a = Number(a[0]) * 60 + Number(a[1]); // Convert the time to seconds
b = Number(b[0]) * 60 + Number(b[1]); // Convert the time to seconds

return a - b; // Return a minus b
},
date: function(a, b) { // Add a method called date
a = new Date(a); // New Date object to hold the date
b = new Date(b); // New Date object to hold the date

return a - b; // Return a minus b
}
};

$('body').on('click', '.sortable th', function(e) {
var $header = $(this); // Get the header
var order = $header.data('sort'); // Get value of data-sort attribute
var column; // Declare variable called column
var $table = $header.parents('table');
var $tbody = $table.find('tbody'); // Store table body
var $controls = $table.find('th'); // Store table headers
var rows = $tbody.find('tr').toArray(); // Store array containing rows

// If selected item has ascending or descending class, reverse contents
if ($header.is('.ascending') || $header.is('.descending')) {
$header.toggleClass('ascending descending'); // Toggle to other class
$tbody.append(rows.reverse()); // Reverse the array
} else if(order !== "nosort") { // Otherwise perform a sort
$header.addClass('ascending'); // Add class to header
// Remove asc or desc from all other headers
$header.siblings().removeClass('ascending descending');
if (compare.hasOwnProperty(order)) { // If compare object has method
column = $controls.index(this); // Search for column's index no

rows.sort(function(a, b) { // Call sort() on rows array
a = $(a).find('td').eq(column).text(); // Get text of column in row a
b = $(b).find('td').eq(column).text(); // Get text of column in row b
return compare[order](a, b); // Call compare method
});

$tbody.append(rows);
}
}
});

76 changes: 0 additions & 76 deletions js/tablesort.js

This file was deleted.

4 changes: 2 additions & 2 deletions js/topology.js
Original file line number Diff line number Diff line change
Expand Up @@ -244,10 +244,10 @@ $(function() {
}

function getTopology() {
tabObj.buildTabs("#main", ["Topology", "Tables"], "Nothing to show!");
tabObj.buildTabs("#main", ["Graph", "Tables"], "Nothing to show!");
var $svg = $('<svg width="1116" height="600"></svg>');
var $data = $('<div id="data"></div>');
tabObj.buildContent('Topology', $svg);
tabObj.buildContent('Graph', $svg);
tabObj.buildContent('Tables', $data);
d3.json("/topology").then(function(data) {
listTopology(data)
Expand Down
2 changes: 1 addition & 1 deletion messages.html
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ <h1>Messages</h1>
</div>
<script src="js\mainmenu.js"></script>
<script src="js\messages.js"></script>
<script src="js\tablesort.js?v2"></script>
<script src="js\common.js?v2"></script>
</body>
</html>
1 change: 0 additions & 1 deletion meters.html
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,5 @@ <h1>Meters</h1>
<script src="js\mainmenu.js"></script>
<script src="js\common.js?v1"></script>
<script src="js\metertables.js?v1"></script>
<script src="js\tablesort.js?v2"></script>
</body>
</html>
25 changes: 7 additions & 18 deletions webapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,38 +46,27 @@ def make_response(self, filename):

@route('monitor', '/status', methods=['GET'])
def get_flow_stats(self, req, **_kwargs):
"""Get switch data
"""Get stats
"""
if req.GET['status'] and req.GET['dpid']:
res = Response(content_type="application/json")
res.json = self.api.get_stats(req.GET['status'], req.GET['dpid'])
return res
return Response(status=404) # Resource does not exist

# TODO: merge with get_flow_stats
@route('monitor', '/data', methods=['GET'])
def get_flow_data(self, req, **_kwargs):
def get_switch_data(self, req, **_kwargs):
"""Get switch data
"""
# TODO: merge with get_flow_stats
if req.GET: # is this if needed?
lst = {} # the server always returns somthing??
if req.GET.get("list") == "switches":
lst = {t[0]:t[0] for t in self.api.get_switches()}
if req.GET.get("switchdesc"):
dpid = int(req.GET["switchdesc"])
lst = self.api.get_switch_desc(dpid)
if req.GET.get("portdesc"):
dpid = int(req.GET["portdesc"])
lst = self.api.get_port_desc(dpid)
if req.GET.get("portstat"):
dpid = int(req.GET["portstat"])
lst = self.api.get_port_stat(dpid)
if req.GET.get("flowsumm"):
dpid = int(req.GET["flowsumm"])
lst = self.api.get_flow_summary(dpid)
if req.GET.get("tablestat"):
dpid = int(req.GET["tablestat"])
lst = self.api.get_table_stat(dpid)
else:
request = str(req.GET.keys()[0])
dpid = int(req.GET[request], 0)
lst = self.api.get_stats_request(request, dpid)

res = Response(content_type="application/json")
res.json = lst
Expand Down

0 comments on commit c841ffe

Please sign in to comment.