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 2021/07/27 20:50:36 UTC

[airavata-django-portal] branch develop updated (cff35bb -> 0342d80)

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

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


    from cff35bb  AIRAVATA-3460 Don't require path for file metadata response
     new 91cf7e7  AIRAVATA-3322 Paginated experiment statistics view
     new 6ee15c8  AIRAVATA-3322 Fix Pager display for results that don't return counts
     new 0342d80  AIRAVATA-3322 Update to version of python SDK with paginated getExperimentStatistics

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../statistics/ExperimentStatisticsContainer.vue   | 41 +++++++++++++++++-----
 .../django_airavata_api/js/service_config.js       |  3 ++
 .../js/utils/PaginationIterator.js                 | 11 ++++--
 django_airavata/apps/api/views.py                  | 22 +++++++++---
 .../static/common/js/components/Pager.vue          |  9 ++++-
 requirements.txt                                   |  2 +-
 6 files changed, 69 insertions(+), 19 deletions(-)

[airavata-django-portal] 02/03: AIRAVATA-3322 Fix Pager display for results that don't return counts

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 6ee15c8e631a16b4d1dd844a8f89d69833f2e06e
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Wed Jun 23 15:37:19 2021 -0400

    AIRAVATA-3322 Fix Pager display for results that don't return counts
---
 django_airavata/static/common/js/components/Pager.vue | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/django_airavata/static/common/js/components/Pager.vue b/django_airavata/static/common/js/components/Pager.vue
