Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Unified Diff: build/android/pylib/output/remote_output_manager.py

Issue 2933993002: Add local results details pages.
Patch Set: Add --local-output arg which enables local results detail pages. Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..04cb55232a2f37e0efe3bb64b4387d19da2f2ee8
--- /dev/null
+++ b/build/android/pylib/output/remote_output_manager.py
@@ -0,0 +1,86 @@
+# 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 = False
jbudorick 2017/07/19 22:45:09 nit: self._content_addressed = (self._datatype in
mikecase (-- gone --) 2017/07/26 21:21:37 done
+ if self._datatype in (output_manager.Datatype.HTML,
+ output_manager.Datatype.IMAGE):
+ self._content_addressed = True
+
+ if self._content_addressed:
+ sha1 = hashlib.sha1()
+ with open(in_filepath, 'rb') as f:
+ sha1.update(f.read())
jbudorick 2017/07/19 22:45:09 I'd be interested in how this performs. If it's co
mikecase (-- gone --) 2017/07/26 21:21:37 ack
+ 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)

Powered by Google App Engine
This is Rietveld 408576698