From ce921b2023c6730d1daf5da15d431766d095eb34 Mon Sep 17 00:00:00 2001 From: "maruel@chromium.org" Date: Fri, 28 May 2010 01:44:58 +0000 Subject: [PATCH] Use https for stack trace upload. Add an explicit Register() function to be called outside of this file. Send the host fqdn to help know from where the exception comes. It is useful when a build slave throws an exception. Review URL: http://codereview.chromium.org/2327003 git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@48455 0039d316-1c4b-4281-b951-d872f2087c98 --- breakpad.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/breakpad.py b/breakpad.py index 6818c9e0e..7f2eab387 100644 --- a/breakpad.py +++ b/breakpad.py @@ -13,10 +13,15 @@ import traceback import socket import sys + # Configure these values. -DEFAULT_URL = 'http://chromium-status.appspot.com/breakpad' +DEFAULT_URL = 'https://chromium-status.appspot.com/breakpad' + +_REGISTERED = False + def SendStack(last_tb, stack, url=None): + """Sends the stack trace to the breakpad server.""" if not url: url = DEFAULT_URL print 'Sending crash report ...' @@ -26,6 +31,7 @@ def SendStack(last_tb, stack, url=None): 'stack': stack, 'user': getpass.getuser(), 'exception': last_tb, + 'host': socket.getfqdn(), } request = urllib.urlopen(url, urllib.urlencode(params)) print request.read() @@ -35,6 +41,7 @@ def SendStack(last_tb, stack, url=None): def CheckForException(): + """Runs at exit. Look if there was an exception active.""" last_value = getattr(sys, 'last_value', None) if last_value and not isinstance(last_value, KeyboardInterrupt): last_tb = getattr(sys, 'last_traceback', None) @@ -42,7 +49,19 @@ def CheckForException(): SendStack(repr(last_value), ''.join(traceback.format_tb(last_tb))) +def Register(): + """Registers the callback at exit. Calling it multiple times is no-op.""" + global _REGISTERED + if _REGISTERED: + return + _REGISTERED = True + atexit.register(CheckForException) + + +# Skip unit tests and we don't want anything from non-googler. if (not 'test' in sys.modules['__main__'].__file__ and socket.getfqdn().endswith('.google.com')): - # Skip unit tests and we don't want anything from non-googler. - atexit.register(CheckForException) + Register() + +# Uncomment this line if you want to test it out. +#Register()