[PATCH ][Ginger 0/6] Multiple UI issues fixed

0 views
Skip to first unread message

rajg...@linux.vnet.ibm.com

unread,
Feb 17, 2017, 12:24:08 AM2/17/17
to Ginger Devel
From: Rajat Gupta <rajat....@gmail.com>

1. Fixed Apply button of audit config can be clicked when no changes was made to audit config panel
2. Fixed volume group listing will not refresh after extend/reduce volume
3. Added validation and fixed error message while adding swap device
4. Introducing Volume group action buttons
5. Fixed duplication of user list in user management user list
6. Externalized active value in audit dispatcher details and list sections.

model/swaps.py | 2 +-
ui/js/host-admin-configauditrule.js | 4 ++
ui/js/host-admin.js | 25 +++++++-
ui/js/host-storage-addswap.js | 3 +-
ui/js/host-storage-vg.js | 29 ++-------
ui/js/host-storage.js | 89 ++++++++++++++++++++++++++-
ui/pages/host-admin-ConfigAuditRule.html.tmpl | 2 +-
7 files changed, 120 insertions(+), 34 deletions(-)

--
2.1.0

rajg...@linux.vnet.ibm.com

unread,
Feb 17, 2017, 12:24:10 AM2/17/17
to Ginger Devel
From: Rajat Gupta <rajat....@gmail.com>

Fixed duplication of user list in user management user list

Signed-off-by: Rajat Gupta <rajat....@gmail.com>
---
ui/js/host-admin.js | 3 +++
1 file changed, 3 insertions(+)

diff --git a/ui/js/host-admin.js b/ui/js/host-admin.js
index cccb54b..833752b 100644
--- a/ui/js/host-admin.js
+++ b/ui/js/host-admin.js
@@ -619,13 +619,16 @@ ginger.initUserManagement = function() {
userProfile: result[i]["profile"]
}));
$(".ginger .host-admin .user-manage").append(nodeNameItem);
+ $('#usrMgmtRefreshBtn').prop('disabled', false);
}
}, function(err) {
wok.message.error(err.responseJSON.reason, '#alert-modal-user-container', true);
+ $('#usrMgmtRefreshBtn').prop('disabled', false);
});
};

$('#usrMgmtRefreshBtn').on('click', function() {
+ $(this).prop('disabled', true);
listUsers();
});

--
2.1.0

rajg...@linux.vnet.ibm.com

unread,
Feb 17, 2017, 12:24:10 AM2/17/17
to Ginger Devel
From: Rajat Gupta <rajat....@gmail.com>

Fixed volume group listing will not refresh after extend/reduce volume

Signed-off-by: Rajat Gupta <rajat....@gmail.com>
---
ui/js/host-storage-vg.js | 29 ++++-------------------------
1 file changed, 4 insertions(+), 25 deletions(-)

