5 import mongodb_store_msgs.srv
as dc_srv
6 import mongodb_store.util
as dc_util
7 from mongodb_store.message_store
import MessageStoreProxy
9 from datetime
import datetime, timedelta
10 from task_executor
import task_routine, task_query
14 if __name__ ==
'__main__':
16 rospy.init_node(
"execution_time")
18 msg_store = MessageStoreProxy(collection=
'task_events')
20 parser = argparse.ArgumentParser(description=
'Prints a summary of tasks executed within the queried time window.')
21 parser.add_argument(
'start', metavar=
'S', type=task_query.mkdatetime, nargs=
'?', default=datetime.utcfromtimestamp(0),
22 help=
'start datetime of query, defaults to no start. Formatted "d/m/y H:M" e.g. "06/07/14 06:38"')
24 parser.add_argument(
'end', metavar=
'E', type=task_query.mkdatetime, nargs=
'?', default=datetime.utcnow(),
25 help=
'end datetime of query, defaults to now. Formatted "d/m/y H:M" e.g. "06/07/14 06:38"')
28 args = parser.parse_args()
37 results = task_query.query_tasks(msg_store,
40 event=[TaskEvent.TASK_STARTED, TaskEvent.TASK_FINISHED, TaskEvent.NAVIGATION_SUCCEEDED]
44 duration = timedelta()
45 charge_wait_duration = timedelta()
47 started_task_event = TaskEvent()
57 for i
in range(0, len(results)):
60 previous = results[i-1][0]
62 task_event = results[i][0]
64 if i < len(results) - 1:
65 next = results[i+1][0]
70 if task_event.event == TaskEvent.TASK_STARTED
or task_event.task.task_id != previous.task.task_id:
72 elif (task_event.event == TaskEvent.TASK_FINISHED
or task_event.task.task_id != next.task.task_id
or (task_event.task.action ==
'' and task_event.event == TaskEvent.NAVIGATION_SUCCEEDED))
and started_task_event.task.task_id != 0:
76 started_task_event = task_event
81 if task_event.task.task_id == started_task_event.task.task_id:
83 end_time = datetime.utcfromtimestamp(task_event.time.to_sec())
84 task_duration = end_time - datetime.utcfromtimestamp(started_task_event.time.to_sec())
86 if task_event.task.action ==
'wait_action' and task_event.task.start_node_id ==
'ChargingPoint':
87 charge_wait_duration += task_duration
88 charge_wait_count += 1
91 if task_duration > timedelta(hours=3):
92 dubious.append((started_task_event, task_event))
98 task_date = end_time.date()
100 if task_date
in day_durations:
101 day_durations[task_date].append(task_duration)
103 day_durations[task_date] = [task_duration]
105 duration += task_duration
109 started_task_event = TaskEvent()
118 start = results[0][0].time
119 end = results[-1][0].time
122 print 'Starts: %s' % start_count
123 print 'Ends: %s (%s + %s + %s)' % (count + charge_wait_count + len(dubious), count, charge_wait_count, len(dubious))
125 print 'Unstarted: %s' % unstarted_count
126 print 'Dubious: %s' % len(dubious)
128 print 'Tasks Completed: %s' % count
129 print 'Task Duration: %s' % duration
131 print 'Charge Waits Finished: %s' % charge_wait_count
132 print 'Charge Waits Duration: %s' % charge_wait_duration
134 print 'Tasks Start: %s' % datetime.utcfromtimestamp(start.to_sec())
135 print 'Tasks End: %s' % datetime.utcfromtimestamp(end.to_sec())
137 print 'Total activity span: %s ' % timedelta(seconds=(end - start).to_sec())
139 days = day_durations.keys()
142 print 'Tasks and duration each day'
143 total_possible = timedelta()
145 total_possible += timedelta(hours=9)
146 durations = day_durations[day]
150 print '%s:\t%s\t%s' % (day, len(durations), total)
152 print 'Autonomy percentage: %.2f' % ((duration.total_seconds()/total_possible.total_seconds()) * 100)
156 except rospy.ServiceException, e:
157 print "Service call failed: %s"%e