123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- from mongoengine import Document, EmbeddedDocument
- from mongoengine.fields import IntField, ListField, EmbeddedDocumentField, FloatField, StringField, DateTimeField
- from volumes.models import Volume
- class Dim(EmbeddedDocument):
- x = IntField()
- y = IntField()
- z = IntField()
- class Result(EmbeddedDocument):
- originalSize = EmbeddedDocumentField(Dim)
- subvolumeSize = EmbeddedDocumentField(Dim)
- durationInSec = FloatField()
- duration_copy_in_sec = FloatField()
- point = EmbeddedDocumentField(Dim)
- itemsize = IntField()
- volume_id = StringField()
- @property
- def get_copy_throughput(self):
- number_of_items = self.itemsize
- number_of_items *= self.subvolumeSize.x
- number_of_items *= self.subvolumeSize.y
- number_of_items *= self.subvolumeSize.z
- return number_of_items / self.duration_copy_in_sec / 1024 / 1024
- @property
- def volume_name(self):
- if self.volumeId is None:
- return ''
- volumes = Volume.objects(id=self.volumeId)
- if volumes is None:
- return self.volumeId
- else:
- return volumes.first().name
- class TestRun(Document):
- name = StringField()
- # for compatibilityreasons, it's left in here
- volumeId = StringField()
- results = ListField(EmbeddedDocumentField(Result))
- created = DateTimeField()
- meta = {"db_alias": "test_results"}
- def addTestResult(self, originalShape, subvolumeShape, subvolumePoint, durationInSec, duration_copy_in_sec, dtype, volume_id):
- result = Result()
- inputSize = Dim()
- inputSize.z, inputSize.y, inputSize.x = originalShape
- result.originalSize = inputSize
- subvolumeSize = Dim()
- subvolumeSize.z, subvolumeSize.y, subvolumeSize.x = subvolumeShape
- result.subvolumeSize = subvolumeSize
- point = Dim()
- point.x, point.y, point.z = subvolumePoint
- result.point = point
- result.durationInSec = durationInSec
- result.duration_copy_in_sec = duration_copy_in_sec
- result.itemsize = dtype.itemsize
- result.volume_id = volume_id
- TestRun.objects(id=self.id).update_one(push__results=result)
- @property
- def volume_name(self):
- if self.volumeId is None:
- return ''
- volumes = Volume.objects(id=self.volumeId)
- if volumes is None:
- return self.volumeId
- else:
- return volumes.first().name
- @property
- def get_average(self):
- if len(self.results) is 0:
- return 0
- average = 0
- for result in self.results:
- average += result.durationInSec
- return average / len(self.results)
- @property
- def get_copy_throughput_average(self):
- if len(self.results) is 0:
- return 0
- average = 0
- for result in self.results:
- average += result.get_copy_throughput
- return average / len(self.results)
|