From be0c56f03f0c0a921eb5ff41b653f7d6bf923f15 Mon Sep 17 00:00:00 2001 From: Hongyuan Ma Date: Wed, 20 Jun 2018 20:32:13 +0800 Subject: [PATCH] add hash field form TestRecord model;add TestRecordDetailViewSet; --- web/apps/test_records/models.py | 1 + web/apps/test_records/serializer.py | 50 ++++++++++++++++++++--------- web/apps/test_records/views.py | 9 +++--- web/pgperffarm/urls.py | 8 ++--- 4 files changed, 44 insertions(+), 24 deletions(-) diff --git a/web/apps/test_records/models.py b/web/apps/test_records/models.py index df89e22..bc81771 100644 --- a/web/apps/test_records/models.py +++ b/web/apps/test_records/models.py @@ -98,6 +98,7 @@ class TestRecord(models.Model): test_desc = models.TextField(verbose_name="test desc", help_text="test desc") # test_branch_id = models.ForeignKey(TestBranch, verbose_name="test category", help_text="test category") meta_time = models.DateTimeField(default=timezone.now, verbose_name="meta time") + hash = models.CharField(unique=True, default='', max_length=32, verbose_name="record hash", help_text="record hash") add_time = models.DateTimeField(default=timezone.now, verbose_name="test added time") class Meta: diff --git a/web/apps/test_records/serializer.py b/web/apps/test_records/serializer.py index 1389968..e4cad4b 100644 --- a/web/apps/test_records/serializer.py +++ b/web/apps/test_records/serializer.py @@ -90,7 +90,7 @@ class TestRecordListSerializer(serializers.ModelSerializer): # client_max_num = serializers.SerializerMethodField() class Meta: model = TestRecord - fields = ('add_time', 'machine_info', 'pg_info', 'trend', 'linux_info', 'meta_info') + fields = ('hash', 'add_time', 'machine_info', 'pg_info', 'trend', 'linux_info', 'meta_info') def get_trend(self, obj): dataset_list = TestDataSet.objects.filter(test_record_id=obj.id).values_list('status').annotate(Count('id')) @@ -120,7 +120,7 @@ class TestRecordListSerializer(serializers.ModelSerializer): def get_machine_info(self, obj): - machine_data = UserMachine.objects.filter(Q(id=obj.test_machine_id)) + machine_data = UserMachine.objects.filter(id=obj.test_machine_id) machine_info_serializer = UserMachineSerializer(machine_data,many=True, context={'request': self.context['request']}) return machine_info_serializer.data @@ -130,6 +130,13 @@ class TestRecordListSerializer(serializers.ModelSerializer): # rw_client_num = TestResult.objects.filter(Q(test_record_id=obj.id ) ,test_cate_id=2).order_by('clients').distinct('clients').count() # return max(ro_client_num,rw_client_num) + +class TestDataSetSerializer(serializers.ModelSerializer): + + class Meta: + model = TestDataSet + fields = "__all__" + class TestRecordDetailSerializer(serializers.ModelSerializer): ''' @@ -138,20 +145,33 @@ class TestRecordDetailSerializer(serializers.ModelSerializer): pg_info =PGInfoSerializer() linux_info = LinuxInfoSerializer() meta_info = MetaInfoSerializer() - ro_info = serializers.SerializerMethodField() - rw_info = serializers.SerializerMethodField() + dataset_info = serializers.SerializerMethodField() + # rw_info = serializers.SerializerMethodField() class Meta: model = TestRecord fields = "__all__" - def get_ro_info(self, obj): - all_data = TestResult.objects.filter(Q(test_record_id=obj.id ) ,test_cate_id=1) - - ro_info_serializer = TestResultSerializer(all_data, many=True, context={'request': self.context['request']}) - return ro_info_serializer.data - - def get_rw_info(self, obj): - all_data = TestResult.objects.filter(Q(test_record_id=obj.id) ,test_cate_id=2) - - rw_info_serializer = TestResultSerializer(all_data, many=True, context={'request': self.context['request']}) - return rw_info_serializer.data + def get_dataset_info(self, obj): + dataset_list = TestDataSet.objects.filter(test_record_id=obj.id).values_list('scale').annotate(Count('id')) + # print(target_dataset) + + dataset = {} + # < QuerySet[(20, 2), (10, 4)] > + for item in dataset_list: + dataset[item[0]] = [] + target_dataset = TestDataSet.objects.filter(test_record_id=obj.id, scale=item[0]) + dataset_serializer = TestDataSetSerializer(target_dataset, many=True) + dataset[item[0]] = dataset_serializer.data + return dataset + + # def get_ro_info(self, obj): + # all_data = TestResult.objects.filter(Q(test_record_id=obj.id ) ,test_cate_id=1) + # + # ro_info_serializer = TestResultSerializer(all_data, many=True, context={'request': self.context['request']}) + # return ro_info_serializer.data + # + # def get_rw_info(self, obj): + # all_data = TestResult.objects.filter(Q(test_record_id=obj.id) ,test_cate_id=2) + # + # rw_info_serializer = TestResultSerializer(all_data, many=True, context={'request': self.context['request']}) + # return rw_info_serializer.data diff --git a/web/apps/test_records/views.py b/web/apps/test_records/views.py index 5e25942..7b279ac 100644 --- a/web/apps/test_records/views.py +++ b/web/apps/test_records/views.py @@ -33,13 +33,12 @@ class TestRecordListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): queryset = TestRecord.objects.all().order_by('add_time') serializer_class = TestRecordListSerializer pagination_class = StandardResultsSetPagination - - -class TestRecordDetailViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): +class TestRecordDetailViewSet( mixins.RetrieveModelMixin, viewsets.GenericViewSet): """ - List test records + detail test records """ - queryset = TestRecord.objects.all() + lookup_field = 'hash' + queryset = TestRecord.objects.all().order_by('add_time') serializer_class = TestRecordDetailSerializer pagination_class = StandardResultsSetPagination diff --git a/web/pgperffarm/urls.py b/web/pgperffarm/urls.py index 32fd126..2b88d34 100644 --- a/web/pgperffarm/urls.py +++ b/web/pgperffarm/urls.py @@ -19,7 +19,7 @@ from django.views.generic.base import RedirectView from rest_framework.documentation import include_docs_urls from rest_framework.routers import DefaultRouter -from test_records.views import TestRecordListViewSet, TestRecordDetailViewSet, TestRecordCreate +from test_records.views import TestRecordListViewSet, TestRecordCreate, TestRecordDetailViewSet from test_records.auth import MachineAuthToken # from test_records.view_base import TestListView @@ -29,8 +29,8 @@ from test_records.auth import MachineAuthToken # 'post': 'create' # }) router = DefaultRouter() -router.register(r'records', TestRecordListViewSet,base_name="records") -router.register(r'detail', TestRecordDetailViewSet ,base_name="detail") +router.register(r'records', TestRecordListViewSet, base_name="records") +router.register(r'detail', TestRecordDetailViewSet, base_name="detail") # router.register(r'detail', TestRecordListViewSet) @@ -42,7 +42,7 @@ urlpatterns = [ url(r'^', include(router.urls)), # url(r'status/$', test_record_list, name='test-list'), # url(r'status/$', TestListView.as_view(), name='test-list'), - + # url(r'detail', TestRecordDetailViewSet ,name="detail"), url(r'upload/$', TestRecordCreate, name='test-upload'), url(r'docs/', include_docs_urls(title='pgperffarm')), # Static pages -- 2.39.5