diff --git a/rhodecode/tests/rhodecode_crawler.py b/rhodecode/tests/rhodecode_crawler.py --- a/rhodecode/tests/rhodecode_crawler.py +++ b/rhodecode/tests/rhodecode_crawler.py @@ -32,30 +32,68 @@ import cookielib import urllib import urllib2 import time - +import os +import sys from os.path import join as jn +from os.path import dirname as dn + +__here__ = os.path.abspath(__file__) +__root__ = dn(dn(dn(__here__))) +sys.path.append(__root__) + from rhodecode.lib import vcs +from rhodecode.lib.compat import OrderedSet +from rhodecode.lib.vcs.exceptions import RepositoryError -BASE_URI = 'http://127.0.0.1:5000/%s' -PROJECT = 'CPython' +PASES = 3 +HOST = 'http://127.0.0.1' +PORT = 5000 +BASE_URI = '%s:%s/' % (HOST, PORT) + +if len(sys.argv) == 2: + BASE_URI = sys.argv[1] + +if not BASE_URI.endswith('/'): + BASE_URI += '/' + +print 'Crawling @ %s' % BASE_URI +BASE_URI += '%s' PROJECT_PATH = jn('/', 'home', 'marcink', 'hg_repos') +PROJECTS = [ + 'linux-magx-pbranch', + 'CPython', + 'rhodecode_tip', +] cj = cookielib.FileCookieJar('/tmp/rc_test_cookie.txt') o = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) o.addheaders = [ - ('User-agent', 'rhodecode-crawler'), - ('Accept-Language', 'en - us, en;q = 0.5') - ] + ('User-agent', 'rhodecode-crawler'), + ('Accept-Language', 'en - us, en;q = 0.5') +] urllib2.install_opener(o) -def test_changelog_walk(pages=100): +def _get_repo(proj): + if isinstance(proj, basestring): + repo = vcs.get_repo(jn(PROJECT_PATH, proj)) + proj = proj + else: + repo = proj + proj = repo.name + + return repo, proj + + +def test_changelog_walk(proj, pages=100): + repo, proj = _get_repo(proj) + total_time = 0 for i in range(1, pages): - page = '/'.join((PROJECT, 'changelog',)) + page = '/'.join((proj, 'changelog',)) full_uri = (BASE_URI % page) + '?' + urllib.urlencode({'page':i}) s = time.time() @@ -69,19 +107,21 @@ def test_changelog_walk(pages=100): print 'average on req', total_time / float(pages) -def test_changeset_walk(limit=None): - print 'processing', jn(PROJECT_PATH, PROJECT) +def test_changeset_walk(proj, limit=None): + repo, proj = _get_repo(proj) + + print 'processing', jn(PROJECT_PATH, proj) total_time = 0 - repo = vcs.get_repo(jn(PROJECT_PATH, PROJECT)) cnt = 0 for i in repo: cnt += 1 - raw_cs = '/'.join((PROJECT, 'changeset', i.raw_id)) + raw_cs = '/'.join((proj, 'changeset', i.raw_id)) if limit and limit == cnt: break full_uri = (BASE_URI % raw_cs) + print '%s visiting %s\%s' % (cnt, full_uri, i) s = time.time() f = o.open(full_uri) size = len(f.read()) @@ -93,14 +133,11 @@ def test_changeset_walk(limit=None): print 'average on req', total_time / float(cnt) -def test_files_walk(limit=100): - print 'processing', jn(PROJECT_PATH, PROJECT) - total_time = 0 +def test_files_walk(proj, limit=100): + repo, proj = _get_repo(proj) - repo = vcs.get_repo(jn(PROJECT_PATH, PROJECT)) - - from rhodecode.lib.compat import OrderedSet - from rhodecode.lib.vcs.exceptions import RepositoryError + print 'processing', jn(PROJECT_PATH, proj) + total_time = 0 paths_ = OrderedSet(['']) try: @@ -124,22 +161,24 @@ def test_files_walk(limit=100): if limit and limit == cnt: break - file_path = '/'.join((PROJECT, 'files', 'tip', f)) - + file_path = '/'.join((proj, 'files', 'tip', f)) full_uri = (BASE_URI % file_path) + print '%s visiting %s' % (cnt, full_uri) s = time.time() f = o.open(full_uri) size = len(f.read()) e = time.time() - s total_time += e - print '%s visited %s size:%s req:%s ms' % (cnt, full_uri, size, e) + print '%s visited OK size:%s req:%s ms' % (cnt, size, e) print 'total_time', total_time print 'average on req', total_time / float(cnt) - -test_changelog_walk(40) -time.sleep(2) -test_changeset_walk(limit=100) -time.sleep(2) -test_files_walk(100) +if __name__ == '__main__': + for path in PROJECTS: + repo = vcs.get_repo(jn(PROJECT_PATH, path)) + for i in range(PASES): + print 'PASS %s/%s' % (i, PASES) + test_changelog_walk(repo, pages=80) + test_changeset_walk(repo, limit=100) + test_files_walk(repo, limit=100)