diff options
author | Hongyuan Ma | 2018-07-23 18:18:43 +0000 |
---|---|---|
committer | Hongyuan Ma | 2018-07-23 18:18:43 +0000 |
commit | 323d777d1231d1bb21b8c36adc06fafcc4dfef9c (patch) | |
tree | c2bc04ed009c2ef3824ea1d4ed644ff62df8b6fb | |
parent | 3b01f2bfc38f82a291650e6789275de1aebdd08a (diff) |
add GetStatusRecordList
-rw-r--r-- | front-end/src/page/detailInfo/index.jsx | 1 | ||||
-rw-r--r-- | front-end/src/page/login/index.jsx | 96 | ||||
-rw-r--r-- | web/apps/test_records/serializer.py | 60 | ||||
-rw-r--r-- | web/apps/test_records/views.py | 27 | ||||
-rw-r--r-- | web/pgperffarm/urls.py | 6 |
5 files changed, 115 insertions, 75 deletions
diff --git a/front-end/src/page/detailInfo/index.jsx b/front-end/src/page/detailInfo/index.jsx index 3938c22..af9008e 100644 --- a/front-end/src/page/detailInfo/index.jsx +++ b/front-end/src/page/detailInfo/index.jsx @@ -218,6 +218,7 @@ class DetailInfo extends React.Component { <Segment vertical>Farmer Info</Segment> <FarmerCard machine={machine}></FarmerCard> {/*//todo add a catalog*/} + <div className="affix">aaaa</div> </div> <div className="col-md-9"> diff --git a/front-end/src/page/login/index.jsx b/front-end/src/page/login/index.jsx index 12b8b00..317690e 100644 --- a/front-end/src/page/login/index.jsx +++ b/front-end/src/page/login/index.jsx @@ -74,71 +74,41 @@ class Login extends React.Component { return ( <div id="page-wrapper"> <div className="row"> - <div class="col-lg-6"> - <h4>Disabled Form States</h4> - <form role="form"> - <fieldset disabled=""> - <div class="form-group"> - <label for="disabledSelect">Disabled input</label> - <input class="form-control" id="disabledInput" type="text" placeholder="Disabled input" disabled=""> - </div> - <div class="form-group"> - <label for="disabledSelect">Disabled select menu</label> - <select id="disabledSelect" class="form-control"> - <option>Disabled select</option> - </select> - </div> - <div class="checkbox"> - <label> - <input type="checkbox">Disabled Checkbox - </label> - </div> - <button type="submit" class="btn btn-primary">Disabled Button</button> - </fieldset> - </form> - <h4>Form Validation States</h4> - <form role="form"> - <div class="form-group has-success"> - <label class="control-label" for="inputSuccess">Input with success</label> - <input type="text" class="form-control" id="inputSuccess"> - </div> - <div class="form-group has-warning"> - <label class="control-label" for="inputWarning">Input with warning</label> - <input type="text" class="form-control" id="inputWarning"> - </div> - <div class="form-group has-error"> - <label class="control-label" for="inputError">Input with error</label> - <input type="text" class="form-control" id="inputError"> + <div className="col-lg-16"> + <div className="panel panel-default"> + <div className="panel-heading"> + login to manage your machines! </div> - </form> - <h4>Input Groups</h4> - <form role="form"> - <div class="form-group input-group"> - <span class="input-group-addon">@</span> - <input type="text" class="form-control" placeholder="Username"> - </div> - <div class="form-group input-group"> - <input type="text" class="form-control"> - <span class="input-group-addon">.00</span> - </div> - <div class="form-group input-group"> - <span class="input-group-addon"><i class="fa fa-eur"></i> - </span> - <input type="text" class="form-control" placeholder="Font Awesome Icon"> - </div> - <div class="form-group input-group"> - <span class="input-group-addon">$</span> - <input type="text" class="form-control"> - <span class="input-group-addon">.00</span> - </div> - <div class="form-group input-group"> - <input type="text" class="form-control"> - <span class="input-group-btn"> - <button class="btn btn-default" type="button"><i class="fa fa-search"></i> - </button> - </span> + <div className="panel-body"> + <div className="row"> + {/*<!-- /.col-lg-6 (nested) -->*/} + <div className="col-lg-12"> + <h4>Login Form</h4> + <form role="form"> + <div className="form-group"> + {/*<label className="control-label" for="inputLogin"> login input</label>*/} + <input type="text" className="form-control" id="inputLogin" + placeholder="Username or email" + name="username" + onKeyUp={e => this.onInputKeyUp(e)} + onChange={e => this.onInputChange(e)}/> + </div> + <div className="form-group"> + <input type="text" className="form-control" id="inputPwd" + name="password" + placeholder="password" onKeyUp={e => this.onInputKeyUp(e)} + onChange={e => this.onInputChange(e)}/> + </div> + <button type="button" className="btn btn-primary" onClick={e => {this.onSubmit(e)}}>Button</button> + </form> + </div> + {/*<!-- /.col-lg-6 (nested) -->*/} + </div> + {/*<!-- /.row (nested) -->*/} </div> - </form> + {/*<!-- /.panel-body -->*/} + </div> + {/*<!-- /.panel -->*/} </div> {/*<!-- /.col-lg-12 -->*/} </div> diff --git a/web/apps/test_records/serializer.py b/web/apps/test_records/serializer.py index 11a8cf3..19732a2 100644 --- a/web/apps/test_records/serializer.py +++ b/web/apps/test_records/serializer.py @@ -15,7 +15,7 @@ class TestBranchSerializer(serializers.ModelSerializer): class Meta: model = TestBranch - fields = ('branch_name',) + fields = ('branch_name','id') class TestCategorySerializer(serializers.ModelSerializer): @@ -136,6 +136,64 @@ class CreateTestDateSetSerializer(serializers.ModelSerializer): model = TestDataSet fields = "__all__" +class TestStatusRecordListSerializer(serializers.ModelSerializer): + ''' + use 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', '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')) + data_list_count = TestDataSet.objects.filter(test_record_id=obj.id).count() + + trend = {} + trend['improved'] = 0 + trend['quo'] = 0 + trend['regressive'] = 0 + trend['none'] = 0 + trend['is_first'] = False + for i in dataset_list: + if i[0] == DB_ENUM['status']['improved']: + trend['improved'] += i[1] + elif i[0] == DB_ENUM['status']['quo']: + trend['quo'] += i[1] + elif i[0] == DB_ENUM['status']['regressive']: + trend['regressive'] += i[1] + elif i[0] == DB_ENUM['status']['none']: + trend['none'] += i[1] + + if (data_list_count == trend['none']): + trend['is_first'] = True + + print str(data_list_count) + return trend + + def get_machine_info(self, obj): + machine_data = UserMachine.objects.filter(id=obj.test_machine_id) + + machine_info_serializer = UserMachineSerializer(machine_data, many=True) + return machine_info_serializer.data + + # def get_client_max_num(self, obj): + # ro_client_num = TestResult.objects.filter(Q(test_record_id=obj.id ) ,test_cate_id=1).order_by('clients').distinct('clients').count() + # 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 TestRecordListSerializer(serializers.ModelSerializer): ''' diff --git a/web/apps/test_records/views.py b/web/apps/test_records/views.py index a567976..fd0c2d5 100644 --- a/web/apps/test_records/views.py +++ b/web/apps/test_records/views.py @@ -5,14 +5,16 @@ import django_filters import shortuuid from django.contrib.auth.hashers import make_password +from django.db.models import Count +# from requests import request from rest_framework.pagination import PageNumberPagination from exception import TestDataUploadError from test_records.filters import TestRecordListFilter -from models import UserMachine, TestCategory +from models import UserMachine, TestCategory, TestBranch from pgperffarm.settings import DB_ENUM from user_operation.views import UserMachinePermission -from .serializer import MachineHistoryRecordSerializer +from .serializer import MachineHistoryRecordSerializer, TestStatusRecordListSerializer, TestBranchSerializer from .serializer import TestRecordListSerializer, TestRecordDetailSerializer, LinuxInfoSerializer, MetaInfoSerializer, \ PGInfoSerializer, CreateTestRecordSerializer, CreateTestDateSetSerializer, TestResultSerializer @@ -54,18 +56,25 @@ class TestRecordListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): filter_backends = (django_filters.rest_framework.DjangoFilterBackend,) filter_class = TestRecordListFilter -class TestStatusRecordListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): +@api_view(['GET']) +def GetStatusRecordList(request, format=None): """ - List test records + List lastest test records involve all branches """ - queryset = TestRecord.objects.all().order_by('add_time') - serializer_class = TestRecordListSerializer - pagination_class = StandardResultsSetPagination - filter_backends = (django_filters.rest_framework.DjangoFilterBackend,) - filter_class = TestRecordListFilter + queryset = TestBranch.objects.all().order_by('branch_order').values_list('id','branch_name').annotate(num_records=Count('testrecord')).filter(num_records__gt=0) + # print queryset # <QuerySet [(1, u'HEAD', 3), (2, u'10_STABLE', 2)]> + ret = {'branch_num':queryset.__len__(),'result':[]} + for branch_item in queryset: + target_record = TestRecord.objects.filter(branch_id=branch_item[0]).order_by('test_machine_id','-add_time').distinct('test_machine_id').all() + # print target_record # <QuerySet [(1, u'HEAD', 3), (2, u'10_STABLE', 2)]> + data = TestRecordListSerializer(target_record,many=True) + obj = {'branch':branch_item[1],'data':data.data} + ret["result"].append(obj) + # msg = 'ok!' + return Response(ret, status=status.HTTP_201_CREATED) class TestRecordDetailViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet): diff --git a/web/pgperffarm/urls.py b/web/pgperffarm/urls.py index 2077330..c2d5d43 100644 --- a/web/pgperffarm/urls.py +++ b/web/pgperffarm/urls.py @@ -22,7 +22,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, TestRecordCreate, TestRecordDetailViewSet, \ - MachineHistoryRecordViewSet, TestStatusRecordListViewSet + MachineHistoryRecordViewSet, GetStatusRecordList from test_records.auth import MachineAuthToken # from test_records.view_base import TestListView @@ -35,7 +35,7 @@ from user_operation.views import UserMachineListViewSet, UserPortalInfoViewSet, router = DefaultRouter() router.register(r'records', TestRecordListViewSet, base_name="records") -router.register(r'status-records', TestStatusRecordListViewSet, base_name="status-records") +# router.register(r'status-records', TestStatusRecordListViewSet, base_name="status-records") router.register(r'detail', TestRecordDetailViewSet, base_name="detail") router.register(r'machine-records', MachineHistoryRecordViewSet, base_name="machine-records") router.register(r'machine-records-by-branch', UserMachineRecordByBranchListViewSet, base_name="machine-records-by-branch") @@ -61,6 +61,8 @@ 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'status-records/$', GetStatusRecordList, name='status-records'), + # url(r'portal/$', UserPortalInfoViewSet, name='portal'), # url(r'my-machine/$', UserMachineList.as_view(), name='my-machine'), |