task_query.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 
4 import rospy
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
8 from strands_executive_msgs.msg import Task, TaskEvent
9 from datetime import datetime
10 from task_executor import task_routine
11 
12 def remove_duplicates(results):
13  seen = set()
14  seen_add = seen.add
15  return [ x for x in results if x[0] not in seen and not seen_add(x[0])]
16 
17 def query_tasks(msg_store, task_id=None, action=None, start_date=None, end_date=None, event=None):
18  msg_query = {}
19  meta_query = {}
20 
21 
22  if task_id is not None:
23  msg_query["task.task_id"] = task_id
24 
25  if action is not None:
26  msg_query["task.action"] = action
27 
28  if event is not None:
29  if not isinstance(event, list):
30  event = [event]
31 
32  # create a disjunctive query over events
33  event_qs = []
34  for e in event:
35  event_qs.append({'event': e})
36 
37  msg_query['$or'] = event_qs
38 
39  if start_date is not None:
40  if end_date is None:
41  meta_query["inserted_at"] = {"$gte": start_date}
42  else:
43  meta_query["inserted_at"] = {"$gte": start_date, "$lte" : end_date}
44  elif end_date is not None:
45  meta_query["inserted_at"] = {"$lte": end_date}
46 
47 
48  results = msg_store.query(TaskEvent._type, message_query=msg_query,
49  meta_query=meta_query, single=False)
50 
51 
52  # results.sort(key=lambda x: x[1]["inserted_at"])
53  results.sort(key=lambda x: x[0].time.to_sec())
54 
55  return results
56 
58  if te == TaskEvent.ADDED:
59  return 'ADDED'
60  elif te == TaskEvent.DEMANDED:
61  return 'DEMANDED'
62  elif te == TaskEvent.TASK_STARTED:
63  return 'TASK_STARTED'
64  elif te == TaskEvent.NAVIGATION_STARTED:
65  return 'NAVIGATION_STARTED'
66  elif te == TaskEvent.NAVIGATION_SUCCEEDED:
67  return 'NAVIGATION_SUCCEEDED'
68  elif te == TaskEvent.NAVIGATION_FAILED:
69  return 'NAVIGATION_FAILED'
70  elif te == TaskEvent.NAVIGATION_PREEMPTED:
71  return 'NAVIGATION_PREEMPTED'
72  elif te == TaskEvent.EXECUTION_STARTED:
73  return 'EXECUTION_STARTED'
74  elif te == TaskEvent.EXECUTION_SUCCEEDED:
75  return 'EXECUTION_SUCCEEDED'
76  elif te == TaskEvent.EXECUTION_FAILED:
77  return 'EXECUTION_FAILED'
78  elif te == TaskEvent.EXECUTION_PREEMPTED:
79  return 'EXECUTION_PREEMPTED'
80  elif te == TaskEvent.CANCELLED_MANUALLY:
81  return 'CANCELLED_MANUALLY'
82  elif te == TaskEvent.DROPPED:
83  return 'DROPPED'
84  elif te == TaskEvent.TASK_FINISHED:
85  return 'TASK_FINISHED'
86  elif te == TaskEvent.TASK_FAILED:
87  return 'TASK_FAILED'
88  elif te == TaskEvent.TASK_SUCCEEDED:
89  return 'TASK_SUCCEEDED'
90  elif te == TaskEvent.TASK_PREEMPTED:
91  return 'TASK_PREEMPTED'
92 
93 
94 
95 def print_event(task_event):
96  """ Prints a single event """
97  print 'task %s\t%s\t%s\t%s\t%s' % (task_event.task.task_id, task_event.task.action, task_event.task.start_node_id, task_event_string(task_event.event), datetime.utcfromtimestamp(task_event.time.to_sec()).strftime('%d/%m/%y %H:%M:%S'))
98 
99 def summarise(results):
100 
101  if len(results) == 0:
102  print 'No task events match the query'
103  return
104 
105  output = []
106  tid = 0
107 
108  for task_event, meta in results:
109  if task_event.task.action == '':
110  task_event.task.action = 'no action'
111 
112  if task_event.event > TaskEvent.DEMANDED:
113  if task_event.task.task_id != tid:
114  tid = task_event.task.task_id
115  output.append('\n')
116 
117  output.append(['task %s' % task_event.task.task_id, task_event.task.action, task_event.task.start_node_id, task_event_string(task_event.event), datetime.utcfromtimestamp(task_event.time.to_sec()).strftime('%d/%m/%y %H:%M:%S')])
118 
119  # http://stackoverflow.com/a/9989441/135585
120  col_width = max(len(word) for row in output for word in row) + 4 # padding for row in output:
121  for row in output:
122  if isinstance(row, list):
123  print "".join(word.ljust(col_width) for word in row)
124  else:
125  print row
126 
127 
128 def mkdatetime(date_string):
129  return datetime.strptime(date_string, '%d/%m/%y %H:%M')
130 
def mkdatetime(date_string)
Definition: task_query.py:128
def remove_duplicates(results)
Definition: task_query.py:12
def summarise(results)
Definition: task_query.py:99
def print_event(task_event)
Definition: task_query.py:95


task_executor
Author(s): Nick Hawes
autogenerated on Tue Mar 17 2015 20:08:13