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/29 21:07:14 UTC
[airavata-django-portal] 02/03: AIRAVATA-2615 Redirect from launch
to experiment summary
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 9289284d07f62afe39a63e690b5fba44d4f2b96b
Author: Marcus Christie <ma...@iu.edu>
AuthorDate: Mon Jan 29 10:53:34 2018 -0500
AIRAVATA-2615 Redirect from launch to experiment summary
'launching' query param/prop added to experiment summary to indicate
that the experiment is currently launching so that experiment summary
knows to poll for status updates until the experiment has launched.
---
.../django_airavata_api/js/models/Experiment.js | 13 ++++++++
.../js/components/experiment/ExperimentSummary.vue | 35 ++++++++++++----------
.../js/containers/CreateExperimentContainer.vue | 13 +++++++-
.../js/containers/ViewExperimentContainer.vue | 6 +++-
.../js/entry-view-experiment.js | 6 +++-
.../django_airavata_workspace/view_experiment.html | 2 +-
django_airavata/apps/workspace/views.py | 5 +++-
7 files changed, 59 insertions(+), 21 deletions(-)
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 560e4ce..bcbffdc 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
@@ -109,4 +109,17 @@ export default class Experiment extends BaseModel {
&& this.experimentStatus.length > 0
&& progressingStates.indexOf(this.experimentStatus[0].state) >= 0;
}
+
+ get hasLaunched() {
+ const hasLaunchedStates = [ExperimentState.SCHEDULED,
+ ExperimentState.LAUNCHED,
+ ExperimentState.EXECUTING,
+ ExperimentState.CANCELING,
+ ExperimentState.CANCELED,
+ ExperimentState.FAILED,
+ ExperimentState.COMPLETED];
+ return this.experimentStatus
+ && this.experimentStatus.length > 0
+ && hasLaunchedStates.indexOf(this.experimentStatus[0].state) >= 0;
+ }
}
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 ba00545..17d2634 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
@@ -23,12 +23,12 @@
</tr>
<tr>
<th scope="row">Project</th>
- <td>{{ fullExperiment.projectName }}</td>
+ <td>{{ localFullExperiment.projectName }}</td>
</tr>
<tr>
<th scope="row">Outputs</th>
<td>
- <template v-for="output in fullExperiment.outputDataProducts">
+ <template v-for="output in localFullExperiment.outputDataProducts">
{{ output.filename }}
</template>
</td>
@@ -44,27 +44,27 @@
</tr>
<tr>
<th scope="row">Application</th>
- <td>{{ fullExperiment.applicationName }}</td>
+ <td>{{ localFullExperiment.applicationName }}</td>
</tr>
<tr>
<th scope="row">Compute Resource</th>
- <td>{{ fullExperiment.computeHostName }}</td>
+ <td>{{ localFullExperiment.computeHostName }}</td>
</tr>
<tr>
<th scope="row">Experiment Status</th>
<td>
- <template v-if="fullExperiment.experiment.isProgressing">
+ <template v-if="localFullExperiment.experiment.isProgressing">
<i class="fa fa-refresh fa-spin"></i>
<span class="sr-only">Progressing...</span>
</template>
- {{ fullExperiment.experimentStatusName }}
+ {{ localFullExperiment.experimentStatusName }}
</td>
</tr>
<!-- TODO: leave this out for now -->
<!-- <tr>
<th scope="row">Notification List</th>
- <td>{{ fullExperiment.experiment.emailAddresses
- ? fullExperiment.experiment.emailAddresses.join(", ")
+ <td>{{ experiment.emailAddresses
+ ? experiment.emailAddresses.join(", ")
: '' }}</td>
</tr> -->
<tr>
@@ -73,7 +73,7 @@
</tr>
<tr>
<th scope="row">Last Modified Time</th>
- <td><span :title="fullExperiment.experimentStatus.timeOfStateChange.toString()">{{ lastModifiedTime }}</span></td>
+ <td><span :title="localFullExperiment.experimentStatus.timeOfStateChange.toString()">{{ lastModifiedTime }}</span></td>
</tr>
<tr>
<th scope="row">Wall Time Limit</th>
@@ -95,7 +95,7 @@
<!-- TODO -->
<th scope="row">Inputs</th>
<td>
- <template v-for="input in fullExperiment.inputDataProducts">
+ <template v-for="input in localFullExperiment.inputDataProducts">
{{ input.filename }}
</template>
</td>
@@ -127,6 +127,10 @@ export default {
type: models.FullExperiment,
required: true
},
+ launching: {
+ type: Boolean,
+ default: false
+ }
},
data () {
return {
@@ -153,13 +157,12 @@ export default {
},
initPollingExperiment: function() {
var pollExperiment = function() {
- if (!this.localFullExperiment.experiment.isProgressing) {
- return;
+ if ((this.launching && !this.localFullExperiment.experiment.hasLaunched) || this.localFullExperiment.experiment.isProgressing) {
+ this.loadExperiment()
+ .then(exp => {
+ setTimeout(pollExperiment.bind(this), 3000);
+ });
}
- this.loadExperiment()
- .then(exp => {
- setTimeout(pollExperiment.bind(this), 3000);
- })
}.bind(this);
setTimeout(pollExperiment, 3000);
}
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/containers/CreateExperimentContainer.vue b/django_airavata/apps/workspace/static/django_airavata_workspace/js/containers/CreateExperimentContainer.vue
index 52b6e9d..1ece761 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/containers/CreateExperimentContainer.vue
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/containers/CreateExperimentContainer.vue
@@ -1,5 +1,8 @@
<template>
- <experiment-editor v-if="appModule && appInterface" :experiment="experiment" :app-module="appModule" :app-interface="appInterface">
+ <experiment-editor v-if="appModule && appInterface" :experiment="experiment"
+ :app-module="appModule" :app-interface="appInterface"
+ @saved="handleSavedExperiment"
+ @savedAndLaunched="handleSavedAndLaunchedExperiment">
<span slot="title">Create a New Experiment</span>
</experiment-editor>
</template>
@@ -27,6 +30,14 @@ export default {
'experiment-editor': ExperimentEditor,
},
methods: {
+ handleSavedExperiment: function(experiment) {
+ // Redirect to experiment view
+ window.location.assign("/workspace/experiments/" + encodeURIComponent(experiment.experimentId) + "/");
+ },
+ handleSavedAndLaunchedExperiment: function(experiment) {
+ // Redirect to experiment view
+ window.location.assign("/workspace/experiments/" + encodeURIComponent(experiment.experimentId) + "/?launching=true");
+ }
},
computed: {
},
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/containers/ViewExperimentContainer.vue b/django_airavata/apps/workspace/static/django_airavata_workspace/js/containers/ViewExperimentContainer.vue
index bebfffa..979c3ac 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/containers/ViewExperimentContainer.vue
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/containers/ViewExperimentContainer.vue
@@ -1,5 +1,5 @@
<template>
- <experiment-summary v-if="fullExperiment" :fullExperiment="fullExperiment">
+ <experiment-summary v-if="fullExperiment" :fullExperiment="fullExperiment" :launching="launching">
</experiment-summary>
</template>
@@ -14,6 +14,10 @@ export default {
initialFullExperimentData: {
required: true
},
+ launching: {
+ type: Boolean,
+ default: false,
+ }
},
data () {
return {
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/entry-view-experiment.js b/django_airavata/apps/workspace/static/django_airavata_workspace/js/entry-view-experiment.js
index a2c8c8b..cde5d1f 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/entry-view-experiment.js
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/entry-view-experiment.js
@@ -10,10 +10,11 @@ Vue.use(BootstrapVue);
new Vue({
el: '#view-experiment',
- template: '<view-experiment-container :initial-full-experiment-data="fullExperimentData"></view-experiment-container>',
+ template: '<view-experiment-container :initial-full-experiment-data="fullExperimentData" :launching="launching"></view-experiment-container>',
data () {
return {
fullExperimentData: null,
+ launching: false,
}
},
components: {
@@ -21,5 +22,8 @@ new Vue({
},
beforeMount: function () {
this.fullExperimentData = JSON.parse(this.$el.dataset.fullExperimentData);
+ if ('launching' in this.$el.dataset) {
+ this.launching = JSON.parse(this.$el.dataset.launching);
+ }
}
})
diff --git a/django_airavata/apps/workspace/templates/django_airavata_workspace/view_experiment.html b/django_airavata/apps/workspace/templates/django_airavata_workspace/view_experiment.html
index 0f12b5e..c06baaa 100644
--- a/django_airavata/apps/workspace/templates/django_airavata_workspace/view_experiment.html
+++ b/django_airavata/apps/workspace/templates/django_airavata_workspace/view_experiment.html
@@ -9,7 +9,7 @@
{% block content %}
-<div id="view-experiment" data-full-experiment-data="{{ full_experiment_data }}"></div>
+<div id="view-experiment" data-full-experiment-data="{{ full_experiment_data }}" data-launching="{{ launching }}"></div>
{% endblock content %}
diff --git a/django_airavata/apps/workspace/views.py b/django_airavata/apps/workspace/views.py
index 9f78172..363475c 100644
--- a/django_airavata/apps/workspace/views.py
+++ b/django_airavata/apps/workspace/views.py
@@ -1,4 +1,5 @@
+import json
import logging
from rest_framework.renderers import JSONRenderer
@@ -47,10 +48,12 @@ def create_experiment(request, app_module_id):
def view_experiment(request, experiment_id):
request.active_nav_item = 'experiments'
+ launching = json.loads(request.GET.get('launching', 'false'))
response = FullExperimentViewSet.as_view(
{'get': 'retrieve'})(request, experiment_id=experiment_id)
full_experiment_json = JSONRenderer().render(response.data)
return render(request, 'django_airavata_workspace/view_experiment.html', {
- 'full_experiment_data': full_experiment_json
+ 'full_experiment_data': full_experiment_json,
+ 'launching': json.dumps(launching),
})
--
To stop receiving notification emails like this one, please contact
machristie@apache.org.