summaryrefslogtreecommitdiff
path: root/web/apps
diff options
context:
space:
mode:
authorHongyuan Ma2018-06-17 10:56:33 +0000
committerHongyuan Ma2018-06-17 10:56:33 +0000
commit4c4cba00c314869314037f3a9d2c34b18c46990b (patch)
tree1081b7fd84078b836254d923097f30a77f3225bc /web/apps
parent46bfea2645661bb5f04dcc7d6497a88a08930111 (diff)
add calc_status receiver
Diffstat (limited to 'web/apps')
-rw-r--r--web/apps/test_records/models.py70
-rw-r--r--web/apps/test_records/serializer.py28
-rw-r--r--web/apps/test_records/views.py5
3 files changed, 91 insertions, 12 deletions
diff --git a/web/apps/test_records/models.py b/web/apps/test_records/models.py
index 5171dd4..f71e44a 100644
--- a/web/apps/test_records/models.py
+++ b/web/apps/test_records/models.py
@@ -53,6 +53,7 @@ class PGInfo(models.Model):
def __str__(self):
return self.pg_branch
+
class MetaInfo(models.Model):
"""
pg info
@@ -66,6 +67,7 @@ class MetaInfo(models.Model):
verbose_name = "meta info"
verbose_name_plural = "meta info"
+
class LinuxInfo(models.Model):
"""
linux info
@@ -82,12 +84,13 @@ class LinuxInfo(models.Model):
def __str__(self):
return self.mounts
+
class TestRecord(models.Model):
"""
tests
"""
test_machine = models.ForeignKey(UserMachine, verbose_name="test owner",
- help_text="person who add this test item")
+ help_text="person who add this test item")
pg_info = models.ForeignKey(PGInfo, verbose_name="pg info", help_text="pg info")
meta_info = models.ForeignKey(MetaInfo, verbose_name="meta info", help_text="meta info")
linux_info = models.ForeignKey(LinuxInfo, verbose_name="linux info", help_text="linux info")
@@ -101,16 +104,22 @@ class TestRecord(models.Model):
verbose_name = "tests"
verbose_name_plural = "tests"
-class TestDataSet(models.Model):
+# class AbstractTestDataSet(models.Model):
+# prev = models.ForeignKey('self',blank=True, null=True, related_name='none')
+# class Meta:
+# abstract = True
+class TestDataSet(models.Model):
test_record = models.ForeignKey(TestRecord, verbose_name="test record id", help_text="test record id")
test_cate = models.ForeignKey(TestCategory, verbose_name="test cate id", help_text="test cate id")
clients = models.IntegerField(verbose_name="clients", help_text="clients of the test dataset")
scale = models.IntegerField(verbose_name="scale", help_text="scale of the test dataset")
- std = models.DecimalField(max_digits=18, decimal_places=8, verbose_name="std",help_text="std of the test dataset")
- metric = models.DecimalField(max_digits=18, decimal_places=8, verbose_name="metric",help_text="metric of the test dataset")
- median = models.DecimalField(max_digits=18, decimal_places=8, verbose_name="median",help_text="median of the test dataset")
+ std = models.DecimalField(max_digits=18, decimal_places=8, verbose_name="std", help_text="std of the test dataset")
+ metric = models.DecimalField(max_digits=18, decimal_places=8, verbose_name="metric",
+ help_text="metric of the test dataset")
+ median = models.DecimalField(max_digits=18, decimal_places=8, verbose_name="median",
+ help_text="median of the test dataset")
STATUS_CHOICE = (
(-1, 'none'),
@@ -119,13 +128,60 @@ class TestDataSet(models.Model):
(3, 'regressive'),
)
status = models.IntegerField(choices=STATUS_CHOICE, verbose_name="status", help_text="status of this dataset")
- percentage = models.DecimalField(max_digits=8, decimal_places=4, verbose_name="percentage",help_text="percentage compared to previous dataset")
+ percentage = models.DecimalField(max_digits=8, decimal_places=4, verbose_name="percentage",
+ help_text="percentage compared to previous dataset")
+
+ prev = models.ForeignKey('self', blank=True, null=True, related_name='prev1',
+ verbose_name="previous test dataset id", help_text="previous test dataset id")
+ # prev = models.ForeignKey('self',verbose_name="previous test dataset id", help_text="previous test dataset id")
add_time = models.DateTimeField(default=timezone.now, verbose_name="test dataset time")
class Meta:
verbose_name = "test dataset"
verbose_name_plural = "test dataset"
+
+from django.db.models.signals import post_save, pre_save
+from django.dispatch import receiver
+
+
+@receiver(post_save, sender=TestDataSet)
+def calc_status(sender, instance, **kwargs):
+ print('dataset:' + str(instance.id) + " prev:" + str(instance.prev) + " will be save ")
+
+ record_id = instance.test_record.id
+ machine_id = instance.test_record.test_machine_id
+ add_time = instance.test_record.add_time
+ prevRecord = TestRecord.objects.order_by('-add_time').filter(test_machine_id=machine_id,
+ add_time__lt=add_time).first()
+ if (prevRecord == None):
+ print("prev record not found")
+ return
+ print("previd is: " + str(prevRecord.id))
+ prevTestDataSet = TestDataSet.objects.filter(test_record_id=prevRecord.id, scale=instance.scale,
+ clients=instance.clients, test_cate_id=instance.test_cate_id).first()
+
+ if (prevTestDataSet == None):
+ print("prev dataset not found")
+ return
+
+ percentage = (instance.metric - prevTestDataSet.metric)/prevTestDataSet.metric
+
+ status = 0
+ if(percentage >= 0.05):
+ status = 1
+ elif (percentage <= -0.05):
+ status = 3
+ else:
+ status = 2
+
+ instance.percentage = percentage
+ instance.status = status
+ instance.save()
+ return
+
+
+
class TestResult(models.Model):
"""
test result sample:
@@ -164,4 +220,4 @@ class TestResult(models.Model):
class Meta:
verbose_name = "test result"
- verbose_name_plural = "test result" \ No newline at end of file
+ verbose_name_plural = "test result"
diff --git a/web/apps/test_records/serializer.py b/web/apps/test_records/serializer.py
index 13cc6f8..143638b 100644
--- a/web/apps/test_records/serializer.py
+++ b/web/apps/test_records/serializer.py
@@ -56,7 +56,33 @@ class CreateTestDateSetSerializer(serializers.ModelSerializer):
'''
create TestDateSetSerializer
- '''
+ '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,
+ '''
+ # 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
diff --git a/web/apps/test_records/views.py b/web/apps/test_records/views.py
index 6ff4317..919a161 100644
--- a/web/apps/test_records/views.py
+++ b/web/apps/test_records/views.py
@@ -50,10 +50,6 @@ def TestRecordCreate(request, format=None):
Receive data from client
"""
- # serializers = BizcircleSerializer(data=request.data)
- # if serializers.is_valid():
- # serializers.save()
- # return Response(serializers.data, status=status.HTTP_201_CREATED)
data = request.data
print type(data[0])
@@ -168,6 +164,7 @@ def TestRecordCreate(request, format=None):
except Exception as e:
msg = 'upload error:' + str(e).encode('utf-8')
+ # todo add log
return Response(msg, status=status.HTTP_202_ACCEPTED)
msg = 'upload success!'