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

Side by Side Diff: devserver.py

Issue 5057005: Revert "Reworked devserver so that update images generated are cached in directories named after" (Closed) Base URL: http://git.chromium.org/git/dev-util.git@master
Patch Set: Created 10 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « autoupdate_unittest.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 2
3 # Copyright (c) 2009-2010 The Chromium OS Authors. All rights reserved. 3 # Copyright (c) 2009-2010 The Chromium OS Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 """A CherryPy-based webserver to host images and build packages.""" 7 """A CherryPy-based webserver to host images and build packages."""
8 8
9 import cherrypy 9 import cherrypy
10 import optparse 10 import optparse
11 import os 11 import os
12 import sys 12 import sys
13 13
14 import autoupdate 14 import autoupdate
15 15
16 CACHED_ENTRIES=12
17
18 # Sets up global to share between classes. 16 # Sets up global to share between classes.
19 global updater 17 global updater
20 updater = None 18 updater = None
21 19
22 def _GetConfig(options): 20 def _GetConfig(options):
23 """Returns the configuration for the devserver.""" 21 """Returns the configuration for the devserver."""
24 base_config = { 'global': 22 base_config = { 'global':
25 { 'server.log_request_headers': True, 23 { 'server.log_request_headers': True,
26 'server.protocol_version': 'HTTP/1.1', 24 'server.protocol_version': 'HTTP/1.1',
27 'server.socket_host': '0.0.0.0', 25 'server.socket_host': '0.0.0.0',
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 index.exposed = True 106 index.exposed = True
109 107
110 108
111 if __name__ == '__main__': 109 if __name__ == '__main__':
112 usage = 'usage: %prog [options]' 110 usage = 'usage: %prog [options]'
113 parser = optparse.OptionParser(usage) 111 parser = optparse.OptionParser(usage)
114 parser.add_option('--archive_dir', dest='archive_dir', 112 parser.add_option('--archive_dir', dest='archive_dir',
115 help='serve archived builds only.') 113 help='serve archived builds only.')
116 parser.add_option('--board', dest='board', 114 parser.add_option('--board', dest='board',
117 help='When pre-generating update, board for latest image.') 115 help='When pre-generating update, board for latest image.')
118 parser.add_option('--clear_cache', action="store_true", default=False,
119 help='Clear out all cached udpates and exit')
120 parser.add_option('--client_prefix', dest='client_prefix', 116 parser.add_option('--client_prefix', dest='client_prefix',
121 help='Required prefix for client software version.', 117 help='Required prefix for client software version.',
122 default='MementoSoftwareUpdate') 118 default='MementoSoftwareUpdate')
123 parser.add_option('--factory_config', dest='factory_config', 119 parser.add_option('--factory_config', dest='factory_config',
124 help='Config file for serving images from factory floor.') 120 help='Config file for serving images from factory floor.')
125 parser.add_option('--for_vm', dest='vm', default=False, action='store_true', 121 parser.add_option('--for_vm', dest='vm', default=False, action='store_true',
126 help='Update is for a vm image.') 122 help='Update is for a vm image.')
127 parser.add_option('--image', dest='image', 123 parser.add_option('--image', dest='image',
128 help='Force update using this image.') 124 help='Force update using this image.')
129 parser.add_option('-p', '--pregenerate_update', action='store_true', 125 parser.add_option('-p', '--pregenerate_update', action='store_true',
130 default=False, help='Pre-generate update payload.') 126 default=False, help='Pre-generate update payload.')
131 parser.add_option('--port', default=8080, 127 parser.add_option('--port', default=8080,
132 help='Port for the dev server to use.') 128 help='Port for the dev server to use.')
133 parser.add_option('--src_image', default='', 129 parser.add_option('--src_image', default='',
134 help='Image on remote machine for generating delta update.') 130 help='Image on remote machine for generating delta update.')
135 parser.add_option('-t', action='store_true', dest='test_image') 131 parser.add_option('-t', action='store_true', dest='test_image')
136 parser.add_option('-u', '--urlbase', dest='urlbase', 132 parser.add_option('-u', '--urlbase', dest='urlbase',
137 help='base URL, other than devserver, for update images.') 133 help='base URL, other than devserver, for update images.')
134 parser.add_option('--use_cached', action="store_true", default=False,
135 help='Prefer cached image regardless of timestamps.')
138 parser.add_option('--validate_factory_config', action="store_true", 136 parser.add_option('--validate_factory_config', action="store_true",
139 dest='validate_factory_config', 137 dest='validate_factory_config',
140 help='Validate factory config file, then exit.') 138 help='Validate factory config file, then exit.')
141 parser.set_usage(parser.format_help()) 139 parser.set_usage(parser.format_help())
142 (options, _) = parser.parse_args() 140 (options, _) = parser.parse_args()
143 141
144 devserver_dir = os.path.dirname(os.path.abspath(sys.argv[0])) 142 devserver_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
145 root_dir = os.path.realpath('%s/../..' % devserver_dir) 143 root_dir = os.path.realpath('%s/../..' % devserver_dir)
146 serve_only = False 144 serve_only = False
147 145
148 if options.archive_dir: 146 if options.archive_dir:
149 static_dir = os.path.realpath(options.archive_dir) 147 static_dir = os.path.realpath(options.archive_dir)
150 _PrepareToServeUpdatesOnly(static_dir) 148 _PrepareToServeUpdatesOnly(static_dir)
151 serve_only = True 149 serve_only = True
152 else: 150 else:
153 static_dir = os.path.realpath('%s/static' % devserver_dir) 151 static_dir = os.path.realpath('%s/static' % devserver_dir)
154 os.system('mkdir -p %s' % static_dir) 152 os.system('mkdir -p %s' % static_dir)
155 153
156 cache_dir = os.path.join(static_dir, 'cache')
157 cherrypy.log('Using cache directory %s' % cache_dir, 'DEVSERVER')
158
159 if options.clear_cache:
160 # Clear the cache and exit
161 sys.exit(os.system('sudo rm -rf %s' % cache_dir))
162
163 if os.path.exists(cache_dir):
164 # Clear all but the last N cached updates
165 cmd = ('cd %s; ls -1tr | head --lines=-%d | xargs rm -rf' %
166 (cache_dir, CACHED_ENTRIES))
167 if os.system(cmd) != 0:
168 cherrypy.log('Failed to clean up old delta cache files with %s' % cmd,
169 'DEVSERVER')
170 sys.exit(1)
171
172 cherrypy.log('Source root is %s' % root_dir, 'DEVSERVER') 154 cherrypy.log('Source root is %s' % root_dir, 'DEVSERVER')
173 cherrypy.log('Serving from %s' % static_dir, 'DEVSERVER') 155 cherrypy.log('Serving from %s' % static_dir, 'DEVSERVER')
174 156
175 updater = autoupdate.Autoupdate( 157 updater = autoupdate.Autoupdate(
176 root_dir=root_dir, 158 root_dir=root_dir,
177 static_dir=static_dir, 159 static_dir=static_dir,
178 serve_only=serve_only, 160 serve_only=serve_only,
179 urlbase=options.urlbase, 161 urlbase=options.urlbase,
180 test_image=options.test_image, 162 test_image=options.test_image,
181 factory_config_path=options.factory_config, 163 factory_config_path=options.factory_config,
182 client_prefix=options.client_prefix, 164 client_prefix=options.client_prefix,
183 forced_image=options.image, 165 forced_image=options.image,
166 use_cached=options.use_cached,
184 port=options.port, 167 port=options.port,
185 src_image=options.src_image, 168 src_image=options.src_image,
186 vm=options.vm, 169 vm=options.vm,
187 board=options.board) 170 board=options.board)
188 171
189 # Sanity-check for use of validate_factory_config. 172 # Sanity-check for use of validate_factory_config.
190 if not options.factory_config and options.validate_factory_config: 173 if not options.factory_config and options.validate_factory_config:
191 parser.error('You need a factory_config to validate.') 174 parser.error('You need a factory_config to validate.')
192 175
193 if options.factory_config: 176 if options.factory_config:
194 updater.ImportFactoryConfigFile(options.factory_config, 177 updater.ImportFactoryConfigFile(options.factory_config,
195 options.validate_factory_config) 178 options.validate_factory_config)
196 # We don't run the dev server with this option. 179 # We don't run the dev server with this option.
197 if options.validate_factory_config: 180 if options.validate_factory_config:
198 sys.exit(0) 181 sys.exit(0)
199 elif options.pregenerate_update: 182 elif options.pregenerate_update:
200 if not updater.PreGenerateUpdate(): 183 if not updater.PreGenerateUpdate():
201 sys.exit(1) 184 sys.exit(1)
202 185
203 cherrypy.quickstart(DevServerRoot(), config=_GetConfig(options)) 186 cherrypy.quickstart(DevServerRoot(), config=_GetConfig(options))
OLDNEW
« no previous file with comments | « autoupdate_unittest.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698