| Index: build/android/pylib/output/remote_output_manager.py
|
| diff --git a/build/android/pylib/output/remote_output_manager.py b/build/android/pylib/output/remote_output_manager.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c7d2f9f61ca458639828a85c7be1b16b24eddab2
|
| --- /dev/null
|
| +++ b/build/android/pylib/output/remote_output_manager.py
|
| @@ -0,0 +1,85 @@
|
| +# Copyright 2017 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +import hashlib
|
| +import os
|
| +
|
| +from pylib.base import output_manager
|
| +from pylib.utils import logdog_helper
|
| +from pylib.utils import google_storage_helper
|
| +
|
| +
|
| +class RemoteOutputManager(output_manager.OutputManager):
|
| +
|
| + def __init__(self, bucket):
|
| + """Uploads output files to Google Storage or LogDog.
|
| +
|
| + Files will either be uploaded directly to Google Storage or LogDog
|
| + depending on the datatype.
|
| +
|
| + Args
|
| + bucket: Bucket to use when saving to Google Storage.
|
| + """
|
| + super(RemoteOutputManager, self).__init__()
|
| + self._bucket = bucket
|
| +
|
| + #override
|
| + def _CreateArchiveJob(self, in_filepath, out_filename, out_subdir, datatype):
|
| + if datatype == output_manager.Datatype.TEXT:
|
| + return LogdogArchiveJob(in_filepath, out_filename, out_subdir, datatype)
|
| + else:
|
| + if self._bucket is None:
|
| + return None
|
| + return GoogleStorageArchiveJob(
|
| + in_filepath, out_filename, out_subdir, datatype, self._bucket)
|
| +
|
| +
|
| +class LogdogArchiveJob(output_manager.Job):
|
| +
|
| + def __init__(self, in_filepath, out_filename, out_subdir, datatype):
|
| + super(LogdogArchiveJob, self).__init__(
|
| + in_filepath, out_filename, out_subdir, datatype)
|
| + self._stream_name = '%s_%s' % (out_subdir, out_filename)
|
| +
|
| + def Link(self):
|
| + return logdog_helper.get_viewer_url(self._stream_name)
|
| +
|
| + def Archive(self):
|
| + with open(self._in_filepath, 'r') as f:
|
| + logdog_helper.text(self._stream_name, f.read())
|
| +
|
| +
|
| +class GoogleStorageArchiveJob(output_manager.Job):
|
| +
|
| + def __init__(self, in_filepath, out_filename, out_subdir, datatype, bucket):
|
| + super(GoogleStorageArchiveJob, self).__init__(
|
| + in_filepath, out_filename, out_subdir, datatype)
|
| + self._bucket = bucket
|
| +
|
| + self._content_addressed = (self._datatype in (
|
| + output_manager.Datatype.HTML,
|
| + output_manager.Datatype.IMAGE))
|
| +
|
| + if self._content_addressed:
|
| + sha1 = hashlib.sha1()
|
| + with open(in_filepath, 'rb') as f:
|
| + sha1.update(f.read())
|
| + self._upload_path = sha1.hexdigest()
|
| + else:
|
| + self._upload_path = os.path.join(out_subdir, out_filename)
|
| +
|
| + def Link(self):
|
| + return google_storage_helper.get_url_link(
|
| + self._upload_path, self._bucket)
|
| +
|
| + def Archive(self):
|
| + if self._content_addressed:
|
| + if google_storage_helper.exists(self._upload_path, self._bucket):
|
| + return
|
| +
|
| + content_type = None
|
| + if self._datatype == output_manager.Datatype.HTML:
|
| + content_type = 'text/html'
|
| + google_storage_helper.upload(
|
| + self._upload_path, self._in_filepath, self._bucket, content_type)
|
|
|