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

Side by Side Diff: build/android/test_wrapper/logdog_wrapper.py

Issue 2695963003: Use logdog butler subcommand to run tests. (Closed)
Patch Set: fixes Created 3 years, 10 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 unified diff | Download patch
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright 2016 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 """Wrapper for adding logdog streaming support to swarming tasks."""
7
8 import argparse
9 import logging
10 import os
11 import signal
12 import subprocess
13 import sys
14 import urllib
15
16
17 def CommandParser():
18 # Parses the command line arguments being passed in
19 parser = argparse.ArgumentParser()
20 parser.add_argument('--logdog-bin-cmd', required=True,
21 help='Command for running logdog butler binary')
22 parser.add_argument('--project', required=True,
23 help='Name of logdog project')
24 parser.add_argument('--logdog-server',
25 default='services-dot-luci-logdog.appspot.com',
26 help='URL of logdog server, https:// is assumed.')
27 parser.add_argument('--service-account-json', required=True,
28 help='Location of authentication json')
29 parser.add_argument('--prefix', required=True,
30 help='Prefix to be used for logdog stream')
31 parser.add_argument('--source', required=True,
32 help='Location of file for logdog to stream')
33 parser.add_argument('--name', required=True,
34 help='Name to be used for logdog stream')
35 return parser
36
37
38 def CreateUrl(server, project, prefix, name):
39 stream_name = '%s/%s/+/%s' % (project, prefix, name)
40 return 'https://%s/v/?s=%s' % (server, urllib.quote_plus(stream_name))
41
42
43 def CreateSignalForwarder(proc):
44 def handler(signum, _frame):
45 logging.error('Forwarding signal %s to test process', str(signum))
46 proc.send_signal(signum)
47
48 return handler
49
50
51 def main():
52 parser = CommandParser()
53 args, test_cmd = parser.parse_known_args(sys.argv[1:])
54 logging.basicConfig(level=logging.INFO)
55 if not test_cmd:
56 parser.error('Must specify command to run after the logdog flags')
57 test_proc = subprocess.Popen(test_cmd)
58 original_sigterm_handler = signal.signal(
59 signal.SIGTERM, CreateSignalForwarder(test_proc))
60 try:
61 result = test_proc.wait()
62 finally:
63 signal.signal(signal.SIGTERM, original_sigterm_handler)
64 if '${SWARMING_TASK_ID}' in args.prefix:
65 args.prefix = args.prefix.replace('${SWARMING_TASK_ID}',
66 os.environ.get('SWARMING_TASK_ID'))
67 url = CreateUrl('luci-logdog.appspot.com', args.project, args.prefix,
68 args.name)
69 logdog_cmd = [args.logdog_bin_cmd, '-project', args.project,
70 '-output', 'logdog,host=%s' % args.logdog_server,
71 '-prefix', args.prefix,
72 '-service-account-json', args.service_account_json,
73 'stream', '-source', args.source,
74 '-stream', '-name=%s' % args.name]
75
76 if not os.path.exists(args.logdog_bin_cmd):
77 logging.error(
78 'Logdog binary %s unavailable. Unable to upload logcats.',
79 args.logdog_bin_cmd)
80 elif not os.path.exists(args.source):
81 logging.error(
82 'Logcat sources not found at %s. Unable to upload logcats.',
83 args.source)
84 else:
85 subprocess.call(logdog_cmd)
86 logging.info('Logcats are located at: %s', url)
87 return result
88
89
90 if __name__ == '__main__':
91 sys.exit(main())
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698