Chromium Code Reviews| Index: breakpad.py |
| diff --git a/breakpad.py b/breakpad.py |
| index d5b4d926a0af6da64febd81d905fe126e04a2618..d4577fc41ca3689eae2998f17eb21b1caddd720b 100644 |
| --- a/breakpad.py |
| +++ b/breakpad.py |
| @@ -13,19 +13,34 @@ It is only enabled when all these conditions are met: |
| """ |
| import atexit |
| +import time |
| import getpass |
| import os |
| import urllib |
| +import urllib2 |
| import traceback |
| import socket |
| import sys |
|
cmp
2011/04/28 02:00:24
reorder these alphabetically
|
| # Configure these values. |
| -DEFAULT_URL = 'https://chromium-status.appspot.com/breakpad' |
| +DEFAULT_URL = 'https://chromium-status.appspot.com' |
| _REGISTERED = False |
| +_TIME_STARTED = time.time() |
| + |
| + |
| +def post(url, params): |
| + """HTTP POST with timeout when it's supported.""" |
| + kwargs = {} |
| + if (sys.version_info[0] * 10 + sys.version_info[1]) >= 26: |
|
cmp
2011/04/28 02:00:24
remove extra space after )
|
| + kwargs['timeout'] = 4 |
| + request = urllib2.urlopen(url, urllib.urlencode(params), **kwargs) |
| + out = request.read() |
| + request.close() |
| + return out |
| + |
| def FormatException(e): |
| """Returns a human readable form of an exception. |
| @@ -58,7 +73,7 @@ def FormatException(e): |
| def SendStack(last_tb, stack, url=None, maxlen=50): |
| """Sends the stack trace to the breakpad server.""" |
| if not url: |
| - url = DEFAULT_URL |
| + url = DEFAULT_URL + '/breakpad' |
| print 'Sending crash report ...' |
| try: |
| params = { |
| @@ -73,20 +88,35 @@ def SendStack(last_tb, stack, url=None, maxlen=50): |
| # pylint: disable=W0702 |
| print('\n'.join(' %s: %s' % (k, v[0:maxlen]) |
| for k, v in params.iteritems())) |
| - request = urllib.urlopen(url, urllib.urlencode(params)) |
| - print(request.read()) |
| - request.close() |
| + print(post(url, params)) |
| except IOError: |
| print('There was a failure while trying to send the stack trace. Too bad.') |
| +def SendProfiling(url=None): |
| + try: |
| + if not url: |
| + url = DEFAULT_URL + '/profiling' |
| + params = { |
| + 'argv': ' '.join(sys.argv), |
| + 'platform': sys.platform, |
| + 'duration': time.time() - _TIME_STARTED, |
|
cmp
2011/04/28 02:00:24
move line 103 above line 102
|
| + } |
| + post(url, params) |
| + except IOError: |
| + pass |
| + |
| + |
| 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) |
| - if last_tb: |
| - SendStack(last_value, ''.join(traceback.format_tb(last_tb))) |
| + if last_value: |
| + if not isinstance(last_value, KeyboardInterrupt): |
| + last_tb = getattr(sys, 'last_traceback', None) |
| + if last_tb: |
| + SendStack(last_value, ''.join(traceback.format_tb(last_tb))) |
| + else: |
| + SendProfiling() |
| def Register(): |