[autotest] Add time segmented filter on job table on View Host page.
Modified the frontend to provide a start time and an end time with
datetime pickers. The place holder values are set to midnight "today".
Please note that the place holder values are not default values.
They are equivalent to empty strings, but exist to avoid making users
have to fill in all six segments (year, month, day, hour, minute, am/pm).
On the rpc side, added start_time and end_time parameters to
get_host_queue_entries, get_num_host_queue_entries,
get_host_queue_entries_and_special_tasks,
and get_num_host_queue_entries_and_special_tasks.
A helper function inject_start_end_time_to_dict is used to inject start_time
and end_time to filter_datas.
BUG=chromium:362240
TEST=ran afe, passed rpc_interface_unittest and frontend_unittest
DEPLOY=afe, apache
Change-Id: I44d59124cc104cf55d2ac3838be983286e270195
Reviewed-on: https://chromium-review.googlesource.com/209389
Tested-by: Jiaxi Luo <jiaxiluo@chromium.org>
Reviewed-by: Simran Basi <sbasi@chromium.org>
Commit-Queue: Jiaxi Luo <jiaxiluo@chromium.org>
diff --git a/frontend/afe/rpc_interface.py b/frontend/afe/rpc_interface.py
index 3d7cade..a8dcd6a 100644
--- a/frontend/afe/rpc_interface.py
+++ b/frontend/afe/rpc_interface.py
@@ -799,19 +799,29 @@
# host queue entries
-def get_host_queue_entries(**filter_data):
+def get_host_queue_entries(start_time=None, end_time=None, **filter_data):
"""\
@returns A sequence of nested dictionaries of host and job information.
"""
+ filter_data = rpc_utils.inject_times_to_filter('started_on__gte',
+ 'started_on__lte',
+ start_time,
+ end_time,
+ **filter_data)
return rpc_utils.prepare_rows_as_nested_dicts(
models.HostQueueEntry.query_objects(filter_data),
('host', 'atomic_group', 'job'))
-def get_num_host_queue_entries(**filter_data):
+def get_num_host_queue_entries(start_time=None, end_time=None, **filter_data):
"""\
Get the number of host queue entries associated with this job.
"""
+ filter_data = rpc_utils.inject_times_to_filter('started_on__gte',
+ 'started_on__lte',
+ start_time,
+ end_time,
+ **filter_data)
return models.HostQueueEntry.query_count(filter_data)
@@ -839,7 +849,8 @@
# support for host detail view
def get_host_queue_entries_and_special_tasks(host_id, query_start=None,
- query_limit=None):
+ query_limit=None, start_time=None,
+ end_time=None):
"""
@returns an interleaved list of HostQueueEntries and SpecialTasks,
in approximate run order. each dict contains keys for type, host,
@@ -848,12 +859,18 @@
total_limit = None
if query_limit is not None:
total_limit = query_start + query_limit
- filter_data = {'host': host_id,
- 'query_limit': total_limit,
- 'sort_by': ['-id']}
+ filter_data_common = {'host': host_id,
+ 'query_limit': total_limit,
+ 'sort_by': ['-id']}
- queue_entries = list(models.HostQueueEntry.query_objects(filter_data))
- special_tasks = list(models.SpecialTask.query_objects(filter_data))
+ filter_data_queue_entries, filter_data_special_tasks = (
+ rpc_utils.inject_times_to_hqe_special_tasks_filters(
+ filter_data_common, start_time, end_time))
+
+ queue_entries = list(models.HostQueueEntry.query_objects(
+ filter_data_queue_entries))
+ special_tasks = list(models.SpecialTask.query_objects(
+ filter_data_special_tasks))
interleaved_entries = rpc_utils.interleave_entries(queue_entries,
special_tasks)
@@ -864,10 +881,16 @@
return rpc_utils.prepare_for_serialization(interleaved_entries)
-def get_num_host_queue_entries_and_special_tasks(host_id):
- filter_data = {'host': host_id}
- return (models.HostQueueEntry.query_count(filter_data)
- + models.SpecialTask.query_count(filter_data))
+def get_num_host_queue_entries_and_special_tasks(host_id, start_time=None,
+ end_time=None):
+ filter_data_common = {'host': host_id}
+
+ filter_data_queue_entries, filter_data_special_tasks = (
+ rpc_utils.inject_times_to_hqe_special_tasks_filters(
+ filter_data_common, start_time, end_time))
+
+ return (models.HostQueueEntry.query_count(filter_data_queue_entries)
+ + models.SpecialTask.query_count(filter_data_special_tasks))
# recurring run