from django.shortcuts import render
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, \
PGInfoSerializer, CreateTestRecordSerializer, CreateTestDateSetSerializer, TestResultSerializer
from rest_framework.views import APIView
# obj = data[0].pgbench
# jsLoads = json.loads(data[0])
- linux_data = json_data['linux']
- linuxInfo = LinuxInfoSerializer(data=linux_data)
- linuxInfoRet = None
- if linuxInfo.is_valid():
- linuxInfoRet = linuxInfo.save()
- else:
- msg = 'linuxInfo save error'
- return Response(msg, status=status.HTTP_202_ACCEPTED)
-
- meta_data = json_data['meta']
- metaInfo = MetaInfoSerializer(data=meta_data)
- metaInfoRet = None
- if metaInfo.is_valid():
- metaInfoRet = metaInfo.save()
- else:
- msg = 'metaInfo save error'
+ from django.db import transaction
+
+ try:
+ with transaction.atomic():
+
+ linux_data = json_data['linux']
+ linuxInfo = LinuxInfoSerializer(data=linux_data)
+ linuxInfoRet = None
+ if linuxInfo.is_valid():
+ linuxInfoRet = linuxInfo.save()
+ else:
+ msg = 'linuxInfo invalid'
+ raise TestDataUploadError(msg)
+
+ meta_data = json_data['meta']
+ metaInfo = MetaInfoSerializer(data=meta_data)
+ metaInfoRet = None
+ if metaInfo.is_valid():
+ metaInfoRet = metaInfo.save()
+ else:
+ msg = 'metaInfo invalid'
+ raise TestDataUploadError(msg)
+
+ # pg_data = json_data['postgres']
+ pg_data = {
+ 'pg_branch':1
+ }
+ pgInfo = PGInfoSerializer(data=pg_data)
+ pgInfoRet = None
+ if pgInfo.is_valid():
+ pgInfoRet = pgInfo.save()
+ else:
+ msg = 'pgInfo invalid'
+ raise TestDataUploadError(msg)
+
+ test_record_data = {
+ 'pg_info': pgInfoRet.id,
+ 'linux_info': linuxInfoRet.id,
+ 'meta_info': metaInfoRet.id,
+ 'test_machine': 1,
+ 'test_desc': 'here is desc',
+ 'meta_time': metaInfoRet.date
+ }
+ testRecord = CreateTestRecordSerializer(data=test_record_data)
+ testRecordRet = None
+ if testRecord.is_valid():
+ testRecordRet = testRecord.save()
+ else:
+ msg = 'testRecord invalid'
+ print(testRecord.errors)
+ raise TestDataUploadError(msg)
+
+ pgbench = json_data['pgbench']
+ # print(type(ro))
+ ro = pgbench['ro']
+ for tag, tag_list in pgbench.iteritems():
+ test_cate = TestCategory.objects.get(cate_sn=tag)
+ if not test_cate:
+ continue
+ else:
+ print test_cate.cate_name
+ 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'])
+
+ test_dataset_data = {
+ 'test_record': testRecordRet.id,
+ 'clients': client_num,
+ 'scale': scale,
+ 'std': dataset['std'],
+ 'metric': dataset['metric'],
+ 'median': dataset['median'],
+ 'test_cate': test_cate.id,
+ # status,percentage calc by tarr
+ 'status': -1,
+ 'percentage': 0.0,
+ }
+ testDateSet = CreateTestDateSetSerializer(data=test_dataset_data)
+ testDateSetRet = None
+ if testDateSet.is_valid():
+ print 'dataset valid'
+ testDateSetRet = testDateSet.save()
+ else:
+ print(testDateSet.errors)
+ msg = 'testDateSet invalid'
+ raise TestDataUploadError(msg)
+
+ test_result_list = dataset['results']
+ for test_result in test_result_list:
+ test_result_data = test_result
+ test_result_data['test_dataset'] = testDateSetRet.id
+ test_result_data['mode'] = DB_ENUM['mode'][test_result_data['mode']]
+ testResult = TestResultSerializer(data=test_result_data)
+
+ testResultRet = None
+ if testResult.is_valid():
+ print 'testResult valid'
+ testResultRet = testResult.save()
+ else:
+ print(testResult.errors)
+ msg = 'testResult invalid'
+ raise TestDataUploadError(msg)
+
+ except Exception as e:
+ msg = 'upload error:' + str(e).encode('utf-8')
return Response(msg, status=status.HTTP_202_ACCEPTED)
- # pg_data = json_data['postgres']
- pg_data = {
- 'pg_branch':1
- }
- pgInfo = PGInfoSerializer(data=pg_data)
- pgInfoRet = None
- if pgInfo.is_valid():
- pgInfoRet = pgInfo.save()
- else:
- msg = 'pgInfo save error'
- return Response(msg, status=status.HTTP_202_ACCEPTED)
+ msg = 'upload success!'
+ return Response(msg, status=status.HTTP_201_CREATED)
- test_record_data = {
- 'pg_info': pgInfoRet.id,
- 'linux_info': linuxInfoRet.id,
- 'meta_info': metaInfoRet.id,
- 'test_machine_id': 1,
- 'test_desc': 'here is desc',
- 'meta_time': metaInfoRet.date
- }
- testRecord = CreateTestRecordSerializer(data=test_record_data)
- testRecordRet = None
- if testRecord.is_valid():
- testRecordRet = testRecord.save()
- else:
- msg = 'testRecord save error'
- return Response(msg, status=status.HTTP_202_ACCEPTED)
- pgbench = json_data['pgbench']
- # print(type(ro))
- ro = pgbench['ro']
- for tag, tag_list in pgbench.iteritems():
- test_cate = TestCategory.objects.get(cate_sn=tag)
- if not test_cate:
- continue
- else:
- print test_cate.cate_name
- 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'])
-
- test_dataset_data = {
- 'test_record': testRecordRet.id,
- 'clients': client_num,
- 'scale': scale,
- 'std': dataset['std'],
- 'metric': dataset['metric'],
- 'median': dataset['median'],
- 'test_cate': test_cate.id,
- # status,percentage cal by tarr
- 'status': -1,
- 'percentage': 0.0,
- }
- testDateSet = CreateTestDateSetSerializer(data=test_dataset_data)
- testDateSetRet = None
- if testDateSet.is_valid():
- print 'dataset valid'
- testDateSetRet = testDateSet.save()
- else:
- print(testDateSet.errors)
- msg = 'testDateSet save error'
- return Response(msg, status=status.HTTP_202_ACCEPTED)
-
- test_result_list = dataset['results']
- for test_result in test_result_list:
- test_result_data = test_result
- test_result_data['test_dataset_id'] = testDateSetRet.id
- testResult = TestResultSerializer(data=test_result_data)
-
- testResultRet = None
- if testResult.is_valid():
- print 'testResult valid'
- testResultRet = testDateSet.save()
- else:
- print(testResult.errors)
- msg = 'testResult save error'
- return Response(msg, status=status.HTTP_202_ACCEPTED)
-
-
- msg = 'upload success'
- return Response(msg, status=status.HTTP_201_CREATED)