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/06/23 21:20:18 UTC

[airavata-django-portal] 02/02: Revert "AIRAVATA-3322 Paginated experiment statistics view"

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 a9bb65897fbfcf81032d6a51391de25594c3934d
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Wed Jun 23 17:19:45 2021 -0400

    Revert "AIRAVATA-3322 Paginated experiment statistics view"
    
    This reverts commit bd2474661441528c425a4a5e049400a1baf29d27.
---
 .../statistics/ExperimentStatisticsContainer.vue   | 43 ++++++----------------
 django_airavata/apps/api/serializers.py            | 17 ++++-----
 .../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 ---
 6 files changed, 26 insertions(+), 76 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 8561d3c..c15d0f1 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="selectExperiments('allExperiments')"
+                @click="selectedExperimentSummariesKey = 'allExperiments'"
               >
                 <span slot="link-text">All</span>
               </experiment-statistics-card>
@@ -162,7 +162,7 @@
                 :count="experimentStatistics.createdExperimentCount || 0"
                 :states="createdStates"
                 title="Created Experiments"
-                @click="selectExperiments('createdExperiments')"
+                @click="selectedExperimentSummariesKey = 'createdExperiments'"
               >
               </experiment-statistics-card>
             </div>
@@ -173,7 +173,7 @@
                 :count="experimentStatistics.runningExperimentCount || 0"
                 :states="runningStates"
                 title="Running Experiments"
-                @click="selectExperiments('runningExperiments')"
+                @click="selectedExperimentSummariesKey = 'runningExperiments'"
               >
               </experiment-statistics-card>
             </div>
@@ -185,7 +185,7 @@
                 :count="experimentStatistics.completedExperimentCount || 0"
                 :states="completedStates"
                 title="Completed Experiments"
-                @click="selectExperiments('completedExperiments')"
+                @click="selectedExperimentSummariesKey = 'completedExperiments'"
               >
               </experiment-statistics-card>
             </div>
@@ -197,7 +197,7 @@
                 :count="experimentStatistics.cancelledExperimentCount || 0"
                 :states="canceledStates"
                 title="Cancelled Experiments"
-                @click="selectExperiments('cancelledExperiments')"
+                @click="selectedExperimentSummariesKey = 'cancelledExperiments'"
               >
               </experiment-statistics-card>
             </div>
@@ -209,7 +209,7 @@
                 :count="experimentStatistics.failedExperimentCount || 0"
                 :states="failedStates"
                 title="Failed Experiments"
-                @click="selectExperiments('failedExperiments')"
+                @click="selectedExperimentSummariesKey = 'failedExperiments'"
               >
               </experiment-statistics-card>
             </div>
@@ -240,12 +240,6 @@
                   </template>
                 </b-table>
               </b-card>
-              <pager
-                v-if="experimentStatistics.allExperimentCount > 0"
-                :paginator="experimentStatisticsPaginator"
-                @next="experimentStatisticsPaginator.next()"
-                @previous="experimentStatisticsPaginator.previous()"
-              ></pager>
             </div>
           </div>
         </b-tab>
