dart-sdk/tools/archive_crash.py

74 lines
2 KiB
Python
Executable file

#!/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())