From 16acaa5f7553d16613b66eca31b8e882c69ee031 Mon Sep 17 00:00:00 2001 From: Hongyuan Ma Date: Sun, 1 Jul 2018 20:30:19 +0800 Subject: [PATCH] add machine history records api --- web/apps/test_records/serializer.py | 26 ++++++++++++++++++++++++-- web/apps/test_records/views.py | 20 ++++++++++++++------ web/apps/users/serializer.py | 4 ++-- web/pgperffarm/urls.py | 5 +++-- 4 files changed, 43 insertions(+), 12 deletions(-) diff --git a/web/apps/test_records/serializer.py b/web/apps/test_records/serializer.py index 7dd4a7a..08eda5e 100644 --- a/web/apps/test_records/serializer.py +++ b/web/apps/test_records/serializer.py @@ -165,8 +165,7 @@ class TestRecordListSerializer(serializers.ModelSerializer): def get_machine_info(self, obj): machine_data = UserMachine.objects.filter(id=obj.test_machine_id) - machine_info_serializer = UserMachineSerializer(machine_data, many=True, - context={'request': self.context['request']}) + machine_info_serializer = UserMachineSerializer(machine_data, many=True) return machine_info_serializer.data # def get_client_max_num(self, obj): @@ -272,3 +271,26 @@ class TestRecordDetailSerializer(serializers.ModelSerializer): # # rw_info_serializer = TestResultSerializer(all_data, many=True, context={'request': self.context['request']}) # return rw_info_serializer.data + +class MachineHistoryRecordSerializer(serializers.ModelSerializer): + ''' + use MachineHistoryRecordSerializer + ''' + machine_info = serializers.SerializerMethodField() + reports = serializers.SerializerMethodField() + + class Meta: + model = UserMachine + fields = ('machine_info', 'reports') + + def get_reports(self, obj): + target_records = TestRecord.objects.filter(test_machine_id=obj.id) + serializer = TestRecordListSerializer(target_records,many=True) + + return serializer.data + + def get_machine_info(self, obj): + target_machine = UserMachine.objects.filter(id=obj.id).first() + serializer = UserMachineSerializer(target_machine) + + return serializer.data \ No newline at end of file diff --git a/web/apps/test_records/views.py b/web/apps/test_records/views.py index 2f4d911..09bc702 100644 --- a/web/apps/test_records/views.py +++ b/web/apps/test_records/views.py @@ -5,23 +5,23 @@ import django_filters import shortuuid from django.contrib.auth.hashers import make_password -from django.shortcuts import render from rest_framework.pagination import PageNumberPagination from exception import TestDataUploadError from filters import TestRecordListFilter from models import UserMachine, TestCategory from pgperffarm.settings import DB_ENUM +from .serializer import MachineHistoryRecordSerializer from .serializer import TestRecordListSerializer, TestRecordDetailSerializer, LinuxInfoSerializer, MetaInfoSerializer, \ PGInfoSerializer, CreateTestRecordSerializer, CreateTestDateSetSerializer, TestResultSerializer -from rest_framework.views import APIView + from rest_framework.decorators import api_view from rest_framework.response import Response from rest_framework import mixins from rest_framework import status -from rest_framework import generics + from rest_framework import viewsets -from .models import TestRecord, LinuxInfo, MetaInfo, PGInfo, TestBranch +from .models import TestRecord import json @@ -48,8 +48,16 @@ class TestRecordDetailViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet lookup_field = 'uuid' queryset = TestRecord.objects.all().order_by('add_time') serializer_class = TestRecordDetailSerializer - pagination_class = StandardResultsSetPagination + # pagination_class = StandardResultsSetPagination +class MachineHistoryRecordViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet): + """ + detail test records + """ + lookup_field = 'machine_sn' + queryset = UserMachine.objects.all().order_by('add_time') + serializer_class = MachineHistoryRecordSerializer + # pagination_class = StandardResultsSetPagination @api_view(['POST']) def TestRecordCreate(request, format=None): @@ -151,7 +159,7 @@ def TestRecordCreate(request, format=None): 'metric': dataset['metric'], 'median': dataset['median'], 'test_cate': test_cate.id, - # status,percentage calc by tarr + # status,percentage calc by receiver 'status': -1, 'percentage': 0.0, } diff --git a/web/apps/users/serializer.py b/web/apps/users/serializer.py index 350fde1..772bf96 100644 --- a/web/apps/users/serializer.py +++ b/web/apps/users/serializer.py @@ -25,7 +25,6 @@ class UserMachineSerializer(serializers.ModelSerializer): avatar = serializers.SerializerMethodField() class Meta: model = UserMachine - # fields = "__all__" fields = ('alias', 'os_name', 'os_version', 'comp_name', 'comp_version', 'reports', 'owner' , 'avatar') def get_alias(self, obj): @@ -48,4 +47,5 @@ class UserMachineSerializer(serializers.ModelSerializer): avatar = 'http://s.gravatar.com/avatar/' + hashlib.md5(target_owner['email']).hexdigest() print avatar - return avatar \ No newline at end of file + return avatar + diff --git a/web/pgperffarm/urls.py b/web/pgperffarm/urls.py index 2b88d34..e0a08b3 100644 --- a/web/pgperffarm/urls.py +++ b/web/pgperffarm/urls.py @@ -19,7 +19,8 @@ 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, TestRecordCreate, TestRecordDetailViewSet +from test_records.views import TestRecordListViewSet, TestRecordCreate, TestRecordDetailViewSet, \ + MachineHistoryRecordViewSet from test_records.auth import MachineAuthToken # from test_records.view_base import TestListView @@ -31,7 +32,7 @@ from test_records.auth import MachineAuthToken router = DefaultRouter() router.register(r'records', TestRecordListViewSet, base_name="records") router.register(r'detail', TestRecordDetailViewSet, base_name="detail") - +router.register(r'machine', MachineHistoryRecordViewSet, base_name="machine") # router.register(r'detail', TestRecordListViewSet) urlpatterns = [ -- 2.39.5