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 2019/06/17 14:23:19 UTC
[airavata-django-portal] 06/11: AIRAVATA-2990 Username filtering
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 f5c6b685d5dba874465ee1c2c6717e1db77769c3
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Tue Jun 11 16:29:47 2019 -0400
AIRAVATA-2990 Username filtering
---
.../statistics/ExperimentStatisticsContainer.vue | 103 +++++++++++++++++----
.../django_airavata_api/js/service_config.js | 8 +-
django_airavata/apps/api/views.py | 2 +-
3 files changed, 92 insertions(+), 21 deletions(-)
diff --git a/django_airavata/apps/admin/static/django_airavata_admin/src/components/statistics/ExperimentStatisticsContainer.vue b/django_airavata/apps/admin/static/django_airavata_admin/src/components/statistics/ExperimentStatisticsContainer.vue
index 0a59ff1..9aa9ff8 100644
--- a/django_airavata/apps/admin/static/django_airavata_admin/src/components/statistics/ExperimentStatisticsContainer.vue
+++ b/django_airavata/apps/admin/static/django_airavata_admin/src/components/statistics/ExperimentStatisticsContainer.vue
@@ -8,9 +8,12 @@
<div class="row">
<div class="col">
<b-card header="Filter">
- <b-input-group class="w-100">
+ <b-input-group class="w-100 mb-2">
<b-input-group-prepend is-text>
- <i class="fa fa-calendar-week" aria-hidden="true"></i>
+ <i
+ class="fa fa-calendar-week"
+ aria-hidden="true"
+ ></i>
</b-input-group-prepend>
<flat-pickr
:value="dateRange"
@@ -19,10 +22,50 @@
class="form-control"
/>
<b-input-group-append>
- <b-button @click="getPast24Hours" variant="outline-secondary">Past 24 Hours</b-button>
- <b-button @click="getPastWeek" variant="outline-secondary">Past Week</b-button>
+ <b-button
+ @click="getPast24Hours"
+ variant="outline-secondary"
+ >Past 24 Hours</b-button>
+ <b-button
+ @click="getPastWeek"
+ variant="outline-secondary"
+ >Past Week</b-button>
</b-input-group-append>
</b-input-group>
+ <b-dropdown
+ text="Add Filters"
+ class="mb-2"
+ >
+ <b-dropdown-item
+ v-if="!usernameFilterEnabled"
+ @click="usernameFilterEnabled=true"
+ >Username</b-dropdown-item>
+ <b-dropdown-item>Application Name</b-dropdown-item>
+ <b-dropdown-item>Hostname</b-dropdown-item>
+ </b-dropdown>
+ <b-input-group
+ v-if="usernameFilterEnabled"
+ class="mb-2"
+ >
+ <b-form-input
+ v-model="usernameFilter"
+ placeholder="Username"
+ @keydown.native.enter="loadStatistics"
+ />
+ <b-input-group-append>
+ <b-button @click="removeUsernameFilter"><i class="fa fa-times"></i><span class="sr-only">Remove username
+ filter</span></b-button>
+ </b-input-group-append>
+ </b-input-group>
+ <template slot="footer">
+ <div class="d-flex justify-content-end">
+ <b-button
+ @click="loadStatistics"
+ class="ml-auto"
+ variant="primary"
+ >Get Statistics</b-button>
+ </div>
+ </template>
</b-card>
</div>
</div>
@@ -33,7 +76,7 @@
header-text-variant="white"
:count="experimentStatistics.allExperimentCount || 0"
title="Total Experiments"
- @click="selectExperiments(experimentStatistics.allExperiments)"
+ @click="selectedExperimentSummariesKey = 'allExperiments'"
>
<span slot="link-text">All</span>
</experiment-statistics-card>
@@ -44,7 +87,7 @@
:count="experimentStatistics.createdExperimentCount || 0"
:states="createdStates"
title="Created Experiments"
- @click="selectExperiments(experimentStatistics.createdExperiments)"
+ @click="selectedExperimentSummariesKey = 'createdExperiments'"
>
</experiment-statistics-card>
</div>
@@ -55,7 +98,7 @@
:count="experimentStatistics.runningExperimentCount || 0"
:states="runningStates"
title="Running Experiments"
- @click="selectExperiments(experimentStatistics.runningExperiments)"
+ @click="selectedExperimentSummariesKey = 'runningExperiments'"
>
</experiment-statistics-card>
@@ -68,7 +111,7 @@
:count="experimentStatistics.completedExperimentCount || 0"
:states="completedStates"
title="Completed Experiments"
- @click="selectExperiments(experimentStatistics.completedExperiments)"
+ @click="selectedExperimentSummariesKey = 'completedExperiments'"
>
</experiment-statistics-card>
</div>
@@ -80,7 +123,7 @@
:count="experimentStatistics.cancelledExperimentCount || 0"
:states="canceledStates"
title="Cancelled Experiments"
- @click="selectExperiments(experimentStatistics.cancelledExperiments)"
+ @click="selectedExperimentSummariesKey = 'cancelledExperiments'"
>
</experiment-statistics-card>
</div>
@@ -92,7 +135,7 @@
:count="experimentStatistics.failedExperimentCount || 0"
:states="failedStates"
title="Failed Experiments"
- @click="selectExperiments(experimentStatistics.failedExperiments)"
+ @click="selectedExperimentSummariesKey = 'failedExperiments'"
>
</experiment-statistics-card>
@@ -152,15 +195,22 @@ export default {
const toTime = new Date();
return {
experimentStatistics: {},
- selectedExperimentSummaries: null,
+ selectedExperimentSummariesKey: null,
fromTime: fromTime,
toTime: toTime,
dateRange: [fromTime, toTime],
dateConfig: {
mode: "range",
wrap: true,
+ dateFormat: "Y-m-d H:i",
maxDate: new Date()
- }
+ },
+ usernameFilterEnabled: false,
+ usernameFilter: null,
+ applicationNameFilterEnabled: false,
+ applicationNameFilter: null,
+ hostnameFilterEnabled: false,
+ hostnameFilter: null
};
},
created() {
@@ -241,12 +291,16 @@ export default {
},
toTimeDisplay() {
return moment(this.toTime).format("MMM Do YYYY");
+ },
+ selectedExperimentSummaries() {
+ if (this.selectedExperimentSummariesKey && this.experimentStatistics && this.selectedExperimentSummariesKey in this.experimentStatistics) {
+ return this.experimentStatistics[this.selectedExperimentSummariesKey];
+ } else {
+ return []
+ }
}
},
methods: {
- selectExperiments(experiments) {
- this.selectedExperimentSummaries = experiments;
- },
dateRangeChanged(selectedDates) {
[this.fromTime, this.toTime] = selectedDates;
if (this.fromTime && this.toTime) {
@@ -254,10 +308,16 @@ export default {
}
},
loadStatistics() {
- services.ExperimentStatisticsService.get({
+ const requestData = {
fromTime: this.fromTime.toJSON(),
toTime: this.toTime.toJSON()
- }).then(stats => (this.experimentStatistics = stats));
+ };
+ if (this.usernameFilterEnabled && this.usernameFilter) {
+ requestData["userName"] = this.usernameFilter;
+ }
+ services.ExperimentStatisticsService.get(requestData).then(
+ stats => (this.experimentStatistics = stats)
+ );
},
getPast24Hours() {
this.fromTime = this.daysAgo(1);
@@ -273,12 +333,17 @@ export default {
},
updateDateRange() {
this.dateRange = [
- moment(this.fromTime).format("YYYY-MM-DD"),
- moment(this.toTime).format("YYYY-MM-DD")
+ moment(this.fromTime).format("YYYY-MM-DD HH:mm"),
+ moment(this.toTime).format("YYYY-MM-DD HH:mm")
];
},
daysAgo(days) {
return new Date(Date.now() - days * 24 * 60 * 60 * 1000);
+ },
+ removeUsernameFilter() {
+ this.usernameFilter = null;
+ this.usernameFilterEnabled = false;
+ this.loadStatistics();
}
}
};
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/service_config.js b/django_airavata/apps/api/static/django_airavata_api/js/service_config.js
index 0770e81..ef94c66 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/service_config.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/service_config.js
@@ -194,7 +194,13 @@ export default {
get: {
url: "/api/experiment-statistics",
requestType: "get",
- queryParams: ["fromTime", "toTime"],
+ queryParams: [
+ "fromTime",
+ "toTime",
+ "userName",
+ "applicationName",
+ "resourceHostName"
+ ],
modelClass: ExperimentStatistics
}
}
diff --git a/django_airavata/apps/api/views.py b/django_airavata/apps/api/views.py
index e58326e..637f3f7 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -1463,7 +1463,7 @@ class ExperimentStatisticsView(APIView):
to_time = datetime.utcnow().timestamp() * 1000
username = request.GET.get('userName', None)
application_name = request.GET.get('applicationName', None)
- resource_hostname = request.GET.get('requestHostName', None)
+ resource_hostname = request.GET.get('resourceHostName', None)
statistics = request.airavata_client.getExperimentStatistics(
request.authz_token, settings.GATEWAY_ID, from_time, to_time,
username, application_name, resource_hostname)