summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHongyuan Ma2018-07-23 18:18:43 +0000
committerHongyuan Ma2018-07-23 18:18:43 +0000
commit323d777d1231d1bb21b8c36adc06fafcc4dfef9c (patch)
treec2bc04ed009c2ef3824ea1d4ed644ff62df8b6fb
parent3b01f2bfc38f82a291650e6789275de1aebdd08a (diff)
add GetStatusRecordList
-rw-r--r--front-end/src/page/detailInfo/index.jsx1
-rw-r--r--front-end/src/page/login/index.jsx96
-rw-r--r--web/apps/test_records/serializer.py60
-rw-r--r--web/apps/test_records/views.py27
-rw-r--r--web/pgperffarm/urls.py6
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'),