8 print("Compute the enlapsed time for simulation with submitted, started and ended time")
9 print("in ParentFolderName and its subfolder and starting by FileName.")
10 print("The output is in statJobs.txt.")
12 print("python computeEnlapseTyme.py ParentFolderName FileName")
13 print("eg: python computeEnlapseTyme.py spect_phs_build gate")
24 #Split the line to find the different element of the date
26 submittedDate = datetime.datetime(year=2000, month=1, day=1, hour=0, minute=0, second=0)
31 submittedDate = submittedDate.replace(year=int(word))
34 submittedDate = submittedDate.replace(day=int(word))
37 submittedDate = submittedDate.replace(month=1)
39 submittedDate = submittedDate.replace(month=2)
41 submittedDate = submittedDate.replace(month=3)
43 submittedDate = submittedDate.replace(month=4)
45 submittedDate = submittedDate.replace(month=5)
47 submittedDate = submittedDate.replace(month=6)
49 submittedDate = submittedDate.replace(month=7)
51 submittedDate = submittedDate.replace(month=8)
53 submittedDate = submittedDate.replace(month=9)
55 submittedDate = submittedDate.replace(month=10)
57 submittedDate = submittedDate.replace(month=11)
59 submittedDate = submittedDate.replace(month=12)
60 #Find the hour:minute:second
61 elif word.count(':') == 2:
62 times = word.split(':')
63 submittedDate = submittedDate.replace(hour=int(times[0]))
64 submittedDate = submittedDate.replace(minute=int(times[1]))
65 submittedDate = submittedDate.replace(second=int(times[2]))
68 def computeEnlapsedTime():
69 #Get the folder name ad the filename
70 folderName = sys.argv[1]
71 fileName = sys.argv[2]
73 #Look for all files starting with the fileName
75 for root, dirs, files in os.walk(folderName):
77 if file.startswith(fileName):
78 filePaths.append(os.path.join(root, file))
80 #For each file into filePaths, save the submitted, started end ended time
84 for file in filePaths:
85 for line in open(file):
86 if "Submitted" in line:
87 submittedTime += [createDate(line)]
89 startedTime += [createDate(line)]
91 endedTime += [createDate(line)]
94 computationTime = [a - b for a, b in zip(endedTime, startedTime)]
95 computationTimeSecond = numpy.array([time.total_seconds() for time in computationTime])
96 waitingTime = [a - b for a, b in zip(endedTime, submittedTime)]
97 waitingTimeSecond = numpy.array([time.total_seconds() for time in waitingTime])
98 computePart =computationTimeSecond / waitingTimeSecond * 100.0
101 with open('statJobs.txt', 'w') as output:
102 output.write(str(len(filePaths)) + " run jobs\n\n")
103 output.write("Starting submission at " + str(min(submittedTime)) + "\n")
104 output.write("Finishing submission at " + str(max(submittedTime)) + "\n\n")
105 output.write("First job started computation at " + str(min(startedTime)) + "\n")
106 output.write("Last job started computation at " + str(max(startedTime)) + "\n\n")
107 output.write("First job ended computation at " + str(min(endedTime)) + "\n")
108 output.write("Last job ended computation at " + str(max(endedTime)) + "\n\n")
109 output.write("Min computation time " + str(min(computationTime)) + "\n")
110 output.write("Max computation time " + str(max(computationTime)) + "\n")
111 output.write("Mean computation time " + str(datetime.timedelta(seconds=numpy.mean(computationTimeSecond))) + "\n")
112 output.write("Std computation time " + str(datetime.timedelta(seconds=numpy.std(computationTimeSecond))) + "\n\n")
113 output.write("Min waiting time " + str(min(waitingTime)) + "\n")
114 output.write("Max waiting time " + str(max(waitingTime)) + "\n")
115 output.write("Mean waiting time " + str(datetime.timedelta(seconds=numpy.mean(waitingTimeSecond))) + "\n")
116 output.write("Std waiting " + str(datetime.timedelta(seconds=numpy.std(waitingTimeSecond))) + "\n\n")
117 output.write("Min efficiency " + str(min(computePart)) + " %\n")
118 output.write("Max efficiency " + str(max(computePart)) + " %\n")
119 output.write("Mean efficiency " + str(numpy.mean(computePart)) + " %\n")
120 output.write("Std efficiency " + str(numpy.std(computePart)) + " %\n\n")
121 output.write("Speed up " + str(numpy.mean(computationTimeSecond)*len(filePaths)/max(waitingTimeSecond)) + "\n\n")
125 if __name__ == "__main__":
126 if len(sys.argv) != 3:
129 computeEnlapsedTime()