Mercurial > public > mercurial-scm > hg
comparison mercurial/httppeer.py @ 35698:0c4b23ccf1a5
httppeer: add support for tracing all http request made by the peer
This changeset introduces a new 'devel.debug.peer-request' config. When set to
True, debug message about request made by peer will be issued. This help to
understand what actually happens during an exchange and tracks source of
performance loss.
This changeset implement support for http peer only.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Fri, 12 Jan 2018 10:41:03 +0000 |
parents | 5a7906ed78d4 |
children | 197d10e157ce |
comparison
equal
deleted
inserted
replaced
35697:5a7906ed78d4 | 35698:0c4b23ccf1a5 |
---|---|
160 for h in urlopener.handlers: | 160 for h in urlopener.handlers: |
161 h.close() | 161 h.close() |
162 getattr(h, "close_all", lambda: None)() | 162 getattr(h, "close_all", lambda: None)() |
163 | 163 |
164 def _openurl(self, req): | 164 def _openurl(self, req): |
165 return self._urlopener.open(req) | 165 if (self._ui.debugflag |
166 and self._ui.configbool('devel', 'debug.peer-request')): | |
167 dbg = self._ui.debug | |
168 line = 'devel-peer-request: %s\n' | |
169 dbg(line % '%s %s' % (req.get_method(), req.get_full_url())) | |
170 hgargssize = None | |
171 | |
172 for header, value in sorted(req.header_items()): | |
173 if header.startswith('X-hgarg-'): | |
174 if hgargssize is None: | |
175 hgargssize = 0 | |
176 hgargssize += len(value) | |
177 else: | |
178 dbg(line % ' %s %s' % (header, value)) | |
179 | |
180 if hgargssize is not None: | |
181 dbg(line % ' %d bytes of commands arguments in headers' | |
182 % hgargssize) | |
183 | |
184 if req.has_data(): | |
185 data = req.get_data() | |
186 length = getattr(data, 'length', None) | |
187 if length is None: | |
188 length = len(data) | |
189 dbg(line % ' %d bytes of data' % length) | |
190 | |
191 start = util.timer() | |
192 | |
193 ret = self._urlopener.open(req) | |
194 if self._ui.configbool('devel', 'debug.peer-request'): | |
195 dbg(line % ' finished in %.4f seconds (%s)' | |
196 % (util.timer() - start, ret.code)) | |
197 return ret | |
166 | 198 |
167 # Begin of _basepeer interface. | 199 # Begin of _basepeer interface. |
168 | 200 |
169 @util.propertycache | 201 @util.propertycache |
170 def ui(self): | 202 def ui(self): |