test_desc = models.TextField(verbose_name="test desc", help_text="test desc")
# test_branch_id = models.ForeignKey(TestBranch, verbose_name="test category", help_text="test category")
meta_time = models.DateTimeField(default=timezone.now, verbose_name="meta time")
- hash = models.CharField(unique=True, default='', max_length=128, verbose_name="record hash", help_text="record hash")
+ hash = models.CharField(unique=True, default='', max_length=128, verbose_name="record hash",
+ help_text="record hash")
uuid = models.CharField(unique=True, default='', max_length=64, verbose_name="record uuid", help_text="record uuid")
add_time = models.DateTimeField(default=timezone.now, verbose_name="test added time")
print("prev dataset is: " + str(prevTestDataSet.id))
- percentage = (instance.metric - prevTestDataSet.metric)/prevTestDataSet.metric
+ 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):
+ if (percentage >= 0.05):
status = 1
elif (percentage <= -0.05):
status = 3
return
-
class TestResult(models.Model):
"""
test result sample:
from rest_framework import serializers
from pgperffarm.settings import DB_ENUM
-from test_records.models import TestRecord, TestResult, PGInfo, LinuxInfo ,MetaInfo, TestDataSet
+from test_records.models import TestRecord, TestResult, PGInfo, LinuxInfo, MetaInfo, TestDataSet, TestCategory
from users.serializer import UserMachineSerializer
from users.models import UserMachine
-from django.db.models import Q, QuerySet, Count
+from django.db.models import Count
-class PGInfoSerializer(serializers.ModelSerializer):
+class TestCategorySerializer(serializers.ModelSerializer):
+ '''
+ use TestCategorySerializer
+ '''
+
+ class Meta:
+ model = TestCategory
+ fields = ('cate_name', 'cate_sn')
+
+class PGInfoSerializer(serializers.ModelSerializer):
'''
- use ModelSerializer
+ use PGInfoSerializer
'''
+
class Meta:
model = PGInfo
- fields = "__all__"
+ fields = ('pg_branch',)
+
class LinuxInfoSerializer(serializers.ModelSerializer):
'''
- use ModelSerializer
+ use LinuxInfoSerializer
'''
class Meta:
model = LinuxInfo
- fields = "__all__"
+ fields = ('mounts', 'cpuinfo', 'sysctl', 'meminfo')
-class MetaInfoSerializer(serializers.ModelSerializer):
+class MetaInfoSerializer(serializers.ModelSerializer):
'''
- use ModelSerializer
+ use MetaInfoSerializer
'''
+
class Meta:
model = MetaInfo
- fields = "__all__"
+ fields = ('date', 'uname', 'benchmark', 'name')
-class TestResultSerializer(serializers.ModelSerializer):
+class TestResultSerializer(serializers.ModelSerializer):
'''
use TestResultSerializer
'''
+
class Meta:
model = TestResult
fields = "__all__"
-class CreateTestRecordSerializer(serializers.ModelSerializer):
+class CreateTestRecordSerializer(serializers.ModelSerializer):
'''
create ModelSerializer
'''
+
# pg_info =PGInfoSerializer()
# linux_info = LinuxInfoSerializer()
# meta_info = MetaInfoSerializer()
model = TestRecord
fields = "__all__"
-class CreateTestDateSetSerializer(serializers.ModelSerializer):
+class CreateTestDateSetSerializer(serializers.ModelSerializer):
'''
create TestDateSetSerializer
'test_record': testRecordRet.id,
model = TestDataSet
fields = "__all__"
-class TestRecordListSerializer(serializers.ModelSerializer):
+class TestRecordListSerializer(serializers.ModelSerializer):
'''
use ModelSerializer
'''
- pg_info =PGInfoSerializer()
+ pg_info = PGInfoSerializer()
linux_info = LinuxInfoSerializer()
meta_info = MetaInfoSerializer()
trend = serializers.SerializerMethodField()
machine_info = serializers.SerializerMethodField()
+
# client_max_num = serializers.SerializerMethodField()
class Meta:
model = TestRecord
elif i[0] == DB_ENUM['status']['none']:
trend['none'] += i[1]
- if(data_list_count == trend['none']):
+ 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, context={'request': self.context['request']})
+ 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):
# return max(ro_client_num,rw_client_num)
-class TestDataSetSerializer(serializers.ModelSerializer):
-
+class TestDataSetDetailSerializer(serializers.ModelSerializer):
class Meta:
model = TestDataSet
fields = "__all__"
-class TestRecordDetailSerializer(serializers.ModelSerializer):
+class TestRecordDetailSerializer(serializers.ModelSerializer):
'''
use ModelSerializer
'''
- pg_info =PGInfoSerializer()
+ pg_info = PGInfoSerializer()
linux_info = LinuxInfoSerializer()
+ test_machine = UserMachineSerializer()
meta_info = MetaInfoSerializer()
dataset_info = serializers.SerializerMethodField()
+
# rw_info = serializers.SerializerMethodField()
class Meta:
model = TestRecord
- fields = "__all__"
+ fields = (
+ 'uuid', 'pg_info', 'linux_info', 'meta_info', 'dataset_info', 'test_desc', 'meta_time', 'test_machine')
def get_dataset_info(self, obj):
- dataset_list = TestDataSet.objects.filter(test_record_id=obj.id).values_list('scale').annotate(Count('id'))
+ dataset_list = TestDataSet.objects.filter(test_record_id=obj.id).values_list('test_cate_id').annotate(
+ Count('id'))
# print(target_dataset)
dataset = {}
- # < QuerySet[(20, 2), (10, 4)] >
- for item in dataset_list:
- dataset[item[0]] = []
- target_dataset = TestDataSet.objects.filter(test_record_id=obj.id, scale=item[0])
- dataset_serializer = TestDataSetSerializer(target_dataset, many=True)
- dataset[item[0]] = dataset_serializer.data
+ # < QuerySet[(1, 3), (2, 3)] >
+
+ for cate_item in dataset_list:
+
+ cate_info = TestCategory.objects.filter(id=cate_item[0]).first()
+ cate_info_serializer = TestCategorySerializer(cate_info)
+ cate_sn = cate_info_serializer.data["cate_sn"]
+ dataset[cate_sn] = {}
+
+ dataset_scale_list = TestDataSet.objects.filter(test_record_id=obj.id, test_cate=cate_item[0]).values_list(
+ 'scale').annotate(Count('id'))
+ # print(dataset_scale_list) <QuerySet [(10, 2), (20, 1)]>
+ for scale_item in dataset_scale_list:
+ dataset[cate_sn][scale_item[0]] = {}
+
+ dataset_client_list = TestDataSet.objects.filter(test_record_id=obj.id,test_cate=cate_item[0]).values_list('clients').annotate( Count('id'))
+ # print(dataset_client_list) <QuerySet [(1, 1), (2, 1), (4, 1)]>
+ for client_item in dataset_client_list:
+ dataset[cate_sn][scale_item[0]][client_item[0]] = []
+
+ # target_dataset = TestDataSet.objects.filter(test_record_id=obj.id, test_cate=cate_item[0],
+ # scale=scale_item[0])
+ # dataset_serializer = TestDataSetDetailSerializer(target_dataset, many=True)
+ # dataset[cate_sn][scale_item[0]] = dataset_serializer.data
+
return dataset
# def get_ro_info(self, obj):
queryset = TestRecord.objects.all().order_by('add_time')
serializer_class = TestRecordListSerializer
pagination_class = StandardResultsSetPagination
-class TestRecordDetailViewSet( mixins.RetrieveModelMixin, viewsets.GenericViewSet):
+
+
+class TestRecordDetailViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet):
"""
detail test records
"""
- lookup_field = 'hash'
+ lookup_field = 'uuid'
queryset = TestRecord.objects.all().order_by('add_time')
serializer_class = TestRecordDetailSerializer
pagination_class = StandardResultsSetPagination
try:
record_hash = make_password(str(json_data), 'pg_perf_farm')
- print(record_hash.__len__())
+ # print(record_hash.__len__()) 77
r = TestRecord.objects.filter(hash=record_hash).count()
if r != 0:
raise TestDataUploadError("The same record already exists, please do not submit it twice.")
# pg_data = json_data['postgres']
pg_data = {
- 'pg_branch':1
+ 'pg_branch': 1
}
pgInfo = PGInfoSerializer(data=pg_data)
pgInfoRet = None
for scale, dataset_list in tag_list.iteritems():
print "ro[%s]=" % scale, dataset_list
for client_num, dataset in dataset_list.iteritems():
- print 'std is:'+ str(dataset['std'])
+ print 'std is:' + str(dataset['std'])
test_dataset_data = {
'test_record': testRecordRet.id,
msg = 'upload success!'
return Response(msg, status=status.HTTP_201_CREATED)
-
-