added some temporal archives for checking new web pages
[VSoRC/.git] / js / flow-stats.js
diff --git a/js/flow-stats.js b/js/flow-stats.js
new file mode 100644 (file)
index 0000000..eaeed13
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2014 SDN Hub
+ *
+ * Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.
+ * You may not use this file except in compliance with this License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.gnu.org/licenses/gpl-3.0.txt
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ */
+
+var url = "http://" + location.hostname + ":8080";
+
+function updateFlowStats() {
+    var statsTableBody = document.getElementById('flow-stats-data');
+    while (statsTableBody.firstChild) {
+            statsTableBody.removeChild(statsTableBody.firstChild);
+    }
+
+    $.getJSON(url.concat("/stats/switches"), function(switches){
+        $.each(switches, function(index, dpid){
+            var hex_dpid = parseInt(dpid).toString(16);
+
+            $.getJSON(url.concat("/stats/flow/").concat(dpid), function(flows) {
+                var flowStats = flows[dpid];
+
+                var tr = document.createElement('TR');
+                var numFlows = 0;
+                var switchColTd = document.createElement('TD');
+                switchColTd.appendChild(document.createTextNode(hex_dpid));
+                tr.appendChild(switchColTd);
+
+                var td;
+
+                $.each(flowStats, function(index, obj) {
+                    var outPorts = [];
+                    if ("actions" in obj) {
+                        $.each(obj.actions, function(index, action) {
+                            var command = action.split(':')[0];
+                            var param = action.split(':')[1];
+
+                            if (command == "OUTPUT") {
+                                if (param < 65280) 
+                                    outPorts.push(param);
+                            }
+                        });
+                    }
+                    if (outPorts.length > 0) {
+                        numFlows += 1;
+                        var matchFields = new Array("in_port", "dl_src", "dl_dst", "dl_type",
+                            "nw_src", "nw_dst", "nw_proto", "tp_src", "tp_dst");
+
+                        if (!("match" in obj)) {
+                            obj.match = {};
+                        }
+
+                        $.each(matchFields, function(index, field) {
+                            td = document.createElement('TD');
+                            if (field in obj.match)  {
+                                value = obj.match[field];
+                                if (field == "dl_type")
+                                    value = ethertypeToString(obj.match[field]);
+                                else if (field == "nw_proto")
+                                    value = nwprotoToString(obj.match[field]);
+
+                                td.appendChild(document.createTextNode(value));
+                            }
+                            else
+                                td.appendChild(document.createTextNode("*"));
+                            tr.appendChild(td);
+                        });
+
+                        td = document.createElement('TD');
+                        td.appendChild(document.createTextNode(outPorts));
+                        tr.appendChild(td);
+
+                        td = document.createElement('TD');
+                        var duration = obj.duration_sec + obj.duration_nsec/1000000000;
+                        td.appendChild(document.createTextNode(duration));
+                        tr.appendChild(td);
+
+                        td = document.createElement('TD');
+                        td.appendChild(document.createTextNode(obj.packet_count));
+                        tr.appendChild(td);
+
+                        td = document.createElement('TD');
+                        td.appendChild(document.createTextNode(obj.byte_count));
+                        tr.appendChild(td);
+
+                        statsTableBody.appendChild(tr);
+                        tr = document.createElement('TR');
+                    }
+                });
+
+                switchColTd.rowSpan = numFlows;
+            });
+        });
+    });
+}
+
+updateFlowStats();
+
+var flowStatsIntervalID = setInterval(function(){updateFlowStats()}, 5000);
+
+function stopFlowStatsTableRefresh() {
+    clearInterval(flowStatsIntervalID);
+}