This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack-primate.git


The following commit(s) were added to refs/heads/master by this push:
     new 401e797  autogenview: implement recursive action polling
401e797 is described below

commit 401e79703c5bda4fd8d783d89aa7fc259a5066f5
Author: Rohit Yadav <rohit.ya...@shapeblue.com>
AuthorDate: Sat Nov 23 03:48:43 2019 +0530

    autogenview: implement recursive action polling
    
    This implements polling in the detail view and refreshes detail view
    on async job/action completion (in both success and failure cases.
    
    Signed-off-by: Rohit Yadav <rohit.ya...@shapeblue.com>
---
 src/components/header/HeaderNotice.vue |  2 +-
 src/views/AutogenView.vue              | 29 +++++++++++++++++++++++------
 2 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/src/components/header/HeaderNotice.vue 
b/src/components/header/HeaderNotice.vue
index 6170d89..c796a62 100644
--- a/src/components/header/HeaderNotice.vue
+++ b/src/components/header/HeaderNotice.vue
@@ -79,7 +79,7 @@ export default {
     startPolling () {
       this.poller = setInterval(() => {
         this.pollJobs()
-      }, 2500)
+      }, 4000)
     },
     async pollJobs () {
       var hasUpdated = false
diff --git a/src/views/AutogenView.vue b/src/views/AutogenView.vue
index 76f8226..c283562 100644
--- a/src/views/AutogenView.vue
+++ b/src/views/AutogenView.vue
@@ -508,6 +508,22 @@ export default {
       }).then(function () {
       })
     },
+    pollActionCompletion (jobId, action) {
+      api('queryAsyncJobResult', { jobid: jobId }).then(json => {
+        var result = json.queryasyncjobresultresponse
+        if (result.jobstatus === 1) {
+          this.fetchData()
+        } else if (result.jobstatus === 2) {
+          this.fetchData()
+        } else {
+          this.$message
+            .loading(this.$t(action.label) + ' in progress for ' + 
this.resource.name, 3)
+            .then(() => this.pollActionCompletion(jobId, action))
+        }
+      }).catch(function (e) {
+        console.log('Error encountered while fetching async job result' + e)
+      })
+    },
     handleSubmit (e) {
       e.preventDefault()
       this.form.validateFields((err, values) => {
@@ -544,12 +560,15 @@ export default {
             params.id = this.resource.id
           }
 
+          var hasJobId = false
           api(this.currentAction.api, params).then(json => {
             for (const obj in json) {
               if (obj.includes('response')) {
                 for (const res in json[obj]) {
                   if (res === 'jobid') {
                     this.$store.dispatch('AddAsyncJob', { title: 
this.$t(this.currentAction.label), jobid: json[obj][res], description: 
this.resource.name, status: 'progress' })
+                    this.pollActionCompletion(json[obj][res], 
this.currentAction)
+                    hasJobId = true
                     break
                   }
                 }
@@ -558,6 +577,10 @@ export default {
             }
             if (this.currentAction.icon === 'delete') {
               this.$router.go(-1)
+            } else {
+              if (!hasJobId) {
+                this.fetchData()
+              }
             }
           }).catch(error => {
             console.log(error)
@@ -568,12 +591,6 @@ export default {
           }).finally(f => {
             this.closeAction()
           })
-
-          // TODO: listen for notification success/fail and refresh
-          const fetchData = this.fetchData
-          setTimeout(function () {
-            fetchData()
-          }, 2500)
         }
       })
     },

Reply via email to