diff --git a/ui/js/host-storage-vg.js b/ui/js/host-storage-vg.js
index e8e1767..fbc8774 100644
--- a/ui/js/host-storage-vg.js
+++ b/ui/js/host-storage-vg.js
@@ -467,18 +467,7 @@ ginger.initVolumeGroupEdit = function(){

ginger.editgetVolumeGroup(volumeName,vgModifyParams,type,function(result){
wok.message.success(i18n['GINVG00035M'].replace("%1", volumeName), '#alert-vg-container');
-
- var pvList = result['pvNames'];
- var addedPvs = [];
- $.each(pvList,function(index,pv){
- var pvPath = {};
- pvPath['path']=pv;
- addedPvs.push(pvPath);
- });
- $("#addedPvList tbody").html("");
- $("#addedPvList").DataTable().destroy();
- ginger.populateAddedPvList(addedPvs,volumeName);
-
+ $('#volume-groups-refresh-btn').trigger('click');
$("#vg-reduce").css("display","block");
$("#add-expand-vg").css("display","none");
wok.window.close();
@@ -583,19 +572,9 @@ ginger.reduceVolumeGroup = function(volumeName){
};

ginger.editgetVolumeGroup(volumeName,vgModifyParams,type,function(result){
- wok.message.success(i18n['GINVG00034M'].replace("%1", volumeName), '#alert-vg-create-modal-container');
-
- var pvList = result['pvNames'];
- var addedPvs = [];
- $.each(pvList,function(index,pv){
- var pvPath = {};
- pvPath['path']=pv;
- addedPvs.push(pvPath);
- });
- $("#addedPvList tbody").html("");
- $("#addedPvList").DataTable().destroy();
- ginger.populateAddedPvList(addedPvs,volumeName);
-
+ wok.message.success(i18n['GINVG00034M'].replace("%1", volumeName), '#alert-vg-container');
+ $('#volume-groups-refresh-btn').trigger('click');
+ wok.window.close();
},function(err){
wok.message.error(err.responseJSON.reason,'#alert-vg-create-modal-container');
});
--
2.1.0

rajg...@linux.vnet.ibm.com

unread,
Feb 17, 2017, 12:24:11 AM2/17/17
to Ginger Devel
From: Rajat Gupta <rajat....@gmail.com>

Externalized active value in audit dispatcher details and list sections.

Signed-off-by: Rajat Gupta <rajat....@gmail.com>
---
ui/js/host-admin.js | 22 +++++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/ui/js/host-admin.js b/ui/js/host-admin.js
index 833752b..1a7e14b 100644
--- a/ui/js/host-admin.js
+++ b/ui/js/host-admin.js
@@ -1457,9 +1457,20 @@ ginger.createDispatcherPluginTable = function(data){
$.each(data, function(index, log){
if(log){
rows += "<tr><td>" + log['name'] + "</td>";
- rows += "<td>" + log['details']['active'] + "</td>";
+ if(log['details']['active'] == "yes"){
+ active = i18n['GINNET0077M'];
+ }else{
+ active = i18n['GINNET0078M'];
+ }
+ rows += "<td>" + active + "</td>";
rows += "<td style=\"text-align:center;\" class=\"details-control\"><span class=\"fa fa-chevron-down common-down fa-lg\"></span></td>";
- rows +="<td>" +JSON.stringify(log['details'])+"</td></tr>";
+ details = log['details'];
+ if(details["active"] == "yes"){
+ details["active"] = i18n['GINNET0077M'];
+ }else{
+ details["active"] = i18n['GINNET0078M'];
+ }
+ rows +="<td>" +JSON.stringify(details)+"</td></tr>";
}
});
}
@@ -1664,10 +1675,15 @@ ginger.getPluginDetails = function(){
$("#direction").val(detailsInfo['direction']);
$("#format").val(detailsInfo['format']);
$("#args").val(detailsInfo['args']);
- $("#active").val(detailsInfo['active']);
+ if(detailsInfo['active'] == i18n['GINNET0077M']){
+ $("#active").val("yes");
+ }else{
+ $("#active").val("no");
+ }
$("#path").val(detailsInfo['path']);
$("#type").val(detailsInfo['type']);
$("#active").selectpicker();
+ $('#active').selectpicker('refresh');



--
2.1.0

rajg...@linux.vnet.ibm.com

unread,
Feb 17, 2017, 12:24:18 AM2/17/17
to Ginger Devel
From: Rajat Gupta <rajat....@gmail.com>

Introducing Volume group action buttons

Signed-off-by: Rajat Gupta <rajat....@gmail.com>
---
ui/js/host-storage.js | 89 +++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 86 insertions(+), 3 deletions(-)

diff --git a/ui/js/host-storage.js b/ui/js/host-storage.js
index 228037c..abcdcf6 100644
--- a/ui/js/host-storage.js
+++ b/ui/js/host-storage.js
@@ -293,13 +293,14 @@ ginger.initVolumeGroupGridData = function() {
orderable: false,
targets: 2
}],
- "dom": '<"#vg-buttons.row pull-left"<"vg-buttons pull-right"><"add pull-right">><"row"<"col-sm-12 filter"<"pull-right"l><"pull-right"f>>><"row"<"col-sm-12"t>><"row"<"col-sm-6 pages"p><"col-sm-6 info"i>>',
+ "dom": '<"#vg-buttons.row pull-left"<"#vg-actions.col-sm-2"><"vg-buttons pull-right"><"add pull-right">><"row"<"col-sm-12 filter"<"pull-right"l><"pull-right"f>>><"row"<"col-sm-12"t>><"row"<"col-sm-6 pages"p><"col-sm-6 info"i>>',
"initComplete": function(settings, json) {
wok.initCompleteDataTableCallback(settings);
var refreshButton = '<button class="btn btn-primary pull-left" id="volume-groups-refresh-btn" aria-expanded="false"><i class="fa fa-refresh">&nbsp;</i> ' + i18n['GINTITLE0021M'] + '</button>';
var addButton = '<button class="btn btn-primary" id="volume-groups-add-btn" aria-expanded="false"><i class="fa fa-plus-circle">&nbsp;</i>' + i18n['GINBG00004M'] + '</button>';
$(".vg-buttons").html(refreshButton);
$(".add").append(addButton);
+ ginger.createVgActionButtons();
},
"oLanguage": {
"sEmptyTable": i18n['GINNET0063M']
@@ -320,6 +321,47 @@ ginger.initVolumeGroupGridData = function() {
wok.window.open('plugins/ginger/host-storage-vg-add.html');
});

+ //Volume group deletion handler
+ $('#volume-group-delete-btn').on('click',function(event){
+ if(volumeGroupTable.rows('.selected').data().length==0){
+ var settings = {
+ content: i18n['GINVG00037M'],
+ confirm: i18n["GINNET0015M"]
+ };
+ wok.confirm(settings,function(){},function(){});
+ }else{
+ var selectedRowsData = volumeGroupTable.rows('.selected').data();
+ var selectedRows = [];
+ $.each(selectedRowsData,function(index,row){
+ selectedRows.push(row[0]);
+ });
+ var settings = {
+ content: i18n['GINVG0003M'].replace('%1',selectedRows),
+ confirm: i18n["GINNET0015M"]
+ };
+ wok.confirm(settings, function(){
+ $.each(selectedRows,function(index,row){
+ ginger.deleteVolumeGroup(row,function(result){
+ wok.message.success(i18n['GINVG0002M'].replace("%1",row), '#alert-vg-container');
+ if(index == (selectedRows.length - 1)){
+ $('#volume-groups-refresh-btn').trigger('click');
+ }
+ },function(error){
+ wok.message.error(error.responseJSON.reason, '#alert-vg-container', true);
+ if(index == (selectedRows.length - 1)){
+ $('#volume-groups-refresh-btn').trigger('click');
+ }
+ });
+ });
+ });
+ }
+ });
+
+ //Volume Group resize handler
+ $('#volume-group-edit-btn').on('click',function(){
+ ginger.vgResizeHandler(volumeGroupTable.rows('.selected').data());
+ });
+
// Add event listener for opening and closing details
$('#volume-group-table tbody').off();
$('#volume-group-table tbody').on('click', 'td.details-control', function () {
@@ -347,8 +389,15 @@ ginger.initVolumeGroupGridData = function() {
$(this).toggleClass("selected");
}

- if(volumeGroupTable.rows('.selected').data().length<=1){
- ginger.vgResizeHandler(volumeGroupTable.rows('.selected').data());
+ if(volumeGroupTable.rows('.selected').data().length>1){
+ $('#volume-group-edit-btn').off();
+ $('#volume-group-edit-btn').addClass("disablelink");
+ }else{
+ $('#volume-group-edit-btn').off();
+ $('#volume-group-edit-btn').removeClass("disablelink");
+ $('#volume-group-edit-btn').on('click',function(){
+ ginger.vgResizeHandler(volumeGroupTable.rows('.selected').data());
+ });
}
});

@@ -359,6 +408,40 @@ ginger.initVolumeGroupGridData = function() {
});
};

+//Volume group buttons list
+ginger.createVgActionButtons = function(){
+ var actionButton = [{
+ id: 'volume-group-edit-btn',
+ class: 'fa fa-arrows-h',
+ label: i18n['GINVG00031M']
+ },
+ {
+ id: 'volume-group-delete-btn',
+ class: 'fa fa-minus-circle',
+ label: i18n['GINNET0013M'],
+ critical:true,
+ }];
+
+ var actionListSettings = {
+ panelID: 'vg-actions',
+ buttons: actionButton,
+ type: 'action'
+ };
+ ginger.createActionButtons(actionListSettings);
+};
+
+ginger.volumeGroupDetailsPopulation = function(volumeGroupName,row){
+ var vgDetails = '';
+ ginger.getVolumeGroupDetails(volumeGroupName,function(data){
+ vgDetails = ginger.populateVolumeGroupDetails(data);
+ row.child('<div class="volumeGroup-details" style="display: block;"><div class="details-list">'+vgDetails+'</div></div>').show();
+ },function(e){
+ vgDetails = '';
+ });
+
+ return vgDetails;
+};
+
ginger.populateVolumeGroupDetails = function(data){
var text='';
var value;
--
2.1.0

rajg...@linux.vnet.ibm.com

unread,
Feb 17, 2017, 12:24:40 AM2/17/17
to Ginger Devel
From: Rajat Gupta <rajat....@gmail.com>

Added validation and fixed error message while adding swap device

Signed-off-by: Rajat Gupta <rajat....@gmail.com>
---
model/swaps.py | 2 +-
ui/js/host-storage-addswap.js | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/model/swaps.py b/model/swaps.py
index a55ebdd..58a93ae 100644
--- a/model/swaps.py
+++ b/model/swaps.py
@@ -78,7 +78,7 @@ class SwapsModel(object):

except (InvalidParameter) as e:
cb('OK', False)
- raise InvalidParameter("GINSP00020E")
+ raise InvalidParameter("GINSP00020E", {'file': file_loc})
except (OperationFailed) as e:
cb('OK', False)
raise OperationFailed('GINSP00005E',
diff --git a/ui/js/host-storage-addswap.js b/ui/js/host-storage-addswap.js
index 87b2de3..1a5eff9 100644
--- a/ui/js/host-storage-addswap.js
+++ b/ui/js/host-storage-addswap.js
@@ -162,7 +162,8 @@ $("#Swap-submit").on('click', function(event) {
}, function(result) {
wok.window.close();
ginger.initSwapDevicesGridData();
- wok.message.error(result.message, "#swap-message", true);
+ var message = result.message ? result.message : result.responseJSON.reason;
+ wok.message.error(message, "#swap-message", true);
});
}
}
--
2.1.0

Daniel Henrique Barboza

unread,
Feb 17, 2017, 5:35:42 AM2/17/17
to ginger-...@googlegroups.com
Applied. Thanks!
Reply all
Reply to author
Forward
0 new messages