[PATCH] UI: Use capabilities cached values on 'Host PCI Device' tab

Kimchi capabilities are cached on UI to avoid multiples request to it as those values does not change with high frequency. So use the cached values to check host has kernel_vfio capability. Signed-off-by: Aline Manera <alinefm@linux.vnet.ibm.com> --- ui/js/src/kimchi.guest_edit_main.js | 132 ++++++++++++++++++------------------ 1 file changed, 65 insertions(+), 67 deletions(-) diff --git a/ui/js/src/kimchi.guest_edit_main.js b/ui/js/src/kimchi.guest_edit_main.js index 9d87a73..359add8 100644 --- a/ui/js/src/kimchi.guest_edit_main.js +++ b/ui/js/src/kimchi.guest_edit_main.js @@ -360,77 +360,75 @@ kimchi.guest_edit_main = function() { var setupPCIDevice = function(){ kimchi.getHostPCIDevices(function(hostPCIs){ kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs){ - kimchi.getCapabilities(function(result) { - var pciEnabled = result.kernel_vfio; - for(var i=0; i<hostPCIs.length; i++){ - var itemNode = $.parseHTML(kimchi.substitute($('#pci-tmpl').html(),{ - name: hostPCIs[i].name, - product: hostPCIs[i].product.description, - vendor: hostPCIs[i].vendor.description - })); - $(".body", "#form-guest-edit-pci").append(itemNode); - var iconClass = "ui-icon-plus"; - for(var j=0; j<vmPCIs.length; j++){ - if(hostPCIs[i].name==vmPCIs[j].name){ - iconClass = "ui-icon-minus"; - break; - } + var pciEnabled = kimchi.capabilities.kernel_vfio; + for(var i=0; i<hostPCIs.length; i++){ + var itemNode = $.parseHTML(kimchi.substitute($('#pci-tmpl').html(),{ + name: hostPCIs[i].name, + product: hostPCIs[i].product.description, + vendor: hostPCIs[i].vendor.description + })); + $(".body", "#form-guest-edit-pci").append(itemNode); + var iconClass = "ui-icon-plus"; + for(var j=0; j<vmPCIs.length; j++){ + if(hostPCIs[i].name==vmPCIs[j].name){ + iconClass = "ui-icon-minus"; + break; } - pciEnabled || $("button", itemNode).remove(); - $("button", itemNode).button({ - icons: { primary: iconClass }, - text: false - }).click(function(){ - var obj = $(this); - if(obj.button("option", "icons").primary == "ui-icon-minus"){ - kimchi.removeVMPCIDevice(kimchi.selectedGuest, obj.parent().prop("id"), function(){ - kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){ - for(var k=0; k<hostPCIs.length; k++) { - $("button", "#" + hostPCIs[k].name).button("option", "icons", {primary: "ui-icon-plus"}); - } - for(var k=0; k<vmPCIs1.length; k++) { - $("button", "#" + vmPCIs1[k].name).button("option", "icons", {primary: "ui-icon-minus"}); - } - }); - filterNodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val()); + } + pciEnabled || $("button", itemNode).remove(); + $("button", itemNode).button({ + icons: { primary: iconClass }, + text: false + }).click(function(){ + var obj = $(this); + if(obj.button("option", "icons").primary == "ui-icon-minus"){ + kimchi.removeVMPCIDevice(kimchi.selectedGuest, obj.parent().prop("id"), function(){ + kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){ + for(var k=0; k<hostPCIs.length; k++) { + $("button", "#" + hostPCIs[k].name).button("option", "icons", {primary: "ui-icon-plus"}); + } + for(var k=0; k<vmPCIs1.length; k++) { + $("button", "#" + vmPCIs1[k].name).button("option", "icons", {primary: "ui-icon-minus"}); + } }); - }else{ - kimchi.addVMPCIDevice(kimchi.selectedGuest, { name: obj.parent().prop("id") }, function(){ - kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){ - for(var k=0; k<vmPCIs1.length; k++) { - $("button", "#" + vmPCIs1[k].name).button("option", "icons", {primary: "ui-icon-minus"}); - } - }); - filterNodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val()); + filterNodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val()); + }); + } else { + kimchi.addVMPCIDevice(kimchi.selectedGuest, { name: obj.parent().prop("id") }, function(){ + kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){ + for(var k=0; k<vmPCIs1.length; k++) { + $("button", "#" + vmPCIs1[k].name).button("option", "icons", {primary: "ui-icon-minus"}); + } }); + filterNodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val()); + }); + } + }); + kimchi.getPCIDeviceCompanions(hostPCIs[i].name, function(infoData) { + var pciTitle = i18n["KCHVMED6007M"] + "\n"; + var haveCompanions = false; + for(var p=0; p<infoData.length; p++) { + if(infoData[p].device_type === "net") { + haveCompanions = true; + pciTitle += " " + infoData[p].name + "\n"; + pciTitle += " " + i18n["KCHVMED6001M"] + " " + infoData[p].interface; + pciTitle += ", " + i18n["KCHVMED6002M"] + " " + infoData[p].address; + pciTitle += ", " + i18n["KCHVMED6003M"] + " " + infoData[p].link_type + "\n"; + } else if(infoData[p].device_type === "storage") { + haveCompanions = true; + pciTitle += " " + infoData[p].name + "\n"; + pciTitle += " " + i18n["KCHVMED6004M"] + " " + infoData[p].block; + pciTitle += ", " + i18n["KCHVMED6005M"] + " " + infoData[p].drive_type; + pciTitle += ", " + i18n["KCHVMED6006M"] + " " + infoData[p].model + "\n"; } - }); - kimchi.getPCIDeviceCompanions(hostPCIs[i].name, function(infoData) { - var pciTitle = i18n["KCHVMED6007M"] + "\n"; - var haveCompanions = false; - for(var p=0; p<infoData.length; p++) { - if(infoData[p].device_type === "net") { - haveCompanions = true; - pciTitle += " " + infoData[p].name + "\n"; - pciTitle += " " + i18n["KCHVMED6001M"] + " " + infoData[p].interface; - pciTitle += ", " + i18n["KCHVMED6002M"] + " " + infoData[p].address; - pciTitle += ", " + i18n["KCHVMED6003M"] + " " + infoData[p].link_type + "\n"; - } else if(infoData[p].device_type === "storage") { - haveCompanions = true; - pciTitle += " " + infoData[p].name + "\n"; - pciTitle += " " + i18n["KCHVMED6004M"] + " " + infoData[p].block; - pciTitle += ", " + i18n["KCHVMED6005M"] + " " + infoData[p].drive_type; - pciTitle += ", " + i18n["KCHVMED6006M"] + " " + infoData[p].model + "\n"; - } - } - for(var q=0; q<infoData.length; q++) { - haveCompanions && $(".name", "#" + infoData[q].parent).attr("title", pciTitle); - haveCompanions && $(".product", "#" + infoData[q].parent).attr("title", pciTitle); - haveCompanions && $(".vendor", "#" + infoData[q].parent).attr("title", pciTitle); - } - }); - } - }); + } + for(var q=0; q<infoData.length; q++) { + haveCompanions && $(".name", "#" + infoData[q].parent).attr("title", pciTitle); + haveCompanions && $(".product", "#" + infoData[q].parent).attr("title", pciTitle); + haveCompanions && $(".vendor", "#" + infoData[q].parent).attr("title", pciTitle); + } + }); + } }); }); var filterNodes = function(group, text){ -- 1.9.3

Reviewed-by: Daniel Barboza <danielhb@linux.vnet.ibm.com> Tested-by: Daniel Barboza <danielhb@linux.vnet.ibm.com> On 11/04/2014 10:38 AM, Aline Manera wrote:
Kimchi capabilities are cached on UI to avoid multiples request to it as those values does not change with high frequency. So use the cached values to check host has kernel_vfio capability.
Signed-off-by: Aline Manera <alinefm@linux.vnet.ibm.com> --- ui/js/src/kimchi.guest_edit_main.js | 132 ++++++++++++++++++------------------ 1 file changed, 65 insertions(+), 67 deletions(-)
diff --git a/ui/js/src/kimchi.guest_edit_main.js b/ui/js/src/kimchi.guest_edit_main.js index 9d87a73..359add8 100644 --- a/ui/js/src/kimchi.guest_edit_main.js +++ b/ui/js/src/kimchi.guest_edit_main.js @@ -360,77 +360,75 @@ kimchi.guest_edit_main = function() { var setupPCIDevice = function(){ kimchi.getHostPCIDevices(function(hostPCIs){ kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs){ - kimchi.getCapabilities(function(result) { - var pciEnabled = result.kernel_vfio; - for(var i=0; i<hostPCIs.length; i++){ - var itemNode = $.parseHTML(kimchi.substitute($('#pci-tmpl').html(),{ - name: hostPCIs[i].name, - product: hostPCIs[i].product.description, - vendor: hostPCIs[i].vendor.description - })); - $(".body", "#form-guest-edit-pci").append(itemNode); - var iconClass = "ui-icon-plus"; - for(var j=0; j<vmPCIs.length; j++){ - if(hostPCIs[i].name==vmPCIs[j].name){ - iconClass = "ui-icon-minus"; - break; - } + var pciEnabled = kimchi.capabilities.kernel_vfio; + for(var i=0; i<hostPCIs.length; i++){ + var itemNode = $.parseHTML(kimchi.substitute($('#pci-tmpl').html(),{ + name: hostPCIs[i].name, + product: hostPCIs[i].product.description, + vendor: hostPCIs[i].vendor.description + })); + $(".body", "#form-guest-edit-pci").append(itemNode); + var iconClass = "ui-icon-plus"; + for(var j=0; j<vmPCIs.length; j++){ + if(hostPCIs[i].name==vmPCIs[j].name){ + iconClass = "ui-icon-minus"; + break; } - pciEnabled || $("button", itemNode).remove(); - $("button", itemNode).button({ - icons: { primary: iconClass }, - text: false - }).click(function(){ - var obj = $(this); - if(obj.button("option", "icons").primary == "ui-icon-minus"){ - kimchi.removeVMPCIDevice(kimchi.selectedGuest, obj.parent().prop("id"), function(){ - kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){ - for(var k=0; k<hostPCIs.length; k++) { - $("button", "#" + hostPCIs[k].name).button("option", "icons", {primary: "ui-icon-plus"}); - } - for(var k=0; k<vmPCIs1.length; k++) { - $("button", "#" + vmPCIs1[k].name).button("option", "icons", {primary: "ui-icon-minus"}); - } - }); - filterNodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val()); + } + pciEnabled || $("button", itemNode).remove(); + $("button", itemNode).button({ + icons: { primary: iconClass }, + text: false + }).click(function(){ + var obj = $(this); + if(obj.button("option", "icons").primary == "ui-icon-minus"){ + kimchi.removeVMPCIDevice(kimchi.selectedGuest, obj.parent().prop("id"), function(){ + kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){ + for(var k=0; k<hostPCIs.length; k++) { + $("button", "#" + hostPCIs[k].name).button("option", "icons", {primary: "ui-icon-plus"}); + } + for(var k=0; k<vmPCIs1.length; k++) { + $("button", "#" + vmPCIs1[k].name).button("option", "icons", {primary: "ui-icon-minus"}); + } }); - }else{ - kimchi.addVMPCIDevice(kimchi.selectedGuest, { name: obj.parent().prop("id") }, function(){ - kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){ - for(var k=0; k<vmPCIs1.length; k++) { - $("button", "#" + vmPCIs1[k].name).button("option", "icons", {primary: "ui-icon-minus"}); - } - }); - filterNodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val()); + filterNodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val()); + }); + } else { + kimchi.addVMPCIDevice(kimchi.selectedGuest, { name: obj.parent().prop("id") }, function(){ + kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){ + for(var k=0; k<vmPCIs1.length; k++) { + $("button", "#" + vmPCIs1[k].name).button("option", "icons", {primary: "ui-icon-minus"}); + } }); + filterNodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val()); + }); + } + }); + kimchi.getPCIDeviceCompanions(hostPCIs[i].name, function(infoData) { + var pciTitle = i18n["KCHVMED6007M"] + "\n"; + var haveCompanions = false; + for(var p=0; p<infoData.length; p++) { + if(infoData[p].device_type === "net") { + haveCompanions = true; + pciTitle += " " + infoData[p].name + "\n"; + pciTitle += " " + i18n["KCHVMED6001M"] + " " + infoData[p].interface; + pciTitle += ", " + i18n["KCHVMED6002M"] + " " + infoData[p].address; + pciTitle += ", " + i18n["KCHVMED6003M"] + " " + infoData[p].link_type + "\n"; + } else if(infoData[p].device_type === "storage") { + haveCompanions = true; + pciTitle += " " + infoData[p].name + "\n"; + pciTitle += " " + i18n["KCHVMED6004M"] + " " + infoData[p].block; + pciTitle += ", " + i18n["KCHVMED6005M"] + " " + infoData[p].drive_type; + pciTitle += ", " + i18n["KCHVMED6006M"] + " " + infoData[p].model + "\n"; } - }); - kimchi.getPCIDeviceCompanions(hostPCIs[i].name, function(infoData) { - var pciTitle = i18n["KCHVMED6007M"] + "\n"; - var haveCompanions = false; - for(var p=0; p<infoData.length; p++) { - if(infoData[p].device_type === "net") { - haveCompanions = true; - pciTitle += " " + infoData[p].name + "\n"; - pciTitle += " " + i18n["KCHVMED6001M"] + " " + infoData[p].interface; - pciTitle += ", " + i18n["KCHVMED6002M"] + " " + infoData[p].address; - pciTitle += ", " + i18n["KCHVMED6003M"] + " " + infoData[p].link_type + "\n"; - } else if(infoData[p].device_type === "storage") { - haveCompanions = true; - pciTitle += " " + infoData[p].name + "\n"; - pciTitle += " " + i18n["KCHVMED6004M"] + " " + infoData[p].block; - pciTitle += ", " + i18n["KCHVMED6005M"] + " " + infoData[p].drive_type; - pciTitle += ", " + i18n["KCHVMED6006M"] + " " + infoData[p].model + "\n"; - } - } - for(var q=0; q<infoData.length; q++) { - haveCompanions && $(".name", "#" + infoData[q].parent).attr("title", pciTitle); - haveCompanions && $(".product", "#" + infoData[q].parent).attr("title", pciTitle); - haveCompanions && $(".vendor", "#" + infoData[q].parent).attr("title", pciTitle); - } - }); - } - }); + } + for(var q=0; q<infoData.length; q++) { + haveCompanions && $(".name", "#" + infoData[q].parent).attr("title", pciTitle); + haveCompanions && $(".product", "#" + infoData[q].parent).attr("title", pciTitle); + haveCompanions && $(".vendor", "#" + infoData[q].parent).attr("title", pciTitle); + } + }); + } }); }); var filterNodes = function(group, text){

Reviewed-by: Royce Lv<lvroyce@linux.vnet.ibm.com> On 2014年11月04日 20:38, Aline Manera wrote:
Kimchi capabilities are cached on UI to avoid multiples request to it as those values does not change with high frequency. So use the cached values to check host has kernel_vfio capability.
Signed-off-by: Aline Manera <alinefm@linux.vnet.ibm.com> --- ui/js/src/kimchi.guest_edit_main.js | 132 ++++++++++++++++++------------------ 1 file changed, 65 insertions(+), 67 deletions(-)
diff --git a/ui/js/src/kimchi.guest_edit_main.js b/ui/js/src/kimchi.guest_edit_main.js index 9d87a73..359add8 100644 --- a/ui/js/src/kimchi.guest_edit_main.js +++ b/ui/js/src/kimchi.guest_edit_main.js @@ -360,77 +360,75 @@ kimchi.guest_edit_main = function() { var setupPCIDevice = function(){ kimchi.getHostPCIDevices(function(hostPCIs){ kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs){ - kimchi.getCapabilities(function(result) { - var pciEnabled = result.kernel_vfio; - for(var i=0; i<hostPCIs.length; i++){ - var itemNode = $.parseHTML(kimchi.substitute($('#pci-tmpl').html(),{ - name: hostPCIs[i].name, - product: hostPCIs[i].product.description, - vendor: hostPCIs[i].vendor.description - })); - $(".body", "#form-guest-edit-pci").append(itemNode); - var iconClass = "ui-icon-plus"; - for(var j=0; j<vmPCIs.length; j++){ - if(hostPCIs[i].name==vmPCIs[j].name){ - iconClass = "ui-icon-minus"; - break; - } + var pciEnabled = kimchi.capabilities.kernel_vfio; + for(var i=0; i<hostPCIs.length; i++){ + var itemNode = $.parseHTML(kimchi.substitute($('#pci-tmpl').html(),{ + name: hostPCIs[i].name, + product: hostPCIs[i].product.description, + vendor: hostPCIs[i].vendor.description + })); + $(".body", "#form-guest-edit-pci").append(itemNode); + var iconClass = "ui-icon-plus"; + for(var j=0; j<vmPCIs.length; j++){ + if(hostPCIs[i].name==vmPCIs[j].name){ + iconClass = "ui-icon-minus"; + break; } - pciEnabled || $("button", itemNode).remove(); - $("button", itemNode).button({ - icons: { primary: iconClass }, - text: false - }).click(function(){ - var obj = $(this); - if(obj.button("option", "icons").primary == "ui-icon-minus"){ - kimchi.removeVMPCIDevice(kimchi.selectedGuest, obj.parent().prop("id"), function(){ - kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){ - for(var k=0; k<hostPCIs.length; k++) { - $("button", "#" + hostPCIs[k].name).button("option", "icons", {primary: "ui-icon-plus"}); - } - for(var k=0; k<vmPCIs1.length; k++) { - $("button", "#" + vmPCIs1[k].name).button("option", "icons", {primary: "ui-icon-minus"}); - } - }); - filterNodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val()); + } + pciEnabled || $("button", itemNode).remove(); + $("button", itemNode).button({ + icons: { primary: iconClass }, + text: false + }).click(function(){ + var obj = $(this); + if(obj.button("option", "icons").primary == "ui-icon-minus"){ + kimchi.removeVMPCIDevice(kimchi.selectedGuest, obj.parent().prop("id"), function(){ + kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){ + for(var k=0; k<hostPCIs.length; k++) { + $("button", "#" + hostPCIs[k].name).button("option", "icons", {primary: "ui-icon-plus"}); + } + for(var k=0; k<vmPCIs1.length; k++) { + $("button", "#" + vmPCIs1[k].name).button("option", "icons", {primary: "ui-icon-minus"}); + } }); - }else{ - kimchi.addVMPCIDevice(kimchi.selectedGuest, { name: obj.parent().prop("id") }, function(){ - kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){ - for(var k=0; k<vmPCIs1.length; k++) { - $("button", "#" + vmPCIs1[k].name).button("option", "icons", {primary: "ui-icon-minus"}); - } - }); - filterNodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val()); + filterNodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val()); + }); + } else { + kimchi.addVMPCIDevice(kimchi.selectedGuest, { name: obj.parent().prop("id") }, function(){ + kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){ + for(var k=0; k<vmPCIs1.length; k++) { + $("button", "#" + vmPCIs1[k].name).button("option", "icons", {primary: "ui-icon-minus"}); + } }); + filterNodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val()); + }); + } + }); + kimchi.getPCIDeviceCompanions(hostPCIs[i].name, function(infoData) { + var pciTitle = i18n["KCHVMED6007M"] + "\n"; + var haveCompanions = false; + for(var p=0; p<infoData.length; p++) { + if(infoData[p].device_type === "net") { + haveCompanions = true; + pciTitle += " " + infoData[p].name + "\n"; + pciTitle += " " + i18n["KCHVMED6001M"] + " " + infoData[p].interface; + pciTitle += ", " + i18n["KCHVMED6002M"] + " " + infoData[p].address; + pciTitle += ", " + i18n["KCHVMED6003M"] + " " + infoData[p].link_type + "\n"; + } else if(infoData[p].device_type === "storage") { + haveCompanions = true; + pciTitle += " " + infoData[p].name + "\n"; + pciTitle += " " + i18n["KCHVMED6004M"] + " " + infoData[p].block; + pciTitle += ", " + i18n["KCHVMED6005M"] + " " + infoData[p].drive_type; + pciTitle += ", " + i18n["KCHVMED6006M"] + " " + infoData[p].model + "\n"; } - }); - kimchi.getPCIDeviceCompanions(hostPCIs[i].name, function(infoData) { - var pciTitle = i18n["KCHVMED6007M"] + "\n"; - var haveCompanions = false; - for(var p=0; p<infoData.length; p++) { - if(infoData[p].device_type === "net") { - haveCompanions = true; - pciTitle += " " + infoData[p].name + "\n"; - pciTitle += " " + i18n["KCHVMED6001M"] + " " + infoData[p].interface; - pciTitle += ", " + i18n["KCHVMED6002M"] + " " + infoData[p].address; - pciTitle += ", " + i18n["KCHVMED6003M"] + " " + infoData[p].link_type + "\n"; - } else if(infoData[p].device_type === "storage") { - haveCompanions = true; - pciTitle += " " + infoData[p].name + "\n"; - pciTitle += " " + i18n["KCHVMED6004M"] + " " + infoData[p].block; - pciTitle += ", " + i18n["KCHVMED6005M"] + " " + infoData[p].drive_type; - pciTitle += ", " + i18n["KCHVMED6006M"] + " " + infoData[p].model + "\n"; - } - } - for(var q=0; q<infoData.length; q++) { - haveCompanions && $(".name", "#" + infoData[q].parent).attr("title", pciTitle); - haveCompanions && $(".product", "#" + infoData[q].parent).attr("title", pciTitle); - haveCompanions && $(".vendor", "#" + infoData[q].parent).attr("title", pciTitle); - } - }); - } - }); + } + for(var q=0; q<infoData.length; q++) { + haveCompanions && $(".name", "#" + infoData[q].parent).attr("title", pciTitle); + haveCompanions && $(".product", "#" + infoData[q].parent).attr("title", pciTitle); + haveCompanions && $(".vendor", "#" + infoData[q].parent).attr("title", pciTitle); + } + }); + } }); }); var filterNodes = function(group, text){
participants (3)
-
Aline Manera
-
Daniel Henrique Barboza
-
Royce Lv