add TestBranchSerializer
authorHongyuan Ma <CS_MaleicAcid@163.com>
Sun, 8 Jul 2018 17:33:55 +0000 (01:33 +0800)
committerHongyuan Ma <CS_MaleicAcid@163.com>
Sun, 8 Jul 2018 17:33:55 +0000 (01:33 +0800)
front-end/src/page/portal/index.jsx
front-end/src/service/user-service.jsx
front-end/src/util/machine-table/index.jsx
web/apps/test_records/serializer.py
web/apps/user_operation/serializer.py
web/apps/user_operation/views.py
web/pgperffarm/settings.py
web/pgperffarm/urls.py

index de542f0e75911f6a0a76aa5454a984a6ddb491cd..14061905d533db44b9d1dfb0f13dc36b543f0d96 100644 (file)
@@ -27,13 +27,14 @@ class Portal extends React.Component {
             username: user.username,
         });
         console.log(user.token)
+        this.loadUserPortalInfo()
         this.loadUserMachineManageList();
     }
 
-    loadUserInfo(){
-        _user.getUserInfo().then(res => {
+    loadUserPortalInfo(){
+        _user.getUserPortalInfo().then(res => {
             this.setState({
-                userinfo: res.userinfo,
+                userinfo: res.results,
             });
         }, errMsg => {
             _util.errorTips(errMsg);
index 997632bf9e533426a554d246a1bee7bf01bfc180..f12395e2023d890a7665da057023b8f6c66dffb0 100644 (file)
@@ -56,8 +56,8 @@ class User{
         });
     }
 
-    getUserInfo(){
-        let url = PGConstant.base_url + '/userinfo';
+    getUserPortalInfo(){
+        let url = PGConstant.base_url + '/portal/';
         return _util.request({
             type    : 'get',
             url     : url,
index d590bde94b29d00c1caa6bc789dd05c84c07ba4a..34cc229167d2cef91b0098bab57efd7509e31cbf 100644 (file)
@@ -12,7 +12,7 @@ function LastestLink(props) {
 
     let ret = _list.map((item, index) => {
         return (
-            <Link color='linkedin' to={'detailInfo/' + item.record.uuid}>
+            <Link color='linkedin' to={'detailInfo/' + item.uuid}>
                  {item.branch}
             </Link>
         );
@@ -50,11 +50,6 @@ class MachineTable extends React.Component {
         let listBody = _list.map((machineItem, index) => {
             let machine = machineItem
             let system = machine.os_name + ' ' + machine.os_version + ' ' + machine.comp_name + ' ' + machine.comp_version;
-            let alias = machine.alias;
-            let lastest = machine.lastest;
-            let state = machine.state;
-
-            let reports = machine.reports
 
             // let improvedIconClassName = trend.improved > 0 ? 'improved' : 'anonymous'
             // let quoIconClassName = trend.quo > 0 ? 'quo' : 'anonymous'
@@ -63,30 +58,30 @@ class MachineTable extends React.Component {
 
                 <Table.Row key={index}>
                     {/*alias*/}
-                    <Table.Cell><a href="#">{alias}</a></Table.Cell>
+                    <Table.Cell><a href="#">{machine.alias}</a></Table.Cell>
 
                     {/*system*/}
                     <Table.Cell><a href="#">{system}</a></Table.Cell>
 
                     {/*State*/}
-                    <Table.Cell>{state}</Table.Cell>
+                    <Table.Cell>{machine.state}</Table.Cell>
 
                     {/*lastest-records*/}
                     <Table.Cell textAlign='center'>
                         {/*<Icon className={"bgc-clear " + improvedIconClassName} name='smile outline' size='large'/>*/}
                         {/*<Bubble num={trend.improved} name="improved"/>*/}
-                        <LastestLink list={lastest}/>
+                        <LastestLink list={machine.lastest}/>
                     </Table.Cell>
 
                     {/*machine history*/}
                     <Table.Cell textAlign='center'>
-                        <Link color='linkedin' to={'machineInfo/' + '123'}>
+                        <Link color='linkedin' to={'machineInfo/' + '###'}>
                             <Icon name='linkify'/> Link
                         </Link>
                     </Table.Cell>
 
                     {/*date*/}
-                    <Table.Cell>{}</Table.Cell>
+                    <Table.Cell>{machine.add_time}</Table.Cell>
                 </Table.Row>
             );
         });
@@ -104,7 +99,7 @@ class MachineTable extends React.Component {
                         <Table.HeaderCell rowSpan='2'>State</Table.HeaderCell>
                         <Table.HeaderCell rowSpan='3'>Lastest</Table.HeaderCell>
                         <Table.HeaderCell rowSpan='2'>History</Table.HeaderCell>
-                        <Table.HeaderCell rowSpan='2'>Date</Table.HeaderCell>
+                        <Table.HeaderCell rowSpan='2'>Add Date</Table.HeaderCell>
                     </Table.Row>
                     {/*<Table.Row>*/}
                         {/*<Table.HeaderCell>improvement</Table.HeaderCell>*/}
index 08eda5ec9ae886f785e5af6ff51ee84fbfccbf57..b50071dca53cf64484ae6abefe9086396e9fd2bc 100644 (file)
@@ -1,11 +1,20 @@
 from rest_framework import serializers
 
 from pgperffarm.settings import DB_ENUM
-from test_records.models import TestRecord, TestResult, PGInfo, LinuxInfo, MetaInfo, TestDataSet, TestCategory
+from test_records.models import TestRecord, TestResult, PGInfo, LinuxInfo, MetaInfo, TestDataSet, TestCategory, \
+    TestBranch
 from users.serializer import UserMachineSerializer
 from users.models import UserMachine
 from django.db.models import Count
 
+class TestBranchSerializer(serializers.ModelSerializer):
+    '''
+    use TestBranchSerializer
+    '''
+
+    class Meta:
+        model = TestBranch
+        fields = ('branch_name',)
 
 class TestCategorySerializer(serializers.ModelSerializer):
     '''
@@ -127,14 +136,20 @@ class TestRecordListSerializer(serializers.ModelSerializer):
     pg_info = PGInfoSerializer()
     linux_info = LinuxInfoSerializer()
     meta_info = MetaInfoSerializer()
-
+    branch = serializers.SerializerMethodField()
     trend = serializers.SerializerMethodField()
     machine_info = serializers.SerializerMethodField()
 
     # client_max_num = serializers.SerializerMethodField()
     class Meta:
         model = TestRecord
-        fields = ('uuid', 'add_time', 'machine_info', 'pg_info', 'trend', 'linux_info', 'meta_info')
+        fields = ('uuid', 'add_time', 'machine_info', 'pg_info', 'branch','trend', 'linux_info', 'meta_info')
+
+    def get_branch(self, obj):
+        branch = TestBranch.objects.filter(id=obj.branch.id).first()
+
+        serializer = TestBranchSerializer(branch)
+        return serializer.data["branch_name"]
 
     def get_trend(self, obj):
         dataset_list = TestDataSet.objects.filter(test_record_id=obj.id).values_list('status').annotate(Count('id'))
@@ -208,10 +223,10 @@ class TestRecordDetailSerializer(serializers.ModelSerializer):
             'branch', 'date', 'uuid', 'pg_info', 'linux_info', 'hardware_info', 'meta_info', 'dataset_info', 'test_desc', 'meta_time', 'test_machine')
 
     def get_branch(self, obj):
-        target_pg_info = PGInfo.objects.filter(id=obj.pg_info.id).first()
-        branch_id = target_pg_info.pg_branch_id
+        branch = TestBranch.objects.filter(id=obj.branch_id).first()
 
-        return branch_id
+        serializer = TestBranchSerializer(branch)
+        return serializer.data["branch_name"]
 
     def get_date(self, obj):
         target_meta_info = MetaInfo.objects.filter(id=obj.meta_info.id).first()
index 4a330711e2bf782a538434cdeb512905ef4b7c5a..9361c179c04c0e93af405e4eb18fbff4fce55593 100644 (file)
@@ -1,12 +1,34 @@
 from django.db.models import Count
 from rest_framework import serializers
 
+from pgperffarm.settings import DB_ENUM
 from test_records.serializer import TestRecordListSerializer
-from users.serializer import AliasSerializer
+from users.serializer import AliasSerializer, UserMachineSerializer
 from test_records.models import TestRecord
-from users.models import UserMachine, Alias
+from users.models import UserMachine, Alias, UserProfile
 import hashlib
 
+class UserPortalInfoSerializer(serializers.ModelSerializer):
+
+    involved = serializers.SerializerMethodField()
+    class Meta:
+        model = UserProfile
+        fields = ('email', 'involved', 'date_joined')
+
+    def get_involved(self, obj):
+        '''
+        reports, machines, branches
+        '''
+        machine_dict = []
+        target_machines = UserMachine.objects.filter(machine_owner_id=obj.id)
+        serializer = UserMachineSerializer(target_machines, many=True)
+        print(serializer.data)
+        # for item in serializer.data:
+        #     machine_dict.append(item.id)
+
+        reports = TestRecord.objects.filter(test_machine_id__in=machine_dict).count()
+
+        return reports
 
 class UserMachineManageSerializer(serializers.ModelSerializer):
     '''
@@ -16,10 +38,15 @@ class UserMachineManageSerializer(serializers.ModelSerializer):
     alias = serializers.SerializerMethodField()
     reports = serializers.SerializerMethodField()
     lastest = serializers.SerializerMethodField()
-
+    state = serializers.SerializerMethodField()
     class Meta:
         model = UserMachine
-        fields = ('alias', 'os_name', 'os_version', 'comp_name', 'comp_version', 'reports', 'state', 'lastest')
+        fields = ('alias', 'os_name', 'os_version', 'comp_name', 'comp_version', 'reports', 'state', 'lastest', 'state', 'add_time')
+
+    def get_state(self, obj):
+        state_code = obj.state
+        new_dict = {v: k for k, v in DB_ENUM["machine_state"].items()}
+        return new_dict[state_code]
 
     def get_alias(self, obj):
         target_alias = Alias.objects.filter(id=obj.alias_id).first()
@@ -37,13 +64,11 @@ class UserMachineManageSerializer(serializers.ModelSerializer):
         # < QuerySet[(1, 4), (2, 5)] >
         ret = []
         for branch_item in record_branch_list:
-            branch_name = branch_item[0]
+            branch_name = branch_item[0]
 
             target_record = TestRecord.objects.filter(test_machine_id=obj.id, branch=branch_item[0]).first()
             serializer = TestRecordListSerializer(target_record)
 
-            dict = {'branch':branch_name,'record':serializer.data}
-
-            ret.append(dict)
+            ret.append(serializer.data)
 
         return ret
index 6c2d71aaa2e03b41c265cd69d12adfdb8692c5e5..c8bdf4932558fff1d7488ce3ee8cd70e4693a63a 100644 (file)
@@ -9,8 +9,8 @@ from rest_framework.response import Response
 from rest_framework.views import APIView
 from rest_framework_jwt.authentication import JSONWebTokenAuthentication
 from util.response import PGJsonResponse
-from models import UserMachine
-from serializer import UserMachineManageSerializer
+from users.models import UserMachine, UserProfile
+from serializer import UserMachineManageSerializer, UserPortalInfoSerializer
 
 
 class UserMachineListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
@@ -23,18 +23,14 @@ class UserMachineListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
     serializer_class = UserMachineManageSerializer
     # pagination_class = StandardResultsSetPagination
 
-
-
-# class UserMachineList(APIView):
-#     authentication_classes = (JSONWebTokenAuthentication,)
-#     permission_classes = (permissions.IsAuthenticated,)
-#
-#     def get(self, request, format=None):
-#         machines = UserMachine.objects.all().order_by('add_time')
-#         serializer = UserMachineManageSerializer(machines, many=True)
-#
-#         return PGJsonResponse(data=serializer.data, code=status.HTTP_200_OK, desc='get user machine list success')
-
+class UserPortalInfoViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
+    """
+     user info
+    """
+    # authentication_classes = (JSONWebTokenAuthentication, authentication.SessionAuthentication )
+    # permission_classes = (permissions.IsAuthenticated, )
+    queryset = UserProfile.objects.all().order_by('date_joined')
+    serializer_class = UserPortalInfoSerializer
 
 class UserMachinePermission(permissions.BasePermission):
     """
index d3b5f42e275ae07d571fde5c8efd8801764777cd..c78bff71c41eee4e4b9d5544d14e4930e57fc2a9 100644 (file)
@@ -150,6 +150,11 @@ DB_ENUM = {
         "simple": 1,
         "other": 2
     },
+    "machine_state": {
+        "prohibited": -1,
+        "pending": 0,
+        "active": 1,
+    },
     "status": {
         "none": -1,
         "improved": 1,
index e9a659dd78628e8feec5953c9ea6d605a04bdee5..f6b5989e0d252786ee25254494433018a34708d0 100644 (file)
@@ -31,16 +31,18 @@ from test_records.auth import MachineAuthToken
 #     'get': 'list',
 #     'post': 'create'
 # })
-from user_operation.views import UserMachineListViewSet
+from user_operation.views import UserMachineListViewSet, UserPortalInfoViewSet
 
 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")
 
+
 # user's machine manage list
 router.register(r'my-machine', UserMachineListViewSet, base_name="my-machine")
-
+# get userinfo on portal page
+router.register(r'portal', UserPortalInfoViewSet, base_name="portal")
 
 urlpatterns = [
     # url(r'^admin/', admin.site.urls),
@@ -49,7 +51,7 @@ urlpatterns = [
 
     url(r'^api-token-auth/', views.obtain_auth_token),
 
-    # login(jwt auth)
+    # user login(jwt auth)
     url(r'^login/', obtain_jwt_token),
 
     url(r'^machine-token-auth/', MachineAuthToken.as_view()),
@@ -58,6 +60,7 @@ urlpatterns = [
     # url(r'status/$', TestListView.as_view(), name='test-list'),
     # url(r'detail', TestRecordDetailViewSet ,name="detail"),
     url(r'upload/$', TestRecordCreate, name='test-upload'),
+    # url(r'portal/$', UserPortalInfoViewSet, name='portal'),
     # url(r'my-machine/$', UserMachineList.as_view(), name='my-machine'),
 
     url(r'docs/', include_docs_urls(title='pgperffarm')),