Chromium Code Reviews| Index: tools/lua/trigger_ct_lua |
| diff --git a/tools/lua/trigger_ct_lua b/tools/lua/trigger_ct_lua |
| new file mode 100755 |
| index 0000000000000000000000000000000000000000..ab451689522fc01f21bd9d7481bd22ad5847e25e |
| --- /dev/null |
| +++ b/tools/lua/trigger_ct_lua |
| @@ -0,0 +1,100 @@ |
| +#!/usr/bin/env python |
| + |
| + |
| +""" Trigger a Cluster Telemetry job with the given Lua script. """ |
| + |
| + |
| +import argparse |
| +import base64 |
| +import getpass |
| +import httplib2 |
| +import json |
| +import subprocess |
| +import urllib |
| + |
| + |
| +CT_URL = 'https://skia-tree-status.appspot.com/skia-telemetry/' |
| +CT_ADD_LUA_TASK_URL = CT_URL + 'add_lua_task' |
| +CT_GET_SKP_REPOS_URL = CT_URL + 'get_skp_repos' |
| +CT_PENDING_TASKS_URL = CT_URL + 'pending_tasks' |
| +POST_DATA = ('username=%s' |
| + '&password=%s' |
| + '&description=%s' |
| + '&lua_script=%s' |
| + '&pagesets_type_and_chromium_build=%s') |
| + |
| + |
| +def trigger_ct_run(user, password, description, script, skp_repo, |
| + aggregator=None): |
| + """Trigger a Cluster Telemetry run of the given script.""" |
| + with open(script) as f: |
| + script_contents = urllib.quote(base64.b64encode(f.read())) |
| + |
| + body = POST_DATA % (user, password, description, script_contents, skp_repo) |
| + |
| + if aggregator: |
| + with open(aggregator) as f: |
| + body += '&lua_aggregator=%s' % urllib.quote(base64.b64encode(f.read())) |
| + |
| + resp, content = httplib2.Http('.cache').request( |
| + CT_ADD_LUA_TASK_URL, 'POST', body=body) |
| + if resp['status'] != '200': |
| + raise Exception( |
| + 'Failed to trigger Cluster Telemetry job: (%s): %s' % ( |
| + resp['status'], content)) |
| + |
| + |
| +def parse_args(): |
| + """Parse command-line flags and obtain any additional information.""" |
| + parser = argparse.ArgumentParser( |
| + description='Trigger a Cluster Telemetry job with the given Lua script.') |
| + parser.add_argument('script', help='Lua script to run') |
|
rmistry
2015/06/29 18:44:04
script -> --script ?
borenet
2015/06/29 19:11:53
Done. That changes it to optional, so I added 'req
|
| + parser.add_argument('--aggregator', help='Aggregator script') |
|
rmistry
2015/06/29 18:44:04
Specify and check that script and aggregator are r
borenet
2015/06/29 19:11:53
Done for --script. --aggregator is intended to be
|
| + parser.add_argument('--description', help='Description of the job.') |
| + parser.add_argument('--email', help='Email address to send results') |
|
rmistry
2015/06/29 18:44:04
Email address to send results. Will use the output
borenet
2015/06/29 19:11:53
Done.
|
| + parser.add_argument('--password_file', |
| + help='File in which the CT password is stored.') |
|
rmistry
2015/06/29 18:44:04
File in which CT password is stored. Script will p
borenet
2015/06/29 19:11:53
Done.
|
| + parser.add_argument('--skp_repo', default='10k', |
| + help='Which set of SKPs to use, eg. "10k", "all"') |
|
rmistry
2015/06/29 18:44:04
all -> All
(This is something I have regretted for
borenet
2015/06/29 19:11:53
Done.
|
| + args = parser.parse_args() |
| + |
| + # If the user provided their email address, use that. Otherwise obtain it |
| + # from the Git config. |
| + user = args.email |
| + if not user: |
| + user = subprocess.check_output(['git', 'config', 'user.email']).rstrip() |
| + |
| + # Read the password from the password file, if provided, otherwise prompt. |
| + if args.password_file: |
| + with open(args.password_file) as f: |
| + password = f.read().rstrip() |
| + else: |
| + password = getpass.getpass( |
| + 'Enter the skia_status_password ' |
| + '(on https://valentine.corp.google.com/): ') |
| + |
| + # Find an SKP repo to use. |
| + resp, content = httplib2.Http('.cache').request(CT_GET_SKP_REPOS_URL, "GET") |
| + if resp['status'] != '200': |
| + raise Exception('Failed to obtain SKP repos from %s' % CT_GET_SKP_REPOS_URL) |
| + skp_repos = json.loads(content) |
| + chosen_skp_repo = skp_repos.get(args.skp_repo)[0] |
| + if not chosen_skp_repo: |
| + raise Exception('No generated SKPs exist for "%s"' % args.skp_repo) |
| + skp_repo = '-'.join((args.skp_repo, |
| + chosen_skp_repo[0], |
| + chosen_skp_repo[1])) |
| + |
| + return (user, password, args.description, args.script, skp_repo, |
| + args.aggregator) |
| + |
| + |
| +def main(): |
| + user, password, description, script, skp_repo, aggregator = parse_args() |
| + trigger_ct_run(user, password, description, script, skp_repo, aggregator) |
| + print ('Successfully triggered Cluster Telemetry job. View the queue at %s' % |
| + CT_PENDING_TASKS_URL) |
| + |
| + |
| +if __name__ == '__main__': |
| + main() |