summaryrefslogtreecommitdiff
path: root/web
diff options
context:
space:
mode:
authorHongyuan Ma2018-06-18 02:54:57 +0000
committerHongyuan Ma2018-06-18 02:54:57 +0000
commitf3b89108e36d7ac10840710056c508cea4438355 (patch)
tree642c2df933976067aaecd4d57e01db21132f5ebd /web
parent2f791a2bbbece8c21bd988bfa9dee9c63b56b0b6 (diff)
update TestRecordListSerializer;add trend field;
Diffstat (limited to 'web')
-rw-r--r--web/apps/test_records/models.py7
-rw-r--r--web/apps/test_records/serializer.py79
-rw-r--r--web/apps/test_records/views.py10
-rw-r--r--web/pgperffarm/settings.py6
4 files changed, 57 insertions, 45 deletions
diff --git a/web/apps/test_records/models.py b/web/apps/test_records/models.py
index ddd34cc..df89e22 100644
--- a/web/apps/test_records/models.py
+++ b/web/apps/test_records/models.py
@@ -168,7 +168,9 @@ def calc_status(sender, instance, **kwargs):
print("prev dataset is: " + str(prevTestDataSet.id))
percentage = (instance.metric - prevTestDataSet.metric)/prevTestDataSet.metric
-
+ print('instance.metric is:' + str(instance.metric))
+ print('prevTestDataSet.metric is:' + str(prevTestDataSet.metric))
+ print('percentage is:' + str(percentage))
status = 0
if(percentage >= 0.05):
status = 1
@@ -180,8 +182,7 @@ def calc_status(sender, instance, **kwargs):
instance.percentage = percentage
instance.status = status
instance.prev_id = prevTestDataSet.id
- # print instance
- # instance.save()
+
return
diff --git a/web/apps/test_records/serializer.py b/web/apps/test_records/serializer.py
index 143638b..1389968 100644
--- a/web/apps/test_records/serializer.py
+++ b/web/apps/test_records/serializer.py
@@ -1,8 +1,12 @@
from rest_framework import serializers
+
+from pgperffarm.settings import DB_ENUM
from test_records.models import TestRecord, TestResult, PGInfo, LinuxInfo ,MetaInfo, TestDataSet
from users.serializer import UserMachineSerializer
from users.models import UserMachine
-from django.db.models import Q
+from django.db.models import Q, QuerySet, Count
+
+
class PGInfoSerializer(serializers.ModelSerializer):
'''
@@ -67,28 +71,12 @@ class CreateTestDateSetSerializer(serializers.ModelSerializer):
'status': -1,
'percentage': 0.0,
'''
- # def create(self, validated_data):
- # testDataSet = TestDataSet(
- # test_record=validated_data['test_record'],
- # clients=validated_data['clients'],
- # scale=validated_data['scale'],
- # std=validated_data['std'],
- # metric=validated_data['metric'],
- # test_cate=validated_data['test_cate'],
- # prev=validated_data['prev'],
- # status=validated_data['status'],
- # percentage=validated_data['percentage'],
- # )
- #
- # # testDataSet.set_password(validated_data['password'])
- # testDataSet.save()
- # return testDataSet
class Meta:
model = TestDataSet
fields = "__all__"
-class TestRecordSerializer(serializers.ModelSerializer):
+class TestRecordListSerializer(serializers.ModelSerializer):
'''
use ModelSerializer
@@ -96,36 +84,51 @@ class TestRecordSerializer(serializers.ModelSerializer):
pg_info =PGInfoSerializer()
linux_info = LinuxInfoSerializer()
meta_info = MetaInfoSerializer()
- ro_info = serializers.SerializerMethodField()
- rw_info = serializers.SerializerMethodField()
+
+ trend = serializers.SerializerMethodField()
machine_info = serializers.SerializerMethodField()
- client_max_num = serializers.SerializerMethodField()
+ # client_max_num = serializers.SerializerMethodField()
class Meta:
model = TestRecord
- fields = ('add_time', 'machine_info', 'pg_info', 'linux_info', 'meta_info', 'ro_info', 'rw_info', 'client_max_num')
-
- def get_ro_info(self, obj):
- all_data = TestResult.objects.filter(Q(test_record_id=obj.id ) ,test_cate_id=1)
+ fields = ('add_time', 'machine_info', 'pg_info', 'trend', 'linux_info', 'meta_info')
+
+ 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
- ro_info_serializer = TestResultSerializer(all_data, many=True, context={'request': self.context['request']})
- return ro_info_serializer.data
-
- def get_rw_info(self, obj):
- all_data = TestResult.objects.filter(Q(test_record_id=obj.id) ,test_cate_id=2)
-
- rw_info_serializer = TestResultSerializer(all_data, many=True, context={'request': self.context['request']})
- return rw_info_serializer.data
def get_machine_info(self, obj):
- machine_data = UserMachine.objects.filter(Q(id=obj.test_machine_id.id))
+ machine_data = UserMachine.objects.filter(Q(id=obj.test_machine_id))
machine_info_serializer = UserMachineSerializer(machine_data,many=True, context={'request': self.context['request']})
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)
+ # 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 TestRecordDetailSerializer(serializers.ModelSerializer):
diff --git a/web/apps/test_records/views.py b/web/apps/test_records/views.py
index 919a161..5e25942 100644
--- a/web/apps/test_records/views.py
+++ b/web/apps/test_records/views.py
@@ -7,7 +7,7 @@ from rest_framework.pagination import PageNumberPagination
from exception import TestDataUploadError
from models import UserMachine, TestCategory
from pgperffarm.settings import DB_ENUM
-from .serializer import TestRecordSerializer, TestRecordDetailSerializer, LinuxInfoSerializer, MetaInfoSerializer, \
+from .serializer import TestRecordListSerializer, TestRecordDetailSerializer, LinuxInfoSerializer, MetaInfoSerializer, \
PGInfoSerializer, CreateTestRecordSerializer, CreateTestDateSetSerializer, TestResultSerializer
from rest_framework.views import APIView
from rest_framework.decorators import api_view
@@ -21,7 +21,7 @@ import json
class StandardResultsSetPagination(PageNumberPagination):
- page_size = 10
+ page_size = 5
page_size_query_param = 'page_size'
max_page_size = 100
@@ -30,8 +30,8 @@ class TestRecordListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
"""
List test records
"""
- queryset = TestRecord.objects.all()
- serializer_class = TestRecordSerializer
+ queryset = TestRecord.objects.all().order_by('add_time')
+ serializer_class = TestRecordListSerializer
pagination_class = StandardResultsSetPagination
@@ -58,6 +58,8 @@ def TestRecordCreate(request, format=None):
# obj = data[0].pgbench
# jsLoads = json.loads(data[0])
+ # todo get machine by token
+ # todo hash the json_data to ensure unique
from django.db import transaction
try:
diff --git a/web/pgperffarm/settings.py b/web/pgperffarm/settings.py
index b4d34a0..afe66af 100644
--- a/web/pgperffarm/settings.py
+++ b/web/pgperffarm/settings.py
@@ -141,6 +141,12 @@ DB_ENUM = {
"mode":{
"simple":1,
"other":2
+ },
+ "status": {
+ "none": -1,
+ "improved": 1,
+ "quo": 2,
+ "regressive": 3
}
}