X-Git-Url: https://git.josue.xyz/?p=VSoRC%2F.git;a=blobdiff_plain;f=js%2Ftopology%2Fmodules.js;fp=js%2Ftopology%2Fmodules.js;h=4d0577232574cc5c35920cff48ea2e76262e1be7;hp=0000000000000000000000000000000000000000;hb=4ff4cfab60fd88f431c88603d57612fc489dc62f;hpb=ea20f018c05bcc4e56b2dfa3eee30af0d6ffabf3 diff --git a/js/topology/modules.js b/js/topology/modules.js new file mode 100644 index 0000000..4d05772 --- /dev/null +++ b/js/topology/modules.js @@ -0,0 +1,252 @@ +// Copyright (c) 2018 Maen Artimy +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * Definition of modules. + * + **/ + +// Makes a GET request to the controller +function BaseModule(command) { + var cmd = command; + var go = myGlobalObject; + + var run = function(element) { + go.httpGetAsync(cmd, this.callback, element); + }; + + var callback = function(jsondata, element) { + console.log(element); + } + + return { + callback: callback, + run: run + } +} + +// Makes a POST request to the controller +function BasePostModule(command) { + var cmd = command; + var go = myGlobalObject; + var idx; + var parm = ""; + + var dpInFilter = function (e, x) { + idx = x; + e.innerHTML ="Filter: "; + }; + + var run = function(element) { + go.httpPostAsync(cmd, this.param, this.callback, element); + }; + + var callback = function(jsondata, element) { + console.log(element); + } + + return { + idx: this.idx, + param: this.param, + dpInFilter: dpInFilter, + callback: callback, + run: run + } +} + +function hc(myString) { + return myString.replace("_"," ").replace(/\b\w/g, l => l.toUpperCase()) +} + +// Populates the Switch ID card +var dpList = function (jsondata, element) { + var switches = JSON.parse(jsondata); + var found = false; + + //var html = ""; + element.innerHTML = ""; + var ul = document.createElement("ul"); + ul.setAttribute("id", "swlist"); + for(var s in switches) { + var num = +switches[s]; //("000000000000000" + switches[s].toString(16)).substr(-16); + //html += num + "
"; + + var li = document.createElement("li"); + li.innerHTML = num; + if(switches[s] === myGlobalObject.dpid()) { + li.classList.add("selected"); + found = true; + } + li.addEventListener("click", clickMe); + ul.appendChild(li); + } + element.appendChild(ul); + //element.innerHTML = html; + if (!found && document.getElementById("swlist").firstChild) { + var name = document.getElementById("swlist").firstChild.innerHTML + myGlobalObject.setDPID(name) + moduleManager.loadModules(views); + } +}; + +var dpStruct = function (jsondata, element) { + var jsonobj = JSON.parse(jsondata); + if(!jsonobj) return; + var switchName = Object.keys(jsonobj); + var struct = jsonobj[switchName]; + var html = ""; + for(var key in struct) { + html += hc(key) + " : " + struct[key] + "
"; + } + element.innerHTML = html; +}; + +var dpTable = function (jsondata, element) { + var dispObj = function(obj) { + // JSON to string? + var str = ""; + if(Array.isArray(obj)) { + for(var item in obj) { + if(obj[item] instanceof Object) { + + } else { + str += obj[item].replace(":","=") + "
"; + } + } + return str; + } else { + var allKeys = Object.keys(obj); + for(var key in allKeys) { + str += allKeys[key] + " = " + obj[allKeys[key]] + "
"; + } + } + return str; + }; + + var jsonobj = JSON.parse(jsondata); + if(!jsonobj) return; + + var switchName = Object.keys(jsonobj); + + // extract the flows + var rows = jsonobj[switchName]; + + // get the headers + var col = []; + for (var c in rows[0]) { + col.push(c); + } + col.sort(); // A, B, C, ... + col.reverse(); // ..., C, B, A + + // CREATE DYNAMIC TABLE. + var table = document.createElement("table"); + //table.classList.add("fixed_headers"); + + // CREATE HTML TABLE HEADER ROW USING THE EXTRACTED HEADERS ABOVE. + var tr = table.insertRow(-1); // TABLE ROW. + for (var i = 0; i < col.length; i++) { + var th = document.createElement("th"); // TABLE HEADER. + th.innerHTML = col[i].replace("_","
"); + tr.appendChild(th); + } + + // ADD JSON DATA TO THE TABLE AS ROWS. + for (var i = 0; i < rows.length; i++) { + tr = table.insertRow(-1); + for (var j = 0; j < col.length; j++) { + var tabCell = tr.insertCell(-1); + + if(typeof rows[i][col[j]] === 'object') { + //tabCell.innerHTML = dispObj(rows[i][col[j]]); + tabCell.innerHTML = JSON.stringify(rows[i][col[j]]); + } else { + tabCell.innerHTML = rows[i][col[j]]; + } + } + } + element.innerHTML = ""; + table.align = "center"; + element.appendChild(table); +} + +// Populate the cards with data +var moduleManager = (function () { + var time = 15000; //10 sec + var myViews = []; + + var loadModules = function(views) { + myViews.length = 0; // it is supposed to be the best way to clear an array + self.clearInterval(); + + for (var idx in views) { + if(views[idx].call) { + var card = document.getElementById(views[idx].id); + var container = card.childNodes.item(CONTAINER_IDX); + + var myModule; + if(views[idx].post) { + myModule = new BasePostModule(views[idx].cmd); + var bar = card.childNodes.item(BAR_IDX); + myModule.dpInFilter(bar, idx); + } else { + myModule = new BaseModule(views[idx].cmd); + } + myModule.callback = views[idx].call; + myModule.run(container); + views[idx].module = myModule; // we need this to refresh + views[idx].container = container; // we need this to refresh + + if(views[idx].ref) { // refresh is required + myViews.push(views[idx]); + }; + } + } + //myViews = views; + }; + + var refreshModules = function() { + for (var idx in myViews) { + myViews[idx].module.run(myViews[idx].container); + } + } + + var interval = self.setInterval(refreshModules,time); + + var setInterval = function(newtime) { + time = newtime; + interval = self.setInterval(loadModules,time); + } + + var getInterval = function() { + console.log(time); + } + + return { + setInterval: setInterval, + loadModules: loadModules + } +})(); + +function clickMe(e) { + //console.log(e); + myGlobalObject.setDPID(e.currentTarget.innerHTML); + moduleManager.loadModules(views); +} + +function mainFilterFunc(element, idx) { + var str = element.getElementsByClassName("filterInput")[0].value; + views[idx].module.param = str; + views[idx].module.run(views[idx].container); +}