|  | #!/usr/bin/env python | 
|  | # | 
|  | # Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file | 
|  | # for details. All rights reserved. Use of this source code is governed by a | 
|  | # BSD-style license that can be found in the LICENSE file. | 
|  | # | 
|  |  | 
|  | # A script that copies a core file and binary to GCS | 
|  | # We expect the dumps to be located in /tmp/coredump_PID directory | 
|  | # After we copy out the core files we delete the dumps localy | 
|  |  | 
|  | import os | 
|  | import shutil | 
|  | import sys | 
|  | import subprocess | 
|  | import tarfile | 
|  | import utils | 
|  | import uuid | 
|  |  | 
|  | from glob import glob | 
|  |  | 
|  | GCS_FOLDER = 'dart-temp-crash-archive' | 
|  | GSUTIL='/b/build/scripts/slave/gsutil' | 
|  |  | 
|  | def CreateTarball(input_dir, tarname): | 
|  | print 'Creating tar file: %s' % tarname | 
|  | tar = tarfile.open(tarname, mode='w:gz') | 
|  | tar.add(input_dir) | 
|  | tar.close() | 
|  |  | 
|  | def CopyToGCS(filename): | 
|  | gs_location = 'gs://%s/%s/' % (GCS_FOLDER, uuid.uuid4()) | 
|  | cmd = [GSUTIL, 'cp', filename, gs_location] | 
|  | print 'Running command: %s' % cmd | 
|  | subprocess.check_call(cmd) | 
|  | archived_filename = '%s%s' % (gs_location, filename.split('/').pop()) | 
|  | print 'Dump now available in %s' % archived_filename | 
|  |  | 
|  | def TEMPArchiveBuild(): | 
|  | if not 'PWD' in os.environ: | 
|  | return | 
|  | pwd = os.environ['PWD'] | 
|  | print pwd | 
|  | if not 'vm-' in pwd: | 
|  | return | 
|  | if 'win' in pwd or 'release' in pwd: | 
|  | return | 
|  | files = glob('%s/out/Debug*/dart' % pwd) | 
|  | files.extend(glob('%s/xcodebuild/Debug*/dart' % pwd)) | 
|  | print('Archiving: %s' % files) | 
|  | for f in files: | 
|  | CopyToGCS(f) | 
|  |  | 
|  | def Main(): | 
|  | TEMPArchiveBuild() | 
|  | if utils.GuessOS() != 'linux': | 
|  | print 'Currently only archiving crash dumps on linux' | 
|  | return 0 | 
|  | print 'Looking for crash dumps' | 
|  | num_dumps = 0 | 
|  | for v in os.listdir('/tmp'): | 
|  | if v.startswith('coredump'): | 
|  | fullpath = '/tmp/%s' % v | 
|  | if os.path.isdir(fullpath): | 
|  | num_dumps += 1 | 
|  | tarname = '%s.tar.gz' % fullpath | 
|  | CreateTarball(fullpath, tarname) | 
|  | CopyToGCS(tarname) | 
|  | os.unlink(tarname) | 
|  | shutil.rmtree(fullpath) | 
|  | print 'Found %s core dumps' % num_dumps | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | sys.exit(Main()) |