You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2018/01/25 22:09:39 UTC

[airavata-django-portal] 06/06: AIRAVATA-2615 Stop polling if experiment no longer progressing

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

machristie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git

commit 9ba962dce6e193da89b4a50ed69bf49cfdb1ea48
Author: Marcus Christie <ma...@iu.edu>
AuthorDate: Thu Jan 25 17:08:32 2018 -0500

    AIRAVATA-2615 Stop polling if experiment no longer progressing
---
 .../api/static/django_airavata_api/js/models/BaseModel.js     |  5 +++++
 .../api/static/django_airavata_api/js/models/Experiment.js    | 11 +++++++++++
 django_airavata/apps/api/views.py                             | 10 ++++++++--
 .../js/components/experiment/ExperimentSummary.vue            | 11 ++++++++++-
 4 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/BaseModel.js b/django_airavata/apps/api/static/django_airavata_api/js/models/BaseModel.js
index 8b5679f..5bb0c63 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/models/BaseModel.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/BaseModel.js
@@ -54,6 +54,11 @@ export default class BaseModel {
     convertModelField(modelClass, fieldValue, fieldDefault) {
         if (typeof fieldValue !== 'undefined') {
             if (modelClass.prototype instanceof BaseEnum) {
+                // When cloning the fieldValue is an enum instance
+                if (fieldValue instanceof BaseEnum){
+                    return fieldValue;
+                }
+                // Otherwise it is an integer that we need to convert to enum
                 return modelClass.byValue(fieldValue);
             } else {
                 return new modelClass(fieldValue);
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/Experiment.js b/django_airavata/apps/api/static/django_airavata_api/js/models/Experiment.js
index 1f249dc..560e4ce 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/models/Experiment.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/Experiment.js
@@ -1,6 +1,7 @@
 
 import BaseModel from './BaseModel';
 import ErrorModel from './ErrorModel'
+import ExperimentState from './ExperimentState'
 import ExperimentStatus from './ExperimentStatus'
 import InputDataObjectType from './InputDataObjectType'
 import OutputDataObjectType from './OutputDataObjectType'
@@ -98,4 +99,14 @@ export default class Experiment extends BaseModel {
         }
         return validationResults;
     }
+
+    get isProgressing() {
+        const progressingStates = [ExperimentState.SCHEDULED,
+                                   ExperimentState.LAUNCHED,
+                                   ExperimentState.EXECUTING,
+                                   ExperimentState.CANCELING];
+        return this.experimentStatus
+            && this.experimentStatus.length > 0
+            && progressingStates.indexOf(this.experimentStatus[0].state) >= 0;
+    }
 }
diff --git a/django_airavata/apps/api/views.py b/django_airavata/apps/api/views.py
index 45be9db..99fce0d 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -275,12 +275,18 @@ class FullExperimentViewSet(mixins.RetrieveModelMixin,
             self.request.airavata_client.getDataProduct(self.authz_token,
                                                         output.value)
             for output in experimentModel.experimentOutputs
-            if output.type in (DataType.URI, DataType.STDOUT, DataType.STDERR)]
+            if (output.value.startswith('airavata-dp')
+                and output.type in (DataType.URI,
+                                    DataType.STDOUT,
+                                    DataType.STDERR))]
         inputDataProducts = [
             self.request.airavata_client.getDataProduct(self.authz_token,
                                                         inp.value)
             for inp in experimentModel.experimentInputs
-            if inp.type in (DataType.URI, DataType.STDOUT, DataType.STDERR)]
+            if (inp.value.startswith('airavata-dp')
+                and inp.type in (DataType.URI,
+                                 DataType.STDOUT,
+                                 DataType.STDERR))]
         appInterfaceId = experimentModel.executionId
         applicationInterface = self.request.airavata_client\
             .getApplicationInterface(self.authz_token, appInterfaceId)
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/ExperimentSummary.vue b/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/ExperimentSummary.vue
index 77c7535..ba00545 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/ExperimentSummary.vue
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/ExperimentSummary.vue
@@ -52,7 +52,13 @@
                                 </tr>
                                 <tr>
                                     <th scope="row">Experiment Status</th>
-                                    <td>{{ fullExperiment.experimentStatusName }}</td>
+                                    <td>
+                                        <template v-if="fullExperiment.experiment.isProgressing">
+                                            <i class="fa fa-refresh fa-spin"></i>
+                                            <span class="sr-only">Progressing...</span>
+                                        </template>
+                                        {{ fullExperiment.experimentStatusName }}
+                                    </td>
                                 </tr>
                                 <!--  TODO: leave this out for now -->
                                 <!-- <tr>
@@ -147,6 +153,9 @@ export default {
         },
         initPollingExperiment: function() {
             var pollExperiment = function() {
+                if (!this.localFullExperiment.experiment.isProgressing) {
+                    return;
+                }
                 this.loadExperiment()
                     .then(exp => {
                         setTimeout(pollExperiment.bind(this), 3000);

-- 
To stop receiving notification emails like this one, please contact
machristie@apache.org.