From f99a9f96adcc7b7fa1784fd34fd7dfa3154e570a Mon Sep 17 00:00:00 2001 From: Hongyuan Ma Date: Wed, 20 Jun 2018 21:25:11 +0800 Subject: [PATCH] add uuid field --- client/post-example/update.py | 2 +- web/apps/test_records/models.py | 3 ++- web/apps/test_records/serializer.py | 2 +- web/apps/test_records/views.py | 19 ++++++++++++++++--- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/client/post-example/update.py b/client/post-example/update.py index 9007ad4..f889dea 100644 --- a/client/post-example/update.py +++ b/client/post-example/update.py @@ -29,7 +29,7 @@ def http_post(url, data, token): req.add_header('Content-Type', 'application/json') response = urllib2.urlopen(req) result = json.loads(response.read()) - print result + print result.encode('utf-8') with open("./results.json",'r') as load_f: load_dict = (json.load(load_f, encoding="UTF-8")) diff --git a/web/apps/test_records/models.py b/web/apps/test_records/models.py index bc81771..18056b3 100644 --- a/web/apps/test_records/models.py +++ b/web/apps/test_records/models.py @@ -98,7 +98,8 @@ class TestRecord(models.Model): 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=32, 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") class Meta: diff --git a/web/apps/test_records/serializer.py b/web/apps/test_records/serializer.py index e4cad4b..8e65657 100644 --- a/web/apps/test_records/serializer.py +++ b/web/apps/test_records/serializer.py @@ -90,7 +90,7 @@ class TestRecordListSerializer(serializers.ModelSerializer): # client_max_num = serializers.SerializerMethodField() class Meta: model = TestRecord - fields = ('hash', 'add_time', 'machine_info', 'pg_info', 'trend', 'linux_info', 'meta_info') + fields = ('uuid', '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')) diff --git a/web/apps/test_records/views.py b/web/apps/test_records/views.py index 7b279ac..9aeaa70 100644 --- a/web/apps/test_records/views.py +++ b/web/apps/test_records/views.py @@ -1,6 +1,9 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals +import shortuuid + +from django.contrib.auth.hashers import make_password from django.shortcuts import render from rest_framework.pagination import PageNumberPagination @@ -58,10 +61,18 @@ def TestRecordCreate(request, format=None): # jsLoads = json.loads(data[0]) # todo get machine by token - # todo hash the json_data to ensure unique + test_machine = 1 + from django.db import transaction try: + + record_hash = make_password(str(json_data), 'pg_perf_farm') + print(record_hash.__len__()) + r = TestRecord.objects.filter(hash=record_hash).count() + if r != 0: + raise TestDataUploadError("The same record already exists, please do not submit it twice.") + with transaction.atomic(): linux_data = json_data['linux'] @@ -98,9 +109,11 @@ def TestRecordCreate(request, format=None): 'pg_info': pgInfoRet.id, 'linux_info': linuxInfoRet.id, 'meta_info': metaInfoRet.id, - 'test_machine': 1, + 'test_machine': test_machine, 'test_desc': 'here is desc', - 'meta_time': metaInfoRet.date + 'meta_time': metaInfoRet.date, + 'hash': record_hash, + 'uuid': shortuuid.uuid() } testRecord = CreateTestRecordSerializer(data=test_record_data) testRecordRet = None -- 2.39.5