diff options
author | Hongyuan Ma | 2018-07-08 17:33:55 +0000 |
---|---|---|
committer | Hongyuan Ma | 2018-07-08 17:33:55 +0000 |
commit | b4f869cf90f3968d219f362a975612e5c749b169 (patch) | |
tree | 7b132e5486c9236e357f4ca6a53fa3564e4a045d | |
parent | b59601b8d7f809d1f27e4605d3d6b065b1461d3d (diff) |
add TestBranchSerializer
-rw-r--r-- | front-end/src/page/portal/index.jsx | 7 | ||||
-rw-r--r-- | front-end/src/service/user-service.jsx | 4 | ||||
-rw-r--r-- | front-end/src/util/machine-table/index.jsx | 19 | ||||
-rw-r--r-- | web/apps/test_records/serializer.py | 27 | ||||
-rw-r--r-- | web/apps/user_operation/serializer.py | 41 | ||||
-rw-r--r-- | web/apps/user_operation/views.py | 24 | ||||
-rw-r--r-- | web/pgperffarm/settings.py | 5 | ||||
-rw-r--r-- | web/pgperffarm/urls.py | 9 |
8 files changed, 88 insertions, 48 deletions
diff --git a/front-end/src/page/portal/index.jsx b/front-end/src/page/portal/index.jsx index de542f0..1406190 100644 --- a/front-end/src/page/portal/index.jsx +++ b/front-end/src/page/portal/index.jsx @@ -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); diff --git a/front-end/src/service/user-service.jsx b/front-end/src/service/user-service.jsx index 997632b..f12395e 100644 --- a/front-end/src/service/user-service.jsx +++ b/front-end/src/service/user-service.jsx @@ -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, diff --git a/front-end/src/util/machine-table/index.jsx b/front-end/src/util/machine-table/index.jsx index d590bde..34cc229 100644 --- a/front-end/src/util/machine-table/index.jsx +++ b/front-end/src/util/machine-table/index.jsx @@ -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>*/} diff --git a/web/apps/test_records/serializer.py b/web/apps/test_records/serializer.py index 08eda5e..b50071d 100644 --- a/web/apps/test_records/serializer.py +++ b/web/apps/test_records/serializer.py @@ -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() diff --git a/web/apps/user_operation/serializer.py b/web/apps/user_operation/serializer.py index 4a33071..9361c17 100644 --- a/web/apps/user_operation/serializer.py +++ b/web/apps/user_operation/serializer.py @@ -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 diff --git a/web/apps/user_operation/views.py b/web/apps/user_operation/views.py index 6c2d71a..c8bdf49 100644 --- a/web/apps/user_operation/views.py +++ b/web/apps/user_operation/views.py @@ -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): """ diff --git a/web/pgperffarm/settings.py b/web/pgperffarm/settings.py index d3b5f42..c78bff7 100644 --- a/web/pgperffarm/settings.py +++ b/web/pgperffarm/settings.py @@ -150,6 +150,11 @@ DB_ENUM = { "simple": 1, "other": 2 }, + "machine_state": { + "prohibited": -1, + "pending": 0, + "active": 1, + }, "status": { "none": -1, "improved": 1, diff --git a/web/pgperffarm/urls.py b/web/pgperffarm/urls.py index e9a659d..f6b5989 100644 --- a/web/pgperffarm/urls.py +++ b/web/pgperffarm/urls.py @@ -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')), |