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

Side by Side Diff: dm/tools/jobsim_client/generate_ensure_graph_data_req.py

Issue 2339413003: Refactor and test jobsim_client. (Closed)
Patch Set: Remove old script Created 4 years, 3 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
« no previous file with comments | « dm/tools/jobsim_client/fire_missiles.py ('k') | dm/tools/jobsim_client/main.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright 2016 The LUCI Authors. All rights reserved.
3 # Use of this source code is governed under the Apache License, Version 2.0
4 # that can be found in the LICENSE file.
5
6 """
7 This is a dumb script that will:
8 * compile jobsim_client (for linux-amd64)
9 * upload a simple cipd package containing only jobsim_client with the 'latest'
10 ref. The packaeg name is 'infra/experimental/dm/jobsim_client/linux-amd64'.
11 * Print a JSONPB-encoded EnsureGraphDataReq that runs jobsim_client with the
12 provided strings to calculate edit-distance(a, b, transposition?).
13 """
14
15 import argparse
16 import json
17 import os
18 import pprint
19 import shutil
20 import subprocess
21 import tempfile
22
23 THIS_DIR = os.path.dirname(os.path.abspath(__file__))
24
25 def compile_pkg(pkg_dir, os_name, arch_name):
26 print 'building jobsim_client'
27 env = os.environ.copy()
28 env.update(
29 GOOS = os_name,
30 GOARCH = arch_name,
31 )
32 subprocess.check_call(
33 ['go', 'build', 'github.com/luci/luci-go/dm/tools/jobsim_client'],
34 cwd=pkg_dir, env=env)
35
36 def upload_pkg(pkg_dir, pkg_name_prefix, os_name, arch_name):
37 print 'creating jobsim_client package'
38
39 pkg_name = '%s/%s-%s' % (pkg_name_prefix, os_name, arch_name)
40
41 fd, tfile = tempfile.mkstemp('-cipd-output.json')
42 os.close(fd)
43 try:
44 subprocess.check_call(['cipd', 'create', '-name', pkg_name,
45 '-ref', 'latest', '-in', pkg_dir,
46 '-install-mode', 'copy', '-json-output', tfile])
47 with open(tfile, 'r') as tfileData:
48 out_json = json.load(tfileData)
49 version = out_json[u'result'][u'instance_id'].encode('utf-8')
50 finally:
51 os.unlink(tfile)
52
53 print 'uploaded %s:%s' % (pkg_name, version)
54
55 return pkg_name, version
56
57 def print_req(opts, pkg_name, version):
58 def dumps(obj):
59 return json.dumps(obj, sort_keys=True, separators=(',', ':'))
60
61 cpu = {
62 'amd64': 'x86-64',
63 }[opts.arch]
64
65 os_name = {
66 'linux': 'Linux',
67 }[opts.os]
68
69 command = ['jobsim_client', 'edit-distance', '-dm-host', '${DM.HOST}',
70 '-execution-auth-path', '${DM.EXECUTION.AUTH:PATH}',
71 '-quest-desc-path', '${DM.QUEST.DATA.DESC:PATH}']
72 if opts.use_transposition:
73 command.append('-use-transposition')
74
75 distParams = {
76 'scheduling': {
77 'dimensions': {
78 'cpu': cpu,
79 'os': os_name,
80 'pool': 'default',
Vadim Sh. 2016/09/16 18:08:05 'default' pool exist only on chromium-swarm-dev.
iannucci 2016/09/16 18:56:33 oop, yes. This used to be the horrible 'fire_the_m
81 },
82 },
83 'meta': {'name_prefix': 'dm jobsim client'},
84 'job': {
85 'inputs': {
86 'cipd': {
87 'server': 'https://chrome-infra-packages.appspot.com',
88 'by_path': {
89 '.': {
90 'pkg': [
91 {
92 'name': pkg_name,
93 'version': version if opts.pin else 'latest',
94 },
95 ]
96 }
97 }
98 }
99 },
100 'command': command,
101 }
102 }
103
104 params = {
105 'a': opts.a,
106 'b': opts.b,
107 }
108
109 desc = {
110 'quest': [
111 {
112 'distributor_config_name': 'swarming',
113 'parameters': dumps(params),
114 'distributor_parameters': dumps(distParams),
115 'meta': {
116 'timeouts': {
117 'start': '600s',
118 'run': '300s',
119 'stop': '300s',
120 }
121 },
122 }
123 ],
124 'quest_attempt': [
125 {'nums': [1]},
126 ]
127 }
128
129 print dumps(desc)
130
131 def main():
132 parser = argparse.ArgumentParser(
133 description=__doc__, formatter_class=argparse.RawTextHelpFormatter)
134 parser.add_argument('--use-transposition', action='store_true', default=False,
135 help=('Use Damerau-Levenshtein distance calculation '
136 'instead of plain Levenshtein distance.'))
137 parser.add_argument('a', type=str, help='The "a" string to calculate for.')
138 parser.add_argument('b', type=str, help='The "b" string to calculate for.')
139
140 plat_grp = parser.add_argument_group(
141 'platform', 'Options for the target platform of the job.')
142 plat_grp.add_argument('--os', choices=('linux',), default='linux',
143 help='The OS to compile/run on.')
144 plat_grp.add_argument('--arch', choices=('amd64',), default='amd64',
145 help='The Arch to compile/run on.')
146 plat_grp.add_argument('--pin', action='store_true', default=False,
147 help='Emit the request with a pinned package version'
148 ' instead of "latest".')
149
150 cipd_grp = parser.add_argument_group('cipd', 'cipd packaging options')
151 cipd_grp.add_argument('--cipd-service-url', default=None,
152 help='The CIPD service to upload to.')
153 cipd_grp.add_argument('--cipd-service-account-json', default=None,
154 help='The CIPD service account JSON file to use.')
155 cipd_grp.add_argument('--cipd-name',
156 default='infra/experimental/dm/jobsim_client',
157 help='The CIPD package name prefix to upload to. This '
158 'will be appended with the standard os-arch suffix.')
159
160 opts = parser.parse_args()
161
162 # Use local path for determinisim.
163 pkg_dir = os.path.join(THIS_DIR, 'pkg_dir')
164 shutil.rmtree(pkg_dir, ignore_errors=True)
165 os.mkdir(pkg_dir)
166 try:
167 compile_pkg(pkg_dir, opts.os, opts.arch)
168 pkg_name, version = upload_pkg(pkg_dir, opts.cipd_name, opts.os, opts.arch)
169 print_req(opts, pkg_name, version)
170 finally:
171 shutil.rmtree(pkg_dir, ignore_errors=True)
172
173
174 if __name__ == '__main__':
175 main()
OLDNEW
« no previous file with comments | « dm/tools/jobsim_client/fire_missiles.py ('k') | dm/tools/jobsim_client/main.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698