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

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():
  d = '/b/build/slave/vm-linux-debug-x64-asan-be/build/dart/out/DebugX64/dart'
  CopyToGCS(d)

def Main():
  if 'PWD' in os.environ and 'x64-asan' in os.environ['PWD']:
    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())
