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

Side by Side Diff: breakpad.py

Issue 6902153: Caches socket.getfqdn(), send 'domain' when profiling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 9 years, 7 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | 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 # Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2009 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' 10 1. hostname finishes with '.google.com' or 'chromium.org'
11 2. main module name doesn't contain the word 'test' 11 2. main module name doesn't contain the word 'test'
12 3. no NO_BREAKPAD environment variable is defined 12 3. no NO_BREAKPAD environment variable is defined
13 """ 13 """
14 14
15 import atexit 15 import atexit
16 import getpass 16 import getpass
17 import os 17 import os
18 import socket 18 import socket
19 import sys 19 import sys
20 import time 20 import time
21 import traceback 21 import traceback
22 import urllib 22 import urllib
23 import urllib2 23 import urllib2
24 24
25 25
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 _REGISTERED = False 30 _REGISTERED = False
30 31
31 _TIME_STARTED = time.time() 32 _TIME_STARTED = time.time()
32 33
34 _HOST_NAME = socket.getfqdn()
35
33 36
34 def post(url, params): 37 def post(url, params):
35 """HTTP POST with timeout when it's supported.""" 38 """HTTP POST with timeout when it's supported."""
36 kwargs = {} 39 kwargs = {}
37 if (sys.version_info[0] * 10 + sys.version_info[1]) >= 26: 40 if (sys.version_info[0] * 10 + sys.version_info[1]) >= 26:
38 kwargs['timeout'] = 4 41 kwargs['timeout'] = 4
39 request = urllib2.urlopen(url, urllib.urlencode(params), **kwargs) 42 request = urllib2.urlopen(url, urllib.urlencode(params), **kwargs)
40 out = request.read() 43 out = request.read()
41 request.close() 44 request.close()
42 return out 45 return out
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 """Sends the stack trace to the breakpad server.""" 77 """Sends the stack trace to the breakpad server."""
75 if not url: 78 if not url:
76 url = DEFAULT_URL + '/breakpad' 79 url = DEFAULT_URL + '/breakpad'
77 print 'Sending crash report ...' 80 print 'Sending crash report ...'
78 try: 81 try:
79 params = { 82 params = {
80 'args': sys.argv, 83 'args': sys.argv,
81 'stack': stack[0:4096], 84 'stack': stack[0:4096],
82 'user': getpass.getuser(), 85 'user': getpass.getuser(),
83 'exception': FormatException(last_tb), 86 'exception': FormatException(last_tb),
84 'host': socket.getfqdn(), 87 'host': _HOST_NAME,
85 'cwd': os.getcwd(), 88 'cwd': os.getcwd(),
86 'version': sys.version, 89 'version': sys.version,
87 } 90 }
88 # pylint: disable=W0702 91 # pylint: disable=W0702
89 print('\n'.join(' %s: %s' % (k, v[0:maxlen]) 92 print('\n'.join(' %s: %s' % (k, v[0:maxlen])
90 for k, v in params.iteritems())) 93 for k, v in params.iteritems()))
91 print(post(url, params)) 94 print(post(url, params))
92 except IOError: 95 except IOError:
93 print('There was a failure while trying to send the stack trace. Too bad.') 96 print('There was a failure while trying to send the stack trace. Too bad.')
94 97
95 98
96 def SendProfiling(url=None): 99 def SendProfiling(url=None):
97 try: 100 try:
98 if not url: 101 if not url:
99 url = DEFAULT_URL + '/profiling' 102 url = DEFAULT_URL + '/profiling'
100 params = { 103 params = {
101 'argv': ' '.join(sys.argv), 104 'argv': ' '.join(sys.argv),
105 # Strip the hostname.
106 'domain': _HOST_NAME.split('.', 1)[-1],
102 'duration': time.time() - _TIME_STARTED, 107 'duration': time.time() - _TIME_STARTED,
103 'platform': sys.platform, 108 'platform': sys.platform,
104 } 109 }
105 post(url, params) 110 post(url, params)
106 except IOError: 111 except IOError:
107 pass 112 pass
108 113
109 114
110 def CheckForException(): 115 def CheckForException():
111 """Runs at exit. Look if there was an exception active.""" 116 """Runs at exit. Look if there was an exception active."""
(...skipping 12 matching lines...) Expand all
124 global _REGISTERED 129 global _REGISTERED
125 if _REGISTERED: 130 if _REGISTERED:
126 return 131 return
127 _REGISTERED = True 132 _REGISTERED = True
128 atexit.register(CheckForException) 133 atexit.register(CheckForException)
129 134
130 135
131 # Skip unit tests and we don't want anything from non-googler. 136 # Skip unit tests and we don't want anything from non-googler.
132 if (not 'test' in sys.modules['__main__'].__file__ and 137 if (not 'test' in sys.modules['__main__'].__file__ and
133 not 'NO_BREAKPAD' in os.environ and 138 not 'NO_BREAKPAD' in os.environ and
134 (socket.getfqdn().endswith('.google.com') or 139 (_HOST_NAME.endswith('.google.com') or
135 socket.getfqdn().endswith('.chromium.org'))): 140 _HOST_NAME.endswith('.chromium.org'))):
136 Register() 141 Register()
137 142
138 # Uncomment this line if you want to test it out. 143 # Uncomment this line if you want to test it out.
139 #Register() 144 #Register()
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698