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

Unified Diff: tools/lua/trigger_ct_lua

Issue 1214843002: Add script for triggering Cluster Telemetry jobs using local scripts (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Use the get_skp_repos endpoint to choose an SKP repo Created 5 years, 6 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
« no previous file with comments | « tools/lua/ngrams.lua ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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()
« no previous file with comments | « tools/lua/ngrams.lua ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698