##// END OF EJS Templates
hgweb: profile HTTP requests...
hgweb: profile HTTP requests Currently, running `hg serve --profile` doesn't yield anything useful: when the process is terminated the profiling output displays results from the main thread, which typically spends most of its time in select.select(). Furthermore, it has no meaningful results from mercurial.* modules because the threads serving HTTP requests don't actually get profiled. This patch teaches the hgweb wsgi applications to profile individual requests. If profiling is enabled, the profiler kicks in after HTTP/WSGI environment processing but before Mercurial's main request processing. The profile results are printed to the configured profiling output. If running `hg serve` from a shell, they will be printed to stderr, just before the HTTP request line is logged. If profiling to a file, we only write a single profile to the file because the file is not opened in append mode. We could add support for appending to files in a future patch if someone wants it. Per request profiling doesn't work with the statprof profiler because internally that profiler collects samples from the thread that *initially* requested profiling be enabled. I have plans to address this by vendoring Facebook's customized statprof and then improving it.

File last commit:

r28932:4eac8633 default
r29787:80df0426 default
Show More
test-hgwebdir-paths.py
48 lines | 1.1 KiB | text/x-python | PythonLexer
/ tests / test-hgwebdir-paths.py
Pulkit Goyal
tests: make test-hgwebdir-paths use absolute_import
r28932 from __future__ import absolute_import
Jeremy Whitlock
hgweb: make hgwebdir handle dict/list paths the same as config paths...
r8529 import os
Pulkit Goyal
tests: make test-hgwebdir-paths use absolute_import
r28932 from mercurial import (
hg,
ui as uimod,
)
from mercurial.hgweb import (
hgwebdir_mod,
)
hgwebdir = hgwebdir_mod.hgwebdir
Jeremy Whitlock
hgweb: make hgwebdir handle dict/list paths the same as config paths...
r8529
os.mkdir('webdir')
os.chdir('webdir')
Matt Mackall
backout dbdb777502dc (issue3077) (issue3071)...
r15381 webdir = os.path.realpath('.')
Jeremy Whitlock
hgweb: make hgwebdir handle dict/list paths the same as config paths...
r8529
Pulkit Goyal
tests: make test-hgwebdir-paths use absolute_import
r28932 u = uimod.ui()
Jeremy Whitlock
hgweb: make hgwebdir handle dict/list paths the same as config paths...
r8529 hg.repository(u, 'a', create=1)
hg.repository(u, 'b', create=1)
os.chdir('b')
hg.repository(u, 'd', create=1)
os.chdir('..')
hg.repository(u, 'c', create=1)
os.chdir('..')
paths = {'t/a/': '%s/a' % webdir,
'b': '%s/b' % webdir,
'coll': '%s/*' % webdir,
'rcoll': '%s/**' % webdir}
config = os.path.join(webdir, 'hgwebdir.conf')
configfile = open(config, 'w')
configfile.write('[paths]\n')
for k, v in paths.items():
configfile.write('%s = %s\n' % (k, v))
configfile.close()
confwd = hgwebdir(config)
dictwd = hgwebdir(paths)
assert len(confwd.repos) == len(dictwd.repos), 'different numbers'
assert len(confwd.repos) == 9, 'expected 9 repos, found %d' % len(confwd.repos)
found = dict(confwd.repos)
for key, path in dictwd.repos:
assert key in found, 'repository %s was not found' % key
assert found[key] == path, 'different paths for repo %s' % key