suite-scheduler: Get build from wider time range for multi-DUTs

For non tot branch there could be only 1 build per day, so one
failed build can cause us failed to locate most recent build
for a secondary board, and result in skip build for primary
board.

BUG=None
TEST=bin/run_tests

Change-Id: I9aad2c13e78e998c13a1cf73fb60cbe482b9e14c
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/infra/suite_scheduler/+/3123969
Commit-Queue: Xianuo Wang <xianuowang@chromium.org>
Tested-by: Xianuo Wang <xianuowang@chromium.org>
Reviewed-by: Sean McAllister <smcallis@google.com>
diff --git a/base_event.py b/base_event.py
index f741682..84253b9 100644
--- a/base_event.py
+++ b/base_event.py
@@ -97,8 +97,8 @@
                                      self.target_exec_utc - delay_minutes,
                                      self.keyword)
 
-  def get_daily_cros_builds(self, lab_config, build_client):
-    """Get CrOS builds in most recent 24 hours.
+  def get_recent_cros_builds(self, lab_config, build_client, delta_days=1):
+    """Get most recent CrOS builds based on a given delta.
 
     Multi-DUTs testing can be triggered by new build of primary board,
     however it may not necessary all secondary boards also have a new
@@ -111,14 +111,16 @@
       lab_config: a config_reader.LabConfig object, to read lab configs.
       build_client: a rest_client.BuildBucketBigqueryClient object, to
         connect Buildbucket Bigquery.
+      delta_days: a int, to indicate time range of days(now - delta_days)
+        we want to get builds.
 
     Returns:
       A two-tuples of dicts containing cros builds, see return from
         |build_lib.get_cros_builds|.
     """
     delay_minutes = datetime.timedelta(minutes=constants.BaseEvent.DELAY_MINUTES)
-    one_week_delta = datetime.timedelta(days=1)
-    since_date = self.target_exec_utc - one_week_delta
+    time_delta = datetime.timedelta(days=delta_days)
+    since_date = self.target_exec_utc - time_delta
     return build_lib.get_cros_builds(build_client,
                                      lab_config.get_cros_board_list(),
                                      since_date - delay_minutes,
@@ -171,7 +173,7 @@
     return firmware_build_dict
 
   def process_tasks(self, launch_control_builds, cros_builds_tuple,
-                    firmware_builds, configs, daily_cros_builds_tuple):
+                    firmware_builds, configs, recent_cros_builds_tuple):
     """Schedule tasks in task_list.
 
     Args:
@@ -183,8 +185,8 @@
         |get_firmware_builds|.
       configs: a config_reader.Configs object, to contain several config
         readers.
-      daily_cros_builds_tuple: Same as cros_builds_tuple, but contains
-        build info of last 24 hours.
+      recent_cros_builds_tuple: Same as cros_builds_tuple, but contains
+        build info from a wider range(e.g. 3 days).
 
     Returns:
       A list of finished tasks' names.
@@ -196,7 +198,7 @@
         if per_task.is_multi_dut_testing:
           scheduled = per_task.schedule_multi_duts(
               cros_builds_tuple,
-              daily_cros_builds_tuple,
+              recent_cros_builds_tuple,
               configs
           )
         else: