[Kimchi-devel] [PATCH] Enhancement:Enable operations when generating a debug report

Wen Wang wenwang at linux.vnet.ibm.com
Fri Jun 27 08:12:39 UTC 2014


Hi Aline,

Now I am using sessionStorage memorizing the task id which is impossible 
to be located in another browser. I have talked with Zhengsheng and 
Sheldon, we figured out a solution to that. Pls ignore this patch since 
there might need more support from the backend. I will send an RFC mail 
to explain our idea and it's not just for debug report but also for all 
tasks. Thanks for the kindly reminding.

Best Regards
Wang Wen


On 6/27/2014 4:41 AM, Aline Manera wrote:
>
> It does not work for multiple client accesses.
> If I start a debug report generation, the loading icon is displayed 
> but if I access kimchi from other browser
> I don't see anything related to that
> As we talked in the scrum meeting we will need to add a backend logic 
> to enable it on ui
>
> And also allow create multiples debug reports at the same time - so 
> the "Generate" button should always be enabled
> And the "Rename", "Delete" and "Download" also should always be 
> enabled when a debug report is selected.
>
> On 06/24/2014 07:38 AM, Wen Wang wrote:
>> From: Wen Wang <wenwang at linux.vnet.ibm.com>
>>
>> 1) Enabled remove and download button when generating a debug report
>> 2) Fixed the bug when changing tabs or refreshing generate indicator
>> disappears.
>>
>> Signed-off-by: Wen Wang <wenwang at linux.vnet.ibm.com>
>> ---
>>   ui/js/src/kimchi.grid.js            |    7 ++++
>>   ui/js/src/kimchi.host.js            |   67 
>> +++++++++++++++++++++++++++++++++-
>>   ui/js/src/kimchi.report_add_main.js |   36 ++++++-------------
>>   3 files changed, 83 insertions(+), 27 deletions(-)
>>
>> diff --git a/ui/js/src/kimchi.grid.js b/ui/js/src/kimchi.grid.js
>> index 2c70969..615d469 100644
>> --- a/ui/js/src/kimchi.grid.js
>> +++ b/ui/js/src/kimchi.grid.js
>> @@ -234,6 +234,12 @@ kimchi.widget.Grid.prototype = (function() {
>>               : null;
>>       };
>>
>> +    var getSelectedAbove = function() {
>> +        return this.selectedIndex >= 0
>> +            ? this.data[this.selectedIndex - 1]
>> +            : null;
>> +    };
>> +
>>       var startResizing = function(container, event) {
>>           var grid = event.data.grid;
>>           kimchi.widget.Grid.beingResized = grid;
>> @@ -520,6 +526,7 @@ kimchi.widget.Grid.prototype = (function() {
>>           createDOM: createDOM,
>>           setData: setData,
>>           getSelected: getSelected,
>> +        getSelectedAbove:getSelectedAbove,
>>           reload: reload,
>>           destroy: destroy
>>       };
>> diff --git a/ui/js/src/kimchi.host.js b/ui/js/src/kimchi.host.js
>> index f3de831..c3d0eef 100644
>> --- a/ui/js/src/kimchi.host.js
>> +++ b/ui/js/src/kimchi.host.js
>> @@ -310,7 +310,13 @@ kimchi.host_main = function() {
>>                   label: i18n['KCHDR6009M'],
>>                   disabled: true,
>>                   onClick: function(event) {
>> -                    var report = reportGrid.getSelected();
>> +                    var report = null;
>> +                    if ($('.grid-body-view table tbody 
>> tr:first-child td:last-child',
>> +                            '#' + reportGridID).attr('id') === 
>> 'id-debug-img') {
>> +                        report = reportGrid.getSelectedAbove();
>> +                    } else {
>> +                        report = reportGrid.getSelected();
>> +                    }
>>                       if(!report) {
>>                           return;
>>                       }
>> @@ -341,7 +347,13 @@ kimchi.host_main = function() {
>>                   label: i18n['KCHDR6010M'],
>>                   disabled: true,
>>                   onClick: function(event) {
>> -                    var report = reportGrid.getSelected();
>> +                    var report = null;
>> +                    if ($('.grid-body-view table tbody 
>> tr:first-child td:last-child',
>> +                            '#' + reportGridID).attr('id') === 
>> 'id-debug-img') {
>> +                        report = reportGrid.getSelectedAbove();
>> +                    } else {
>> +                        report = reportGrid.getSelected();
>> +                    }
>>                       if(!report) {
>>                           return;
>>                       }
>> @@ -383,6 +395,28 @@ kimchi.host_main = function() {
>>               else {
>>                   initReportGrid(reports);
>>               }
>> +            var taskID = sessionStorage.getItem('sessionDebugReportID')
>> +            var reportName = 
>> sessionStorage.getItem('sessionDebugReportName');
>> +            if (taskID != null) {
>> +                kimchi.getTask(taskID, function(result) {
>> +                    var taskStatus = result['status'];
>> +                    if (taskStatus === 'running') {
>> +                        $('.grid-body-view table tbody', '#' + 
>> reportGridID).prepend(
>> +                            '<tr>' +
>> +                                '<td>' +
>> +                                    '<div 
>> class="cell-text-wrapper">' + reportName + '</div>' +
>> +                                '</td>' +
>> +                                '<td id ="id-debug-img">' +
>> +                                    '<div 
>> class="cell-text-wrapper">' + i18n['KCHDR6007M'] + '</div>' +
>> +                                '</td>' +
>> +                            '</tr>'
>> +                        );
>> +                        $('#' + reportGridID + 
>> '-generate-button').prop('disabled', true);
>> +                    } else {
>> +                        $('#' + reportGridID + 
>> '-generate-button').prop('disabled', false);
>> +                    }
>> +                }, '');
>> +            }
>>           }, function(error) {
>>               if(error['status'] == 403) {
>>                   $('#debug-report-section').addClass('hidden');
>> @@ -473,6 +507,35 @@ kimchi.host_main = function() {
>>                       .subscribe(listDebugReports);
>>               }
>>           });
>> +        var taskID = sessionStorage.getItem('sessionDebugReportID');
>> +        if (taskID != null) {
>> +            var isRunning =false;
>> +            var trackTask = function() {
>> +                kimchi.getTask(taskID, function(result) {
>> +                    var taskStatus = result['status'];
>> +                    switch(taskStatus) {
>> +                    case 'running':
>> +                        if(kimchi.stopTrackingReport === true) {
>> +                            return;
>> +                        }
>> +                        setTimeout(function() {
>> +                            trackTask();
>> +                        }, 200);
>> +                        break;
>> +                    case 'finished':
>> +                        listDebugReports();
>> +                        isRunning = true;
>> +                        break;
>> +                    default:
>> +                        break;
>> +                    }
>> +                }, '');
>> +            }
>> +            if (!isRunning)
>> +            {
>> +               trackTask();
>> +            }
>> +        }
>>       };
>>
>>       kimchi.getHost(function(data) {
>> diff --git a/ui/js/src/kimchi.report_add_main.js 
>> b/ui/js/src/kimchi.report_add_main.js
>> index 43484f5..3fdaa9d 100644
>> --- a/ui/js/src/kimchi.report_add_main.js
>> +++ b/ui/js/src/kimchi.report_add_main.js
>> @@ -17,25 +17,10 @@
>>    */
>>   kimchi.report_add_main = function() {
>>       var reportGridID = 'available-reports-grid';
>> -    var generateButton = $('#' + reportGridID + '-generate-button');
>>       var addReportForm = $('#form-report-add');
>>       var submitButton = $('#button-report-add');
>>       var nameTextbox = $('input[name="name"]', addReportForm);
>>       nameTextbox.select();
>> -
>> -    /*
>> -     * FIXME:
>> -     *   Currently, all buttons will be disabled when a report is being
>> -     * generated. Though operations on existing debug reports shouldn't
>> -     * be affected when a new one is being generated, and it's expected
>> -     * to enable Rename/Remove/Download Buttons whenever users click an
>> -     * existing report row in the grid.
>> -     */
>> -    var disableToolbarButtons = function(event, toEnable) {
>> -        $('#' + reportGridID + ' .grid-toolbar button')
>> -            .prop('disabled', !toEnable);
>> -    };
>> -
>>       var submitForm = function(event) {
>>           if(submitButton.prop('disabled')) {
>>               return false;
>> @@ -48,15 +33,14 @@ kimchi.report_add_main = function() {
>>           }
>>           var formData = addReportForm.serializeObject();
>>           var taskAccepted = false;
>> -        disableToolbarButtons();
>> +        $('#' + reportGridID + '-generate-button').prop('disabled', 
>> true);
>>           submitButton.prop('disabled', true);
>> -        $('.grid-body table tr', '#' + reportGridID)
>> -            .on('click', disableToolbarButtons);
>>           kimchi.createReport(formData, function(result) {
>> -            $('.grid-body-view table tr:first-child', '#' + 
>> reportGridID).remove();
>> -            $('.grid-body table tr', '#' + reportGridID)
>> -                .off('click', disableToolbarButtons);
>> -            generateButton.prop('disabled', false);
>> +            $('.grid-body-view table tr:first-child',
>> +                '#' + reportGridID).remove();
>> +            $('#' + reportGridID + 
>> '-generate-button').prop('disabled', false);
>> +            sessionStorage.removeItem('sessionDebugReportID');
>> + sessionStorage.removeItem('sessionDebugReportName');
>>               kimchi.topic('kimchi/debugReportAdded').publish({
>>                   result: result
>>               });
>> @@ -73,10 +57,10 @@ kimchi.report_add_main = function() {
>>               taskAccepted &&
>>                   $('.grid-body-view table tr:first-child',
>>                       '#' + reportGridID).remove();
>> -            $('.grid-body table tr', '#' + reportGridID)
>> -                .off('click', disableToolbarButtons);
>> -            generateButton.prop('disabled', false);
>> +            $('#' + reportGridID + 
>> '-generate-button').prop('disabled', false);
>>               submitButton.prop('disabled', false);
>> +            sessionStorage.removeItem('sessionDebugReportID');
>> + sessionStorage.removeItem('sessionDebugReportName');
>>               nameTextbox.select();
>>           }, function(result) {
>>               if(taskAccepted) {
>> @@ -85,6 +69,8 @@ kimchi.report_add_main = function() {
>>               taskAccepted = true;
>>               kimchi.window.close();
>>               var reportName = nameTextbox.val() || i18n['KCHDR6012M'];
>> + sessionStorage.setItem('sessionDebugReportName',reportName);
>> + sessionStorage.setItem('sessionDebugReportID',result['id']);
>>               $('.grid-body-view table tbody', '#' + 
>> reportGridID).prepend(
>>                   '<tr>' +
>>                       '<td>' +
>





More information about the Kimchi-devel mailing list