12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- from mongoengine import Document, EmbeddedDocument
- from mongoengine.fields import *
- 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()
- @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
- class TestRun(Document):
- name = StringField()
- 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):
- 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
- TestRun.objects(id=self.id).update_one(push__results=result)
- @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)
|