1# Copyright 2015 The Chromium Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5 6from recipe_engine import recipe_api 7 8import re 9 10 11class CTApi(recipe_api.RecipeApi): 12 """Provides steps to run CT tasks.""" 13 14 CT_GS_BUCKET = 'cluster-telemetry' 15 16 def download_swarming_skps(self, page_type, slave_num, skps_chromium_build, 17 dest_dir, start_range, num_skps): 18 """Downloads SKPs corresponding to the specified page type, slave and build. 19 20 The SKPs are stored in Google Storage in the following dirs in CT_GS_BUCKET: 21 /swarming/skps/${page_type}/${skps_chromium_build}/{start_range..end_num}/ 22 The SKPs are downloaded into subdirectories in the dest_dir. 23 24 Args: 25 api: RecipeApi instance. 26 page_type: str. The CT page type. Eg: 1k, 10k. 27 slave_num: int. The number of the swarming bot. 28 skps_chromium_build: str. The build the SKPs were captured from. 29 dest_dir: path obj. The directory to download SKPs into. 30 start_range: int. The subdirectory number to start from. 31 num_skps: int. The total number of SKPs to download starting with 32 start_range. 33 """ 34 slave_dest_dir = dest_dir.join('slave%s' % slave_num ) 35 remote_dir = 'gs://%s/swarming/skps/%s/%s' % ( 36 self.CT_GS_BUCKET, page_type, skps_chromium_build) 37 38 # Delete and recreate the local dir. 39 self.m.run.rmtree(slave_dest_dir) 40 self.m.file.ensure_directory( 41 'makedirs %s' % self.m.path.basename(slave_dest_dir), slave_dest_dir) 42 43 # Populate the empty local dir. 44 gsutil_args = ['-m', 'cp'] 45 for i in range(start_range, start_range+num_skps): 46 gsutil_args.append('%s/%s/*.skp' % (str(remote_dir), i)) 47 gsutil_args.append(str(slave_dest_dir)) 48 try: 49 self.m.gsutil(gsutil_args, use_retry_wrapper=False) 50 except self.m.step.StepFailure: 51 # Some subdirectories might have no SKPs in them. 52 pass 53