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

Unified Diff: autoupdate.py

Issue 3708004: Move dev server to use cherrypy. (Closed) Base URL: http://git.chromium.org/git/dev-util.git
Patch Set: last Created 10 years, 2 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 | « no previous file | autoupdate_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: autoupdate.py
diff --git a/autoupdate.py b/autoupdate.py
index 917e268d37848a9fce05c955eedb4375b7a5d7e4..ca5c14447ae360811740b3708af31d5c65ba1327 100644
--- a/autoupdate.py
+++ b/autoupdate.py
@@ -5,10 +5,14 @@
from buildutil import BuildObject
from xml.dom import minidom
+import cherrypy
import os
import shutil
+import socket
import time
-import web
+
+def _LogMessage(message):
+ cherrypy.log(message, 'UPDATE')
class Autoupdate(BuildObject):
@@ -27,17 +31,18 @@ class Autoupdate(BuildObject):
def __init__(self, serve_only=None, test_image=False, urlbase=None,
factory_config_path=None, client_prefix=None, forced_image=None,
- use_cached=False, *args, **kwargs):
+ use_cached=False, port=8080, *args, **kwargs):
super(Autoupdate, self).__init__(*args, **kwargs)
self.serve_only = serve_only
self.factory_config = factory_config_path
self.use_test_image = test_image
+ self.hostname = '%s:%s' % (socket.gethostname(), port)
if urlbase:
self.static_urlbase = urlbase
elif self.serve_only:
- self.static_urlbase = 'http://%(host)s/static/archive'
+ self.static_urlbase = 'http://%s/static/archive' % self.hostname
else:
- self.static_urlbase = 'http://%(host)s/static'
+ self.static_urlbase = 'http://%s/static' % self.hostname
self.client_prefix = client_prefix
self.forced_image = forced_image
@@ -70,7 +75,7 @@ class Autoupdate(BuildObject):
"""Returns true if the latest_version is greater than the client_version."""
client_tokens = client_version.replace('_', '').split('.')
latest_tokens = latest_version.replace('_', '').split('.')
- web.debug('client version %s latest version %s'
+ _LogMessage('client version %s latest version %s'
% (client_version, latest_version))
for i in range(4):
if int(latest_tokens[i]) == int(client_tokens[i]):
@@ -90,7 +95,7 @@ class Autoupdate(BuildObject):
'dd if=%s of=%s bs=512 skip=%s count=%s' % (image_dir, image_file,
stateful_file, get_offset,
get_size))
- web.debug(unpack_command)
+ _LogMessage(unpack_command)
return os.system(unpack_command) == 0
def _UnpackZip(self, image_dir):
@@ -116,17 +121,17 @@ class Autoupdate(BuildObject):
def _IsImageNewerThanCached(self, image_path, cached_file_path):
"""Returns true if the image is newer than the cached image."""
if os.path.exists(cached_file_path) and os.path.exists(image_path):
- web.debug('Usable cached image found at %s.' % cached_file_path)
+ _LogMessage('Usable cached image found at %s.' % cached_file_path)
return os.path.getmtime(image_path) > os.path.getmtime(cached_file_path)
elif not os.path.exists(cached_file_path) and not os.path.exists(image_path):
raise Exception('Image does not exist and cached image missing')
else:
# Only one is missing, figure out which one.
if os.path.exists(image_path):
- web.debug('No cached image found - image generation required.')
+ _LogMessage('No cached image found - image generation required.')
return True
else:
- web.debug('Cached image found to serve at %s.' % cached_file_path)
+ _LogMessage('Cached image found to serve at %s.' % cached_file_path)
return False
def _GetSize(self, update_path):
@@ -202,13 +207,13 @@ class Autoupdate(BuildObject):
"""
image_dir = os.path.dirname(image_path)
update_path = os.path.join(image_dir, 'update.gz')
- web.debug('Generating update image %s' % update_path)
+ _LogMessage('Generating update image %s' % update_path)
mkupdate_command = (
'%s/cros_generate_update_payload --image=%s --output=%s '
'--patch_kernel' % (self.scripts_dir, image_path, update_path))
if os.system(mkupdate_command) != 0:
- web.debug('Failed to create base update file')
+ _LogMessage('Failed to create base update file')
return None
return update_path
@@ -227,10 +232,10 @@ class Autoupdate(BuildObject):
if self._UnpackStatefulPartition(image_path, stateful_partition_path):
mkstatefulupdate_command = 'gzip -f %s' % stateful_partition_path
if os.system(mkstatefulupdate_command) == 0:
- web.debug('Successfully generated %s.gz' % stateful_partition_path)
+ _LogMessage('Successfully generated %s.gz' % stateful_partition_path)
return '%s.gz' % stateful_partition_path
- web.debug('Failed to create stateful update file')
+ _LogMessage('Failed to create stateful update file')
return None
def MoveImagesToStaticDir(self, update_path, stateful_update_path,
@@ -250,7 +255,7 @@ class Autoupdate(BuildObject):
os.remove(update_path)
os.remove(stateful_update_path)
except Exception:
- web.debug('Failed to move %s and %s to %s' % (update_path,
+ _LogMessage('Failed to move %s and %s to %s' % (update_path,
stateful_update_path,
static_image_dir))
return False
@@ -268,11 +273,11 @@ class Autoupdate(BuildObject):
Returns:
True if the update payload was created successfully.
"""
- web.debug('Generating update for image %s' % image_path)
+ _LogMessage('Generating update for image %s' % image_path)
update_path = self.GenerateUpdateFile(image_path)
stateful_update_path = self.GenerateStatefulFile(image_path)
if not update_path or not stateful_update_path:
- web.debug('Failed to generate update')
+ _LogMessage('Failed to generate update')
return False
if move_to_static_dir:
@@ -299,13 +304,13 @@ class Autoupdate(BuildObject):
latest_version = self._GetVersionFromDir(latest_image_dir)
latest_image_path = os.path.join(latest_image_dir, self._GetImageName())
- web.debug('Preparing to generate update from latest built image %s.' %
+ _LogMessage('Preparing to generate update from latest built image %s.' %
latest_image_path)
# Check to see whether or not we should update.
if client_version != 'ForcedUpdate' and not self._CanUpdate(
client_version, latest_version):
- web.debug('no update')
+ _LogMessage('no update')
return False
cached_file_path = os.path.join(static_image_dir, 'update.gz')
@@ -328,7 +333,7 @@ class Autoupdate(BuildObject):
Returns:
True if the update payload was created successfully.
"""
- web.debug('Preparing to generate update from zip in %s.' % static_image_dir)
+ _LogMessage('Preparing to generate update from zip in %s.' % static_image_dir)
image_path = os.path.join(static_image_dir, self._GetImageName())
cached_file_path = os.path.join(static_image_dir, 'update.gz')
zip_file_path = os.path.join(static_image_dir, 'image.zip')
@@ -336,7 +341,7 @@ class Autoupdate(BuildObject):
return True
if not self._UnpackZip(static_image_dir):
- web.debug('unzip image.zip failed.')
+ _LogMessage('unzip image.zip failed.')
return False
return self.GenerateUpdateImage(image_path, move_to_static_dir=False,
@@ -423,13 +428,13 @@ class Autoupdate(BuildObject):
stanza[kind + '_size'])
return (None, None, None)
- def HandleFactoryRequest(self, hostname, board_id, channel):
+ def HandleFactoryRequest(self, board_id, channel):
(filename, checksum, size) = self.GetFactoryImage(board_id, channel)
if filename is None:
- web.debug('unable to find image for board %s' % board_id)
+ _LogMessage('unable to find image for board %s' % board_id)
return self.GetNoUpdatePayload()
- url = 'http://%s/static/%s' % (hostname, filename)
- web.debug('returning update payload ' + url)
+ url = 'http://%s/static/%s' % (self.hostname, filename)
+ _LogMessage('returning update payload ' + url)
# Factory install is using memento updater which is using the sha-1 hash so
# setting sha-256 to an empty string.
return self.GetUpdatePayload(checksum, '', size, url)
@@ -443,31 +448,26 @@ class Autoupdate(BuildObject):
Returns:
Update payload message for client.
"""
- web.debug('handling update ping: %s' % data)
+ _LogMessage('handling update ping: %s' % data)
update_dom = minidom.parseString(data)
root = update_dom.firstChild
- # Parse host if not done yet.
- if '%(host)' in self.static_urlbase:
- self.static_urlbase = self.static_urlbase % {'host' : web.ctx.host}
-
# Check the client prefix to make sure you can support this type of update.
if (root.hasAttribute('updaterversion') and
not root.getAttribute('updaterversion').startswith(self.client_prefix)):
- web.debug('Got update from unsupported updater:' +
+ _LogMessage('Got update from unsupported updater:' +
root.getAttribute('updaterversion'))
return self.GetNoUpdatePayload()
# We only generate update payloads for updatecheck requests.
update_check = root.getElementsByTagName('o:updatecheck')
if not update_check:
- web.debug('Non-update check received. Returning blank payload.')
+ _LogMessage('Non-update check received. Returning blank payload.')
# TODO(sosa): Generate correct non-updatecheck payload to better test
# update clients.
return self.GetNoUpdatePayload()
# Since this is an updatecheck, get information about the requester.
- hostname = web.ctx.host
query = root.getElementsByTagName('o:app')[0]
client_version = query.getAttribute('version')
channel = query.getAttribute('track')
@@ -477,7 +477,7 @@ class Autoupdate(BuildObject):
# Separate logic as Factory requests have static url's that override
# other options.
if self.factory_config:
- return self.HandleFactoryRequest(hostname, board_id, channel)
+ return self.HandleFactoryRequest(board_id, channel)
else:
static_image_dir = self.static_dir
if label:
@@ -486,7 +486,7 @@ class Autoupdate(BuildObject):
# Prefer cached image if it exists.
if self.use_cached and os.path.exists(os.path.join(static_image_dir,
'update.gz')):
- web.debug('Using cached image regardless of timestamps.')
+ _LogMessage('Using cached image regardless of timestamps.')
has_built_image = True
else:
if self.forced_image:
@@ -512,7 +512,7 @@ class Autoupdate(BuildObject):
else:
url = '%s/update.gz' % self.static_urlbase
- web.debug('Responding to client to use url %s to get image.' % url)
+ _LogMessage('Responding to client to use url %s to get image.' % url)
return self.GetUpdatePayload(hash, sha256, size, url)
else:
return self.GetNoUpdatePayload()
« no previous file with comments | « no previous file | autoupdate_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698