stepLogger.py (3636B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\charactercreator\client\logging\stepLogger.py 2 from collections import defaultdict 3 4 class TimeStepInformation: 5 6 def __init__(self): 7 self.timePerStep = defaultdict(long) 8 self.totalTime = 0 9 self.entryCountPerStep = defaultdict(int) 10 self.nextTriesPerStep = defaultdict(int) 11 12 13 class FinalStepResult(object): 14 15 def __init__(self): 16 self.schoolChoiceChanged = -1 17 self.nameValidatationTries = -1 18 self.didFinish = False 19 self.finalizeTryCount = 0 20 21 22 class FinalStepLogger(object): 23 24 def __init__(self): 25 self.triedNames = [] 26 self.startingSchool = -1 27 self.chosenSchool = -1 28 self.schoolChanged = -1 29 self.didFinish = None 30 self.storedSteps = [] 31 self.finalizeCount = 0 32 33 def Start(self): 34 pass 35 36 def SetSchool(self, school): 37 if school != self.chosenSchool: 38 self.schoolChanged += 1 39 self.chosenSchool = school 40 41 def AddTriedName(self, name): 42 self.triedNames.append(name) 43 44 def End(self): 45 self.didFinish = True 46 47 def Cancel(self): 48 self.didFinish = False 49 50 def Finalize(self): 51 self.finalizeCount += 1 52 53 def GetFinalStepResult(self): 54 result = FinalStepResult() 55 result.nameValidatationTries = len(self.triedNames) 56 result.didFinish = self.didFinish 57 result.schoolChoiceChanged = self.schoolChanged 58 result.finalizeTryCount = self.finalizeCount 59 return result 60 61 62 class StepLogger(object): 63 64 def __init__(self, timeProvider): 65 self.startTime = None 66 self.stopTime = None 67 self.nowTimeProvider = timeProvider 68 self.stepOrder = [] 69 self.timeStartOrder = [] 70 self.timeEndOrder = [] 71 self.currentStepID = None 72 self.stepTimeSpent = defaultdict(long) 73 self.stepEntryCount = defaultdict(int) 74 self.nextTryCount = defaultdict(int) 75 76 def IncrementNextTryCount(self): 77 if self.currentStepID is not None: 78 self.nextTryCount[self.currentStepID] += 1 79 80 def Start(self): 81 self.startTime = self._getTime() 82 83 def SetStep(self, stepID): 84 self._endCurrentStep() 85 self.timeStartOrder.append(self._getTime()) 86 self.currentStepID = stepID 87 self.stepEntryCount[stepID] += 1 88 self.stepOrder.append(stepID) 89 90 def _endCurrentStep(self): 91 if self.currentStepID: 92 self.timeEndOrder.append(self._getTime()) 93 94 def _getTime(self): 95 return self.nowTimeProvider() 96 97 def Stop(self): 98 self._endCurrentStep() 99 self.stopTime = self._getTime() 100 101 def GetStepOrder(self): 102 return self.stepOrder 103 104 def GetTimeObject(self): 105 finalTimes = defaultdict(long) 106 timeObject = TimeStepInformation() 107 for index in range(len(self.stepOrder)): 108 entry = self.stepOrder[index] 109 startTime = self.timeStartOrder[index] 110 endTime = self.timeEndOrder[index] 111 finalTimes[entry] += endTime - startTime 112 113 timeObject.timePerStep = finalTimes 114 timeObject.nextTriesPerStep = self.nextTryCount.copy() 115 timeObject.entryCountPerStep = self.stepEntryCount.copy() 116 timeObject.totalTime = self.stopTime - self.startTime 117 return timeObject 118 119 120 class StepInfo(object): 121 122 def __init__(self, stepID, nextTryCount, totalTime, entryCount): 123 self.stepID = stepID 124 self.nextTryCount = nextTryCount 125 self.totalCount = totalTime 126 self.entryCount = entryCount