def do_executions(self, line): try: tokens = line.split(' ') idx = tokens[0] if len(tokens) > 1 and len(tokens[1]) > 0: action = tokens[1] print 'only showing action: %s' % action else: action = None idx = int(idx) if not self.check_idx(idx): return print 'executions in routine %s' % idx window_start = rostime_to_python(self.routine_pairs[idx][0].time, self.tz) window_end = rostime_to_python(self.routine_pairs[idx][1].time, self.tz) results = task_query.query_tasks( self.msg_store, event=range(TaskEvent.TASK_STARTED, TaskEvent.ROUTINE_STARTED), action=action, start_date=window_start, end_date=window_end, ) task_query.executions(results) except ValueError, e: print 'provided argument was not an int: %s' % idx print e
def all_task_events_in_window(self, window_start, window_end, action=None): return task_query.query_tasks( self.msg_store, event=range(TaskEvent.TASK_STARTED, TaskEvent.ROUTINE_STARTED), action=action, start_date=window_start, end_date=window_end, )
def init(): rospy.init_node("routine_analysis") msg_store = MessageStoreProxy(collection='task_events') parser = argparse.ArgumentParser(description='Analyses the task execution behaviour in a routine window. Assumes all task ids are unique in this window.') parser.add_argument('start', metavar='S', type=task_query.mkdatetime, nargs='?', help='Start datetime of window for routines. Formatted "d/m/y H:M" e.g. "06/07/14 06:38"') parser.add_argument('end', metavar='E', type=task_query.mkdatetime, nargs='?', help='End datetime of window for routines. Formatted "d/m/y H:M" e.g. "06/07/14 06:38"') parser.add_argument('-t', '--tasks', type=int, default=1, nargs='?', help='Number of tasks required for a routine to be considered') parser.add_argument('-ds', '--daily_start', type=task_query.mktime, nargs='?', default=time(0,0), help='Daily start time of the routine. Formatted "H:M" e.g. "06:38". Default 00:00') parser.add_argument('-de', '--daily_end', type=task_query.mktime, nargs='?', default=time(23,59), help='Daily end time of the routine. Formatted "H:M" e.g. "17:45". Default 23:59') parser.add_argument('-tz', '--time_zone', type=str, nargs='?', default='gb', help='Country code for timezone lookup. Default is "gb". Examples include "at" and "de".') args = parser.parse_args() assert args.daily_end > args.daily_start try: tz = pytz.timezone(pytz.country_timezones[args.time_zone][0]) analysis_start = args.start analysis_end = args.end if analysis_start is not None: analysis_start = analysis_start.replace(tzinfo=tz) if analysis_end is not None: analysis_end = analysis_end.replace(tzinfo=tz) if analysis_end is not None and analysis_start is not None: assert analysis_end > analysis_start filtered_routines = reconstruct_routines(task_query.query_tasks(msg_store, start_date=analysis_start, end_date=analysis_end)) analyser = RoutineAnalyser(msg_store, filtered_routines, daily_start = args.daily_start.replace(tzinfo=tz), daily_end = args.daily_end.replace(tzinfo=tz), tz=tz) # interactive mode analyser.cmdloop() except rospy.ServiceException, e: print "Service call failed: %s"%e
def do_print(self, line): for i in range(len(self.routine_pairs)): start = rostime_to_python(self.routine_pairs[i][0].time, self.tz) end = rostime_to_python(self.routine_pairs[i][1].time, self.tz) results = task_query.query_tasks(self.msg_store, start_date=start, end_date=end, event=[TaskEvent.TASK_STARTED]) print 'routine %s: %s to %s, duration: %s, tasks: %s' % ( i, start, end, end - start, len(results))
def init(): rospy.init_node("g4s_analysis") msg_store = MessageStoreProxy(collection='task_events') try: tz = pytz.timezone(pytz.country_timezones['at'][0]) analysis_start = datetime(2015,5,18,8,0,tzinfo=tz) analysis_end = datetime(2015,6,17,17,0,tzinfo=tz) daily_start = time(8,00, tzinfo=tz) daily_end = time(21,00, tzinfo=tz) filtered_routines = reconstruct_routines(task_query.query_tasks(msg_store, start_date=analysis_start, end_date=analysis_end)) days_off = [date(2015,5, 23), date(2015,5, 24), date(2015,5, 25), date(2015,5, 30), date(2015,5, 31), date(2015, 6, 4), date(2015, 6, 6), date(2015, 6, 7), date(2015,6, 13), date(2015,6, 14)] analyser = RoutineAnalyser(msg_store, filtered_routines, daily_start = daily_start, daily_end = daily_end, tz=tz, days_off = days_off) analyser.do_print('') analyser.do_days('3') analyser.do_merge('all') analyser.do_print('') analyser.do_days('0') analyser.do_autonomy('0') analyser.do_summarise('0') analyser.do_taskplot('0 aaf') analyser.do_timeplot('0 aaf') except rospy.ServiceException, e: print "Service call failed: %s"%e
def do_timeplot(self, line): try: tokens = line.split(' ') idx = tokens[0] filename = tokens[1] idx = int(idx) if not self.check_idx(idx): return window_start = rostime_to_python(self.routine_pairs[idx][0].time, self.tz) window_end = rostime_to_python(self.routine_pairs[idx][1].time, self.tz) # get all the task starts results = task_query.query_tasks( self.msg_store, event=TaskEvent.TASK_STARTED, start_date=window_start, end_date=window_end, ) # convert to an array of times dates = [ rostime_to_python(event[0].time, self.tz) for event in results ] with PdfPages('{0}_time_plot.pdf'.format(filename)) as pdf: n, bins, patches = plt.hist( [date.hour + date.minute / 60.0 for date in dates], bins=24 * 60 / 15) # plt.show() pdf.savefig() plt.close() except ValueError, e: print 'provided argument was not an int: %s' % idx
def do_summarise(self, idx): try: idx = int(idx) if not self.check_idx(idx): return window_start = rostime_to_python(self.routine_pairs[idx][0].time, self.tz) window_end = rostime_to_python(self.routine_pairs[idx][1].time, self.tz) results = task_query.query_tasks( self.msg_store, event=range(TaskEvent.TASK_STARTED, TaskEvent.ROUTINE_STARTED), start_date=window_start, end_date=window_end, ) task_query.aggregate(results) except ValueError, e: print 'provided argument was not an int: %s' % idx
def init(): rospy.init_node("aaf_y3_analysis") msg_store = MessageStoreProxy(database='aaf_message_store', collection='task_events') try: tz = pytz.timezone(pytz.country_timezones['at'][0]) analysis_start = datetime(2016, 3, 23, 16, 41, tzinfo=tz) analysis_end = datetime(2016, 5, 24, 20, 15, tzinfo=tz) daily_start = time(9, 00, tzinfo=tz) daily_end = time(22, 00, tzinfo=tz) filtered_routines = reconstruct_routines( task_query.query_tasks(msg_store, start_date=analysis_start, end_date=analysis_end)) # days_off = ['Saturday', 'Sunday', date(2015, 5, 25), date(2015, 5, 4) ] days_off = ['Saturday', 'Sunday'] analyser = RoutineAnalyser(msg_store, filtered_routines, daily_start=daily_start, daily_end=daily_end, tz=tz, days_off=days_off) # analyser.do_merge('11') # analyser.do_merge('11') # analyser.do_merge('11') # analyser.do_merge('11') # analyser.do_merge('11') # analyser.do_merge('0') # analyser.do_merge('0') # analyser.do_merge('0') # analyser.do_merge('0') # analyser.do_merge('0') # analyser.do_merge('0') # analyser.do_merge('0') # analyser.do_merge('0') # analyser.do_merge('0') # analyser.do_merge('0') # analyser.do_print('4') # analyser.do_days('0') analyser.do_merge('all') # analyser.do_print('') # analyser.do_days('0') # analyser.do_days('1') # analyser.do_days('2') # analyser.do_days('3') # analyser.do_days('4') # analyser.do_days('5') # analyser.do_days('6') # analyser.do_autonomy('0') # analyser.do_summarise('0') # analyser.do_print('') analyser.do_taskplot('0 aaf_y3') # analyser.do_timeplot('0 aaf_y3') except rospy.ServiceException, e: print "Service call failed: %s" % e
def init(): rospy.init_node("make_task_events_unique") msg_store = MessageStoreProxy(database='message_store', collection='task_events') try: # tz = pytz.timezone(pytz.country_timezones['gb'][0]) # analysis_start = datetime(2016,5,23,5,00,tzinfo=tz) # analysis_end = datetime(2016,6,6,23,00,tzinfo=tz) # groups = group(task_query.query_tasks(msg_store, start_date=analysis_start, end_date=analysis_end)) groups = group(task_query.query_tasks(msg_store)) msg_store = MessageStoreProxy(database='message_store', collection='task_events_unique') for idx, grp in enumerate(groups): print idx, len(grp) for task_event in grp: task_event.task.task_id = idx msg_store.insert(task_event) # filtered_routines = reconstruct_routines(task_query.query_tasks(msg_store, start_date=analysis_start, end_date=analysis_end)) # # days_off = ['Saturday', 'Sunday', date(2015, 5, 25), date(2015, 5, 4) ] # days_off = ['Saturday', 'Sunday'] # analyser = RoutineAnalyser(msg_store, filtered_routines, daily_start = daily_start, daily_end = daily_end, tz=tz, days_off = days_off) # # analyser.do_merge('11') # # analyser.do_merge('11') # # analyser.do_merge('11') # # analyser.do_merge('11') # # analyser.do_merge('11') # # analyser.do_merge('0') # # analyser.do_merge('0') # # analyser.do_merge('0') # # analyser.do_merge('0') # # analyser.do_merge('0') # # analyser.do_merge('0') # # analyser.do_merge('0') # # analyser.do_merge('0') # # analyser.do_merge('0') # # analyser.do_merge('0') # # analyser.do_print('4') # # analyser.do_days('0') # analyser.do_merge('all') # # analyser.do_print('') # # analyser.do_days('0') # # analyser.do_days('1') # # analyser.do_days('2') # # analyser.do_days('3') # # analyser.do_days('4') # # analyser.do_days('5') # # analyser.do_days('6') # # analyser.do_autonomy('0') # # analyser.do_summarise('0') # # analyser.do_print('') # analyser.do_taskplot('0 aaf_y3') # # analyser.do_timeplot('0 aaf_y3') except rospy.ServiceException, e: print "Service call failed: %s"%e
parser.add_argument('end', metavar='E', type=task_query.mkdatetime, nargs='?', default=datetime.utcnow(), help='end datetime of query, defaults to now. Formatted "d/m/y H:M" e.g. "06/07/14 06:38"') args = parser.parse_args() try: start = args.start end = args.end results = task_query.query_tasks(msg_store, start_date=start, end_date=end, event=[TaskEvent.TASK_STARTED, TaskEvent.TASK_FINISHED, TaskEvent.NAVIGATION_SUCCEEDED] ) duration = timedelta() charge_wait_duration = timedelta() started_task_event = TaskEvent() count = 0 dubious = [] charge_wait_count = 0 unstarted_count = 0 start_count = 0 day_durations = {}
type=task_query.mkdatetime, nargs='?', help= 'end datetime of query, defaults to no end. Formatted "d/m/y H:M" e.g. "06/07/14 06:38"' ) args = parser.parse_args() try: start = args.start end = args.end results = task_query.query_tasks( msg_store, event=[TaskEvent.ROUTINE_STARTED, TaskEvent.ROUTINE_STOPPED], start_date=start, end_date=end, ) for event in results: task_event = event[0] event_type = task_event.event if event_type == TaskEvent.ROUTINE_STARTED: last_start = rostime_to_python(task_event.time) append = '' else: end_time = rostime_to_python(task_event.time) append = ', so the robot ran for %s\n' % (end_time - last_start) print('%s %s%s' % (task_query.task_event_string(event_type),
) parser.add_argument( 'end', metavar='E', type=task_query.mkdatetime, nargs='?', help= 'end datetime of query, defaults to no end. Formatted "d/m/y H:M" e.g. "06/07/14 06:38"' ) args = parser.parse_args() try: start = args.start end = args.end results = task_query.query_tasks( msg_store, # event=TaskEvent.ADDED, # action='check_door', start_date=start, end_date=end, ) # print len(results) # print results task_query.summarise(results) except rospy.ServiceException, e: print "Service call failed: %s" % e