ScriptRunner - Time in progress

Ran Alkalay February 27, 2017

We are trying to extract the Time in progress using the example on Adaptavist ScriptRunner documentation.

However, we are ending with a result of 83 years, 4 weeks, 1 day, 4 hours, 35 minutes for an item that was created 24 hours ago, while the result on "In progress" should be less than 24 hours.

According to my check the calculation is fine, it is just the output of the diff in milliseconds which is probably translated to date and then the gap is much larger.

I would appreciate if you can assist solving this issue.

import com.atlassian.core.util.DateUtils
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.history.ChangeItemBean
def changeHistoryManager = ComponentAccessor.getChangeHistoryManager()
def inProgressName = "In progress"
List<Long> rt = [0L]
def changeItems = changeHistoryManager.getChangeItemsForField(issue, "status")
changeItems.reverse().each {ChangeItemBean item ->
    item.toString == inProgressName
    //log.warn(System.currentTimeMillis())
    //log.warn(item.created.getTime())  
    //log.warn(System.currentTimeMillis() - item.created.getTime())
    
    def timeDiff = (System.currentTimeMillis()  - item.created.getTime())
    if (item.fromString == inProgressName) {
        rt << -timeDiff
    }
    if (item.toString == inProgressName){
        rt << timeDiff
        //log.warn(rt.sum())
    }
}
if (! changeItems) {
    rt << (System.currentTimeMillis() - issue.getCreated().getTime())
}
def total = rt.sum() as Long
//log.warn(rt)
return  total ?: 0L

 

 

1 answer

0 votes
Udo Carls March 16, 2017

I had the same problem. Try the following using "Text Field(multiline)" as template:

import com.atlassian.core.util.DateUtils
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.history.ChangeItemBean
 
def changeHistoryManager = ComponentAccessor.getChangeHistoryManager()
def inProgressName = "In Progress"
def rt = [0L]
changeHistoryManager.getChangeItemsForField (issue, "status").reverse().each {ChangeItemBean item ->
 
    def timeDiff = System.currentTimeMillis() - item.created.getTime()
    if (item.fromString == inProgressName) {
        rt << -timeDiff
    }
    if (item.toString == inProgressName){
        rt << timeDiff
    }
} 
DateUtils.getDurationString(Math.round(rt.sum() / 1000))

Suggest an answer

Log in or Sign up to answer