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,
     )
Exemple #3
0
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))
Exemple #5
0
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
Exemple #9
0
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