0

特定のジョブ クラスの各プロセスにかかる時間を取得するための擬似コードは次のようになります。

                psteps.each {ProcessingStep pstep ->
    List<ExecutionState> states = ProcessingStepUpdate.findAllByProcessingStepAndState(pstep,ExecutionState.blah)
    states.each{ProcessingStepUpdate psu ->
        use(groovy.time.TimeCategory) {
            startTime=pc.started
            endTime=psu.date
            timeTaken = endTime-startTime
            println "Time Taken for ${pc.startJobClass} is ${timeTaken} in ${JCType}"                    
        }
    }
}

コードは配列/リストの形式ではないため、各ジョブクラスにかかる合計時間を計算できません。

これが私が試したものです

use(groovy.time.TimeDuration){
        duration=timeTaken.toArray().sum()
        println "Time taken for ${JCType} is ${duration}"
        println "***********************************************************"
    }

間違いは何ですか?私はOOPSの世界に不慣れで、過去2日間で立ち往生しています。

4

2 に答える 2

2

timeTaken はリストではなく、groovy.time.TimeDuration オブジェクトです。これを試して:

def states = ProcessingStepUpdate.findAllByProcessingStepAndState(pstep,ExecutionState.blah)
def times = []
states.each{psu ->
    use(groovy.time.TimeCategory) {
        startTime=pc.started
        endTime=psu.date
        timeTaken = endTime-startTime
        times << timeTaken // You add timeTaken to arrayList
        println "Time Taken for ${pc.startJobClass} is ${timeTaken} in ${JCType}"
        println "Total time ${times.sum()}"     
    }
}
于 2012-08-22T11:34:25.557 に答える
0

クロージャー 内で合計時間を保持するstates.each{変数を宣言する前に、 totalTime に追加し続けるだけ です 少しグルーヴィーなコードを読んでみてください。多くのコードをスキップして、totalTime
def totalTime = 0
eachtimeTaken
totalTime += Integer.parseInt(timeTaken)
List<ExecutionState> statesdef states

やった後もstates.each{書く必要はありませんProcessingStepUpdate psu ->!あなたはそれをすることpsu ->も、しないこともできます。リストit内の現在のオブジェクトを参照するために使用しますstates

于 2012-08-22T11:10:33.760 に答える