Home | History | Annotate | Download | only in tradefed
      1 #!/usr/bin/env python
      2 # Copyright 2014 The Chromium Authors. All rights reserved.
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 
      6 """Upload DM output PNG files and JSON summary to Google Storage."""
      7 
      8 
      9 import datetime
     10 import os
     11 import shutil
     12 import sys
     13 import tempfile
     14 
     15 def main(dm_dir, build_number, builder_name):
     16   """Upload DM output PNG files and JSON summary to Google Storage.
     17 
     18     dm_dir:        path to PNG files and JSON summary    (str)
     19     build_number:  nth build on this builder             (str or int)
     20     builder_name:  name of this builder                  (str)
     21   """
     22   # import gs_utils
     23   current_dir = os.path.dirname(os.path.abspath(__file__))
     24   sys.path.insert(0, os.path.join(current_dir, "../../../common/py/utils"))
     25   import gs_utils
     26 
     27   # Private, but Google-readable.
     28   ACL = gs_utils.GSUtils.PredefinedACL.PRIVATE
     29   FINE_ACLS = [(
     30     gs_utils.GSUtils.IdType.GROUP_BY_DOMAIN,
     31     'google.com',
     32     gs_utils.GSUtils.Permission.READ
     33   )]
     34 
     35   if not os.path.isfile(os.path.join(dm_dir, 'dm.json')):
     36     sys.exit("no dm.json file found in output directory.")
     37 
     38   # Move dm.json to its own directory to make uploading it easier.
     39   tmp = tempfile.mkdtemp()
     40   shutil.move(os.path.join(dm_dir, 'dm.json'),
     41               os.path.join(tmp,    'dm.json'))
     42 
     43   # Only images are left in dm_dir.  Upload any new ones.
     44   gs = gs_utils.GSUtils()
     45   gs.upload_dir_contents(dm_dir,
     46                          'skia-android-dm',
     47                          'dm-images-v1',
     48                          upload_if = gs.UploadIf.IF_NEW,
     49                          predefined_acl = ACL,
     50                          fine_grained_acl_list = FINE_ACLS)
     51 
     52 
     53   # /dm-json-v1/year/month/day/hour/build-number/builder/dm.json
     54   now = datetime.datetime.utcnow()
     55   summary_dest_dir = '/'.join(['dm-json-v1',
     56                                str(now.year ).zfill(4),
     57                                str(now.month).zfill(2),
     58                                str(now.day  ).zfill(2),
     59                                str(now.hour ).zfill(2),
     60                                str(build_number),
     61                                builder_name])
     62 
     63   # Upload the JSON summary.
     64   gs.upload_dir_contents(tmp,
     65                          'skia-android-dm',
     66                          summary_dest_dir,
     67                          predefined_acl = ACL,
     68                          fine_grained_acl_list = FINE_ACLS)
     69 
     70 
     71   # Just for hygiene, put dm.json back.
     72   shutil.move(os.path.join(tmp,    'dm.json'),
     73               os.path.join(dm_dir, 'dm.json'))
     74   os.rmdir(tmp)
     75 
     76 if '__main__' == __name__:
     77   main(*sys.argv[1:])
     78