reactionTime() extension calculates time between the start of the issue and reaction to it from one of the responsible people (i.e. it does not count customers' follow up posts).
I am using "Adding a time log to your issues" from customization docs, if you are not, remove 'timelog'.
In the html folder of your tracker home add the following contents to a file 'issue.item.html':
<p tal:condition="python:request.user.hasPermission('Edit', 'timelog') and context.id"> Reaction time <b><tal:x replace="python:utils.reactionTime(context._klass.history(context._nodeid))" /></b> , all time <b><tal:x replace="python:utils.allTime(context.creation.plain(), context.activity.plain())" /></b> </p>
In the extensions folder of your tracker home add a file called 'timespent.py' with the following contents:
import time, datetime, re def reactionTime(history): i = 0 while i < len(history): if re.search(history[i][2], ('1 3 4 6')): return allTime(str(history[0][1]), str(history[i][1])) i += 1 return "none" def allTime(time1, time2): time_tuple1 = time.strptime(time1, "%Y-%m-%d.%H:%M:%S") time_tuple2 = time.strptime(time2, "%Y-%m-%d.%H:%M:%S") d1 = datetime.datetime(*time_tuple1[:6]) d2 = datetime.datetime(*time_tuple2[:6]) return d2 - d1 def init(instance): instance.registerUtil('reactionTime', reactionTime) instance.registerUtil('allTime', allTime)
reactionTime() counts time between issue creation and the first reaction of users 1, 3, 4 or 6. If you want to count reaction time for issues created by users 1, 3, 4 or 6, replace "i = 0" with "i = 1" in reactionTime(). allTime() counts time delta between 2 dates and writes result in format like this: "16 days, 0:17:45".