@@ -285,7 +279,7 @@ export default {
     const fromTime = new Date().fp_incr(0);
     const toTime = new Date().fp_incr(1);
     return {
-      experimentStatisticsPaginator: null,
+      experimentStatistics: {},
       selectedExperimentSummariesKey: null,
       fromTime: fromTime,
       toTime: toTime,
@@ -321,14 +315,8 @@ 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];
@@ -487,10 +475,8 @@ export default {
       if (this.hostnameFilterEnabled && this.hostnameFilter) {
         requestData["resourceHostName"] = this.hostnameFilter;
       }
-      return services.ExperimentStatisticsService.get(requestData).then(
-        (stats) => {
-          this.experimentStatisticsPaginator = stats;
-        }
+      services.ExperimentStatisticsService.get(requestData).then(
+        (stats) => (this.experimentStatistics = stats)
       );
     },
     getPast24Hours() {
@@ -498,11 +484,13 @@ export default {
       //this.fromTime = new Date(this.fromTime.setHours(0,0,0));
       this.toTime = new Date().fp_incr(1);
       this.updateDateRange();
+      this.loadStatistics();
     },
     getPastWeek() {
       this.fromTime = new Date().fp_incr(-7);
       this.toTime = new Date().fp_incr(1);
       this.updateDateRange();
+      this.loadStatistics();
     },
     updateDateRange() {
       this.dateRange = [
@@ -564,15 +552,6 @@ 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/serializers.py b/django_airavata/apps/api/serializers.py
index 700bbf6..ec68e11 100644
--- a/django_airavata/apps/api/serializers.py
+++ b/django_airavata/apps/api/serializers.py
@@ -531,7 +531,7 @@ class FullExperimentSerializer(serializers.Serializer):
         raise Exception("Not implemented")
 
 
-class BaseExperimentSummarySerializer(
+class ExperimentSummarySerializer(
         thrift_utils.create_serializer_class(ExperimentSummaryModel)):
     creationTime = UTCPosixTimestampDateTimeField()
     statusUpdateTime = UTCPosixTimestampDateTimeField()
@@ -543,9 +543,6 @@ class BaseExperimentSummarySerializer(
         view_name='django_airavata_api:project-detail',
         lookup_field='projectId',
         lookup_url_kwarg='project_id')
-
-
-class ExperimentSummarySerializer(BaseExperimentSummarySerializer):
     userHasWriteAccess = serializers.SerializerMethodField()
 
     def get_userHasWriteAccess(self, experiment):
@@ -992,12 +989,12 @@ class NotificationSerializer(
 
 class ExperimentStatisticsSerializer(
         thrift_utils.create_serializer_class(ExperimentStatistics)):
-    allExperiments = BaseExperimentSummarySerializer(many=True)
-    completedExperiments = BaseExperimentSummarySerializer(many=True)
-    failedExperiments = BaseExperimentSummarySerializer(many=True)
-    cancelledExperiments = BaseExperimentSummarySerializer(many=True)
-    createdExperiments = BaseExperimentSummarySerializer(many=True)
-    runningExperiments = BaseExperimentSummarySerializer(many=True)
+    allExperiments = ExperimentSummarySerializer(many=True)
+    completedExperiments = ExperimentSummarySerializer(many=True)
+    failedExperiments = ExperimentSummarySerializer(many=True)
+    cancelledExperiments = ExperimentSummarySerializer(many=True)
+    createdExperiments = ExperimentSummarySerializer(many=True)
+    runningExperiments = ExperimentSummarySerializer(many=True)
 
 
 class UnverifiedEmailUserProfile(serializers.Serializer):
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 64ad6b1..4d5d39b 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,10 +218,7 @@ 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 e98a653..5ea87e0 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,19 +30,14 @@ export default class PaginationIterator {
     this._next = pagedResponse.next;
     this._previous = pagedResponse.previous;
     if (this.resultType) {
-      if (Array.isArray(pagedResponse.results)) {
-        this.results = pagedResponse.results.map(
-          (result) => new this.resultType(result)
-        );
-      } else {
-        this.results = new this.resultType(pagedResponse.results);
-      }
+      this.results = pagedResponse.results.map(
+        (result) => new this.resultType(result)
+      );
     } 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 a33f7a9..675236c 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -30,7 +30,7 @@ from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
 from django.http import FileResponse, Http404, HttpResponse, JsonResponse
 from django.urls import reverse
 from django.views.decorators.gzip import gzip_page
-from rest_framework import mixins, pagination, status
+from rest_framework import mixins, status
 from rest_framework.decorators import action, api_view
 from rest_framework.exceptions import ParseError
 from rest_framework.renderers import JSONRenderer
@@ -1832,24 +1832,12 @@ 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, 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
+            username, application_name, resource_hostname)
+        serializer = self.serializer_class(
+            statistics, context={'request': request})
+        return Response(serializer.data)
 
 
 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 69005e4..4d49aaf 100644
--- a/django_airavata/static/common/js/components/Pager.vue
+++ b/django_airavata/static/common/js/components/Pager.vue
@@ -42,12 +42,6 @@ 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;