annotate PerfsDb/DbPopulator.py @ 161:27b3b0df5f90

2 upload tests
author am@osimis.io
date Fri, 17 Aug 2018 17:24:11 +0200
parents df1f9946571c
children dbc42a03ee75
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
156
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
1 import typing
161
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
2 import time
156
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
3 from orthancRestApi import OrthancClient
161
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
4 from TestResult import TestResult
156
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
5 from DbSize import DbSize
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
6
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
7 class DbPopulator:
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
8
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
9 def __init__(self, orthanc: OrthancClient, dbSize: DbSize):
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
10 self._orthanc = orthanc
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
11 self._dbSize = dbSize
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
12 self._sourceInstanceId = None
161
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
13 self._fileCounter = 0
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
14
156
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
15 def populate(self):
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
16 self._sourceInstanceId = self._orthanc.uploadDicomFile("../Database/DummyCT.dcm")
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
17
158
df1f9946571c perfs db continued: tests working with tiny DBs on all setup but the sqliteplugin
am@osimis.io
parents: 156
diff changeset
18 if self._dbSize == DbSize.Tiny:
df1f9946571c perfs db continued: tests working with tiny DBs on all setup but the sqliteplugin
am@osimis.io
parents: 156
diff changeset
19 patientCount = 1
df1f9946571c perfs db continued: tests working with tiny DBs on all setup but the sqliteplugin
am@osimis.io
parents: 156
diff changeset
20 smallStudiesPerPatient = 2
df1f9946571c perfs db continued: tests working with tiny DBs on all setup but the sqliteplugin
am@osimis.io
parents: 156
diff changeset
21 largeStudiesPerPatient = 1
161
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
22 seriesPerSmallStudy = 1
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
23 seriesPerLargeStudy = 2
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
24 instancesPerSmallSeries = 1
158
df1f9946571c perfs db continued: tests working with tiny DBs on all setup but the sqliteplugin
am@osimis.io
parents: 156
diff changeset
25 instancesPerLargeSeries = 5
df1f9946571c perfs db continued: tests working with tiny DBs on all setup but the sqliteplugin
am@osimis.io
parents: 156
diff changeset
26 elif self._dbSize == DbSize.Small:
161
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
27 patientCount = 100
156
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
28 smallStudiesPerPatient = 2
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
29 largeStudiesPerPatient = 1
161
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
30 seriesPerSmallStudy = 1
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
31 seriesPerLargeStudy = 2
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
32 instancesPerSmallSeries = 1
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
33 instancesPerLargeSeries = 30
158
df1f9946571c perfs db continued: tests working with tiny DBs on all setup but the sqliteplugin
am@osimis.io
parents: 156
diff changeset
34 elif self._dbSize == DbSize.Medium:
df1f9946571c perfs db continued: tests working with tiny DBs on all setup but the sqliteplugin
am@osimis.io
parents: 156
diff changeset
35 patientCount = 1000
df1f9946571c perfs db continued: tests working with tiny DBs on all setup but the sqliteplugin
am@osimis.io
parents: 156
diff changeset
36 smallStudiesPerPatient = 2
161
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
37 largeStudiesPerPatient = 2
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
38 seriesPerSmallStudy = 1
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
39 seriesPerLargeStudy = 2
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
40 instancesPerSmallSeries = 1
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
41 instancesPerLargeSeries = 300
158
df1f9946571c perfs db continued: tests working with tiny DBs on all setup but the sqliteplugin
am@osimis.io
parents: 156
diff changeset
42 elif self._dbSize == DbSize.Large:
161
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
43 patientCount = 10000
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
44 smallStudiesPerPatient = 2
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
45 largeStudiesPerPatient = 2
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
46 seriesPerSmallStudy = 1
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
47 seriesPerLargeStudy = 2
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
48 instancesPerSmallSeries = 1
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
49 instancesPerLargeSeries = 300
158
df1f9946571c perfs db continued: tests working with tiny DBs on all setup but the sqliteplugin
am@osimis.io
parents: 156
diff changeset
50 else:
df1f9946571c perfs db continued: tests working with tiny DBs on all setup but the sqliteplugin
am@osimis.io
parents: 156
diff changeset
51 raise NotImplementedError
156
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
52
161
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
53 print("Will generate data for (approximately):")
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
54 print("{n:>12} patients".format(n=patientCount))
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
55 print("{n:>12} studies".format(n=patientCount * (smallStudiesPerPatient + largeStudiesPerPatient)))
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
56 print("{n:>12} instances".format(n=patientCount * (smallStudiesPerPatient * seriesPerSmallStudy * instancesPerSmallSeries + largeStudiesPerPatient * seriesPerLargeStudy * instancesPerLargeSeries)))
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
57
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
58 startTime = time.time()
158
df1f9946571c perfs db continued: tests working with tiny DBs on all setup but the sqliteplugin
am@osimis.io
parents: 156
diff changeset
59 # first add data that are the same in small and large DBs (and that can be used in tests for comparing the same things !!)
156
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
60
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
61 # used in TestFindStudyByPatientId5Results
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
62 self.createStudy(studyIndex=99994, patientIndex=99998, seriesCount=1, instancesPerSeries=1)
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
63 self.createStudy(studyIndex=99995, patientIndex=99998, seriesCount=1, instancesPerSeries=1)
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
64 self.createStudy(studyIndex=99996, patientIndex=99998, seriesCount=1, instancesPerSeries=1)
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
65 self.createStudy(studyIndex=99997, patientIndex=99998, seriesCount=1, instancesPerSeries=1)
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
66 self.createStudy(studyIndex=99998, patientIndex=99998, seriesCount=1, instancesPerSeries=1)
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
67
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
68 # used in TestFindStudyByStudyDescription1Result
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
69 # used in TestFindStudyByPatientId1Result
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
70 self.createStudy(studyIndex=99999, patientIndex=99999, seriesCount=1, instancesPerSeries=1)
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
71
158
df1f9946571c perfs db continued: tests working with tiny DBs on all setup but the sqliteplugin
am@osimis.io
parents: 156
diff changeset
72 # then, add data to make the DB "large" or "small"
156
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
73 for patientIndex in range(0, patientCount):
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
74 studyIndex=0
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
75 print("Generating data for patient " + str(patientIndex))
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
76 for i in range(0, smallStudiesPerPatient):
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
77 print("Generating small study " + str(i))
161
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
78 self.createStudy(studyIndex=studyIndex, patientIndex=patientIndex, seriesCount=seriesPerSmallStudy, instancesPerSeries=instancesPerSmallSeries)
156
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
79 studyIndex+=1
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
80 for i in range(0, largeStudiesPerPatient):
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
81 print("Generating large study " + str(i))
161
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
82 self.createStudy(studyIndex=studyIndex, patientIndex=patientIndex, seriesCount=seriesPerLargeStudy, instancesPerSeries=instancesPerLargeSeries)
156
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
83 studyIndex+=1
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
84
161
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
85 endTime = time.time()
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
86 print("Generation completed. Elapsed time: {duration:.2f} sec".format(duration=endTime-startTime))
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
87 print("Uploaded {n} files -> {p:.2f} files/sec".format(n=self._fileCounter, p=self._fileCounter/(endTime-startTime)))
156
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
88
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
89 def createStudy(self, studyIndex: int, patientIndex: int, seriesCount: int, instancesPerSeries: int):
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
90 for seriesIndex in range(0, seriesCount):
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
91 for instanceIndex in range(0, instancesPerSeries):
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
92 dicomFile = self.createDicomFile(patientIndex=patientIndex, studyIndex=studyIndex, seriesIndex=seriesIndex, instanceIndex=instanceIndex)
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
93 self._orthanc.uploadDicom(dicomFile)
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
94
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
95 def createDicomFile(self, patientIndex: int, studyIndex: int, seriesIndex: int, instanceIndex: int) -> object:
161
27b3b0df5f90 2 upload tests
am@osimis.io
parents: 158
diff changeset
96 self._fileCounter += 1
156
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
97 return self._orthanc.instances.modify(
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
98 instanceId=self._sourceInstanceId,
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
99 replaceTags={
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
100 "PatientName": "Patient-" + str(patientIndex),
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
101 "PatientID": str(patientIndex),
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
102 "StudyDescription": str(patientIndex) + "-" + str(studyIndex),
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
103 "SeriesDescription": str(patientIndex) + "-" + str(studyIndex) + "-" + str(seriesIndex),
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
104 "SOPInstanceUID": str(patientIndex) + "." + str(studyIndex) + "." + str(seriesIndex) + "." + str(instanceIndex),
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
105 "StudyInstanceUID": str(patientIndex) + "." + str(studyIndex),
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
106 "SeriesInstanceUID": str(patientIndex) + "." + str(studyIndex) + "." + str(seriesIndex),
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
107 "SeriesNumber": str(seriesIndex),
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
108 "InstanceNumber": str(instanceIndex)
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
109 },
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
110 deleteOriginal=False
f1a75985caa8 first Db test framework - work in progress
am@osimis.io
parents:
diff changeset
111 )