| OLD | NEW |
| 1 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """Breakpad for Python. | 5 """Breakpad for Python. |
| 6 | 6 |
| 7 Sends a notification when a process stops on an exception. | 7 Sends a notification when a process stops on an exception. |
| 8 | 8 |
| 9 It is only enabled when all these conditions are met: | 9 It is only enabled when all these conditions are met: |
| 10 1. hostname finishes with '.google.com' or 'chromium.org' | 10 1. hostname finishes with '.google.com' or 'chromium.org' |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 # Configure these values. | 26 # Configure these values. |
| 27 DEFAULT_URL = 'https://chromium-status.appspot.com' | 27 DEFAULT_URL = 'https://chromium-status.appspot.com' |
| 28 | 28 |
| 29 # Global variable to prevent double registration. | 29 # Global variable to prevent double registration. |
| 30 _REGISTERED = False | 30 _REGISTERED = False |
| 31 | 31 |
| 32 _TIME_STARTED = time.time() | 32 _TIME_STARTED = time.time() |
| 33 | 33 |
| 34 _HOST_NAME = socket.getfqdn() | 34 _HOST_NAME = socket.getfqdn() |
| 35 | 35 |
| 36 # Skip unit tests and we don't want anything from non-googler. |
| 37 IS_ENABLED = ( |
| 38 not 'test' in getattr(sys.modules['__main__'], '__file__', '') and |
| 39 not 'NO_BREAKPAD' in os.environ and |
| 40 _HOST_NAME.endswith(('.google.com', '.chromium.org'))) |
| 41 |
| 36 | 42 |
| 37 def post(url, params): | 43 def post(url, params): |
| 38 """HTTP POST with timeout when it's supported.""" | 44 """HTTP POST with timeout when it's supported.""" |
| 39 kwargs = {} | 45 kwargs = {} |
| 40 if (sys.version_info[0] * 10 + sys.version_info[1]) >= 26: | 46 if (sys.version_info[0] * 10 + sys.version_info[1]) >= 26: |
| 41 kwargs['timeout'] = 4 | 47 kwargs['timeout'] = 4 |
| 42 request = urllib2.urlopen(url, urllib.urlencode(params), **kwargs) | 48 request = urllib2.urlopen(url, urllib.urlencode(params), **kwargs) |
| 43 out = request.read() | 49 out = request.read() |
| 44 request.close() | 50 request.close() |
| 45 return out | 51 return out |
| (...skipping 22 matching lines...) Expand all Loading... |
| 68 out += '\nread(): %s' % e.read() | 74 out += '\nread(): %s' % e.read() |
| 69 if hasattr(e, 'info') and callable(e.info): | 75 if hasattr(e, 'info') and callable(e.info): |
| 70 out += '\ninfo(): %s' % e.info() | 76 out += '\ninfo(): %s' % e.info() |
| 71 except Exception: | 77 except Exception: |
| 72 pass | 78 pass |
| 73 return out | 79 return out |
| 74 | 80 |
| 75 | 81 |
| 76 def SendStack(last_tb, stack, url=None, maxlen=50): | 82 def SendStack(last_tb, stack, url=None, maxlen=50): |
| 77 """Sends the stack trace to the breakpad server.""" | 83 """Sends the stack trace to the breakpad server.""" |
| 84 if not IS_ENABLED: |
| 85 # Make sure to not send anything for non googler. |
| 86 return |
| 78 if not url: | 87 if not url: |
| 79 url = DEFAULT_URL + '/breakpad' | 88 url = DEFAULT_URL + '/breakpad' |
| 80 print 'Sending crash report ...' | 89 print 'Sending crash report ...' |
| 81 try: | 90 try: |
| 82 params = { | 91 params = { |
| 83 'args': sys.argv, | 92 'args': sys.argv, |
| 84 'stack': stack[0:4096], | 93 'stack': stack[0:4096], |
| 85 'user': getpass.getuser(), | 94 'user': getpass.getuser(), |
| 86 'exception': FormatException(last_tb), | 95 'exception': FormatException(last_tb), |
| 87 'host': _HOST_NAME, | 96 'host': _HOST_NAME, |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 | 135 |
| 127 def Register(): | 136 def Register(): |
| 128 """Registers the callback at exit. Calling it multiple times is no-op.""" | 137 """Registers the callback at exit. Calling it multiple times is no-op.""" |
| 129 global _REGISTERED | 138 global _REGISTERED |
| 130 if _REGISTERED: | 139 if _REGISTERED: |
| 131 return | 140 return |
| 132 _REGISTERED = True | 141 _REGISTERED = True |
| 133 atexit.register(CheckForException) | 142 atexit.register(CheckForException) |
| 134 | 143 |
| 135 | 144 |
| 136 # Skip unit tests and we don't want anything from non-googler. | 145 if IS_ENABLED: |
| 137 if (not 'test' in getattr(sys.modules['__main__'], '__file__', '') and | |
| 138 not 'NO_BREAKPAD' in os.environ and | |
| 139 (_HOST_NAME.endswith('.google.com') or | |
| 140 _HOST_NAME.endswith('.chromium.org'))): | |
| 141 Register() | 146 Register() |
| 142 | 147 |
| 143 # Uncomment this line if you want to test it out. | 148 # Uncomment this line if you want to test it out. |
| 144 #Register() | 149 #Register() |
| OLD | NEW |