add uuid field
authorHongyuan Ma <CS_MaleicAcid@163.com>
Wed, 20 Jun 2018 13:25:11 +0000 (21:25 +0800)
committerHongyuan Ma <CS_MaleicAcid@163.com>
Wed, 20 Jun 2018 13:25:11 +0000 (21:25 +0800)
client/post-example/update.py
web/apps/test_records/models.py
web/apps/test_records/serializer.py
web/apps/test_records/views.py

index 9007ad433d0812ad7707dfeccd3da2c2046c7cd0..f889dea842b0ca285b421ce1e67b0c53e220c0c1 100644 (file)
@@ -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"))
index bc81771d6c3d7842b765bfebbff8f0646c5ba8ce..18056b38a3c02ec291ee182453b5880a4cf8feb4 100644 (file)
@@ -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:
index e4cad4bbc7dca4051fc8f3394950c7accbfde092..8e65657cea019201e87253d79f4377330214a439 100644 (file)
@@ -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'))
index 7b279ac9a93f6d6b78db58811e6e6d7e69f28fcc..9aeaa7072cf62c4fd09192471a98fb4b1f616485 100644 (file)
@@ -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