index 69005e4..06c0316 100644
--- a/django_airavata/static/common/js/components/Pager.vue
+++ b/django_airavata/static/common/js/components/Pager.vue
@@ -42,13 +42,14 @@ export default {
     },
     last: function () {
       if (this.paginator) {
-        if (this.paginator.hasOwnProperty("count")) {
+        if (this.paginator.count) {
           return Math.min(
             this.paginator.offset + this.paginator.limit,
             this.paginator.count
           );
+        } else {
+          return this.paginator.offset + this.paginator.results.length;
         }
-        return this.paginator.offset + this.paginator.results.length;
       } else {
         return null;
       }

[airavata-django-portal] 01/03: AIRAVATA-3322 Paginated experiment statistics view

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 91cf7e77cacb194305626358b9959a436faa0a3b
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Wed Jun 23 15:32:17 2021 -0400

    AIRAVATA-3322 Paginated experiment statistics view
---
 .../statistics/ExperimentStatisticsContainer.vue   | 41 +++++++++++++++++-----
 .../django_airavata_api/js/service_config.js       |  3 ++
 .../js/utils/PaginationIterator.js                 | 11 ++++--
 django_airavata/apps/api/views.py                  | 22 +++++++++---
 .../static/common/js/components/Pager.vue          |  6 ++++
 5 files changed, 66 insertions(+), 17 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 71d4529..8561d3c 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
@@ -151,7 +151,7 @@
                 header-text-variant="white"
                 :count="experimentStatistics.allExperimentCount || 0"
                 title="Total Experiments"
-                @click="selectedExperimentSummariesKey = 'allExperiments'"
+                @click="selectExperiments('allExperiments')"
               >
                 <span slot="link-text">All</span>
               </experiment-statistics-card>
@@ -162,7 +162,7 @@
                 :count="experimentStatistics.createdExperimentCount || 0"
                 :states="createdStates"
                 title="Created Experiments"
-                @click="selectedExperimentSummariesKey = 'createdExperiments'"
+                @click="selectExperiments('createdExperiments')"
               >
               </experiment-statistics-card>
             </div>
@@ -173,7 +173,7 @@
                 :count="experimentStatistics.runningExperimentCount || 0"
                 :states="runningStates"
                 title="Running Experiments"
-                @click="selectedExperimentSummariesKey = 'runningExperiments'"
+                @click="selectExperiments('runningExperiments')"
               >
               </experiment-statistics-card>
             </div>
@@ -185,7 +185,7 @@
                 :count="experimentStatistics.completedExperimentCount || 0"
                 :states="completedStates"
                 title="Completed Experiments"
-                @click="selectedExperimentSummariesKey = 'completedExperiments'"
+                @click="selectExperiments('completedExperiments')"
               >
               </experiment-statistics-card>
             </div>
@@ -197,7 +197,7 @@
                 :count="experimentStatistics.cancelledExperimentCount || 0"
                 :states="canceledStates"
                 title="Cancelled Experiments"
-                @click="selectedExperimentSummariesKey = 'cancelledExperiments'"
+                @click="selectExperiments('cancelledExperiments')"
               >
               </experiment-statistics-card>
             </div>
@@ -209,7 +209,7 @@
                 :count="experimentStatistics.failedExperimentCount || 0"
                 :states="failedStates"
                 title="Failed Experiments"
-                @click="selectedExperimentSummariesKey = 'failedExperiments'"
+                @click="selectExperiments('failedExperiments')"
               >
               </experiment-statistics-card>
             </div>
@@ -240,6 +240,12 @@
                   </template>
                 </b-table>
               </b-card>
+              <pager
+                v-if="experimentStatistics.allExperimentCount > 0"
+                :paginator="experimentStatisticsPaginator"
+                @next="experimentStatisticsPaginator.next()"
+                @previous="experimentStatisticsPaginator.previous()"
+              ></pager>
             </div>
           </div>
         </b-tab>
@@ -279,7 +285,7 @@ export default {
     const fromTime = new Date().fp_incr(0);
     const toTime = new Date().fp_incr(1);
     return {
-      experimentStatistics: {},
+      experimentStatisticsPaginator: null,
       selectedExperimentSummariesKey: null,
       fromTime: fromTime,
       toTime: toTime,
@@ -315,8 +321,14 @@ export default {
     "compute-resource-name": components.ComputeResourceName,
     "human-date": components.HumanDate,
     "experiment-status-badge": components.ExperimentStatusBadge,
+    pager: components.Pager,
   },
   computed: {
+    experimentStatistics() {
+      return this.experimentStatisticsPaginator
+        ? this.experimentStatisticsPaginator.results
+        : {};
+    },
     createdStates() {
       // TODO: moved to ExperimentStatistics model
       return [models.ExperimentState.CREATED, models.ExperimentState.VALIDATED];
@@ -475,8 +487,10 @@ export default {
       if (this.hostnameFilterEnabled && this.hostnameFilter) {
         requestData["resourceHostName"] = this.hostnameFilter;
       }
-      services.ExperimentStatisticsService.get(requestData).then(
-        (stats) => (this.experimentStatistics = stats)
+      return services.ExperimentStatisticsService.get(requestData).then(
+        (stats) => {
+          this.experimentStatisticsPaginator = stats;
+        }
       );
     },
     getPast24Hours() {
@@ -550,6 +564,15 @@ export default {
     scrollTabsIntoView() {
       this.$refs.tabs.$el.scrollIntoView({ behavior: "smooth" });
     },
+    selectExperiments(experimentSummariesKey) {
+      if (
+        this.experimentStatisticsPaginator &&
+        this.experimentStatisticsPaginator.offset > 0
+      ) {
+        this.loadStatistics();
+      }
+      this.selectedExperimentSummariesKey = experimentSummariesKey;
+    },
   },
 };
 </script>
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 4d5d39b..64ad6b1 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
@@ -218,7 +218,10 @@ export default {
           "userName",
           "applicationName",
           "resourceHostName",
+          "limit",
+          "offset",
         ],
+        pagination: true,
         modelClass: ExperimentStatistics,
       },
     },
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/utils/PaginationIterator.js b/django_airavata/apps/api/static/django_airavata_api/js/utils/PaginationIterator.js
index 5ea87e0..e98a653 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/utils/PaginationIterator.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/utils/PaginationIterator.js
@@ -30,14 +30,19 @@ export default class PaginationIterator {
     this._next = pagedResponse.next;
     this._previous = pagedResponse.previous;
     if (this.resultType) {
-      this.results = pagedResponse.results.map(
-        (result) => new this.resultType(result)
-      );
+      if (Array.isArray(pagedResponse.results)) {
+        this.results = pagedResponse.results.map(
+          (result) => new this.resultType(result)
+        );
+      } else {
+        this.results = new this.resultType(pagedResponse.results);
+      }
     } else {
       this.results = pagedResponse.results;
     }
     this.offset = pagedResponse.offset;
     this.limit = pagedResponse.limit;
+    this.count = pagedResponse.count;
     return this;
   }
 
diff --git a/django_airavata/apps/api/views.py b/django_airavata/apps/api/views.py
index fa8d6b3..134b2fc 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -32,7 +32,7 @@ from django.http import Http404, HttpResponse, JsonResponse
 from django.shortcuts import redirect
 from django.urls import reverse
 from django.views.decorators.gzip import gzip_page
-from rest_framework import mixins, status
+from rest_framework import mixins, pagination, status
 from rest_framework.decorators import action, api_view
 from rest_framework.exceptions import ParseError
 from rest_framework.renderers import JSONRenderer
@@ -1816,12 +1816,24 @@ class ExperimentStatisticsView(APIView):
         username = request.GET.get('userName', None)
         application_name = request.GET.get('applicationName', None)
         resource_hostname = request.GET.get('resourceHostName', None)
+        limit = int(request.GET.get('limit', '50'))
+        offset = int(request.GET.get('offset', '0'))
+
         statistics = request.airavata_client.getExperimentStatistics(
             request.authz_token, settings.GATEWAY_ID, from_time, to_time,
-            username, application_name, resource_hostname)
-        serializer = self.serializer_class(
-            statistics, context={'request': request})
-        return Response(serializer.data)
+            username, application_name, resource_hostname, limit, offset)
+        serializer = self.serializer_class(statistics, context={'request': request})
+
+        paginator = pagination.LimitOffsetPagination()
+        paginator.count = statistics.allExperimentCount
+        paginator.limit = limit
+        paginator.offset = offset
+        paginator.request = request
+        response = paginator.get_paginated_response(serializer.data)
+        # Also add limit and offset to the response
+        response.data['limit'] = limit
+        response.data['offset'] = offset
+        return response
 
 
 class UnverifiedEmailUserViewSet(mixins.ListModelMixin,
diff --git a/django_airavata/static/common/js/components/Pager.vue b/django_airavata/static/common/js/components/Pager.vue
index 4d49aaf..69005e4 100644
--- a/django_airavata/static/common/js/components/Pager.vue
+++ b/django_airavata/static/common/js/components/Pager.vue
@@ -42,6 +42,12 @@ export default {
     },
     last: function () {
       if (this.paginator) {
+        if (this.paginator.hasOwnProperty("count")) {
+          return Math.min(
+            this.paginator.offset + this.paginator.limit,
+            this.paginator.count
+          );
+        }
         return this.paginator.offset + this.paginator.results.length;
       } else {
         return null;

[airavata-django-portal] 03/03: AIRAVATA-3322 Update to version of python SDK with paginated getExperimentStatistics

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 0342d803ea2c5fe9ee630f2c04935c25a16a67b4
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Tue Jul 27 16:50:10 2021 -0400

    AIRAVATA-3322 Update to version of python SDK with paginated getExperimentStatistics
---
 requirements.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/requirements.txt b/requirements.txt
index 423312e..ab43b9b 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -20,6 +20,6 @@ grpcio-tools==1.34.1
 grpcio==1.34.1
 
 airavata-django-portal-sdk==1.1.dev4
-airavata-python-sdk==1.0.0
+airavata-python-sdk==1.0.1
 
 -e "."