test_crawler.py
146 lines
| 3.8 KiB
| text/x-python
|
PythonLexer
r1332 | # -*- coding: utf-8 -*- | |||
""" | ||||
rhodecode.tests.test_crawer | ||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||
Test for crawling a project for memory usage | ||||
r1334 | watch -n1 ./rhodecode/tests/mem_watch | |||
r1332 | ||||
:created_on: Apr 21, 2010 | ||||
:author: marcink | ||||
:copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | ||||
:license: GPLv3, see COPYING for more details. | ||||
""" | ||||
# This program is free software: you can redistribute it and/or modify | ||||
# it under the terms of the GNU General Public License as published by | ||||
# the Free Software Foundation, either version 3 of the License, or | ||||
# (at your option) any later version. | ||||
# | ||||
# This program is distributed in the hope that it will be useful, | ||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | ||||
# | ||||
# You should have received a copy of the GNU General Public License | ||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
import cookielib | ||||
import urllib | ||||
import urllib2 | ||||
import vcs | ||||
import time | ||||
r1334 | from os.path import join as jn | |||
r1332 | BASE_URI = 'http://127.0.0.1:5000/%s' | |||
r1334 | PROJECT = 'CPython' | |||
PROJECT_PATH = jn('/', 'home', 'marcink', 'hg_repos') | ||||
r1332 | ||||
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') | ||||
] | ||||
urllib2.install_opener(o) | ||||
def test_changelog_walk(pages=100): | ||||
total_time = 0 | ||||
for i in range(1, pages): | ||||
page = '/'.join((PROJECT, 'changelog',)) | ||||
full_uri = (BASE_URI % page) + '?' + urllib.urlencode({'page':i}) | ||||
s = time.time() | ||||
f = o.open(full_uri) | ||||
size = len(f.read()) | ||||
e = time.time() - s | ||||
total_time += e | ||||
print 'visited %s size:%s req:%s ms' % (full_uri, size, e) | ||||
print 'total_time', total_time | ||||
print 'average on req', total_time / float(pages) | ||||
r1338 | def test_changeset_walk(limit=None): | |||
print 'processing', jn(PROJECT_PATH, PROJECT) | ||||
r1334 | total_time = 0 | |||
r1332 | ||||
r1334 | repo = vcs.get_repo(jn(PROJECT_PATH, PROJECT)) | |||
r1338 | cnt = 0 | |||
r1332 | for i in repo: | |||
r1338 | cnt += 1 | |||
r1332 | raw_cs = '/'.join((PROJECT, 'changeset', i.raw_id)) | |||
r1338 | if limit and limit == cnt: | |||
break | ||||
r1332 | ||||
full_uri = (BASE_URI % raw_cs) | ||||
s = time.time() | ||||
f = o.open(full_uri) | ||||
size = len(f.read()) | ||||
e = time.time() - s | ||||
total_time += e | ||||
r1341 | print '%s visited %s\%s size:%s req:%s ms' % (cnt, full_uri, i, size, e) | |||
r1332 | ||||
print 'total_time', total_time | ||||
r1338 | print 'average on req', total_time / float(cnt) | |||
r1332 | ||||
r1341 | def test_files_walk(limit=100): | |||
r1338 | print 'processing', jn(PROJECT_PATH, PROJECT) | |||
r1334 | total_time = 0 | |||
repo = vcs.get_repo(jn(PROJECT_PATH, PROJECT)) | ||||
r1338 | from rhodecode.lib.oset import OrderedSet | |||
paths_ = OrderedSet(['']) | ||||
r1334 | try: | |||
tip = repo.get_changeset('tip') | ||||
for topnode, dirs, files in tip.walk('/'): | ||||
r1338 | ||||
for dir in dirs: | ||||
paths_.add(dir.path) | ||||
for f in dir: | ||||
paths_.add(f.path) | ||||
r1334 | for f in files: | |||
paths_.add(f.path) | ||||
except vcs.exception.RepositoryError, e: | ||||
pass | ||||
r1341 | cnt = 0 | |||
r1334 | for f in paths_: | |||
r1341 | cnt += 1 | |||
if limit and limit == cnt: | ||||
break | ||||
r1334 | file_path = '/'.join((PROJECT, 'files', 'tip', f)) | |||
full_uri = (BASE_URI % file_path) | ||||
s = time.time() | ||||
f = o.open(full_uri) | ||||
size = len(f.read()) | ||||
e = time.time() - s | ||||
total_time += e | ||||
r1341 | print '%s visited %s size:%s req:%s ms' % (cnt, full_uri, size, e) | |||
r1334 | ||||
print 'total_time', total_time | ||||
r1341 | print 'average on req', total_time / float(cnt) | |||
r1332 | ||||
r1338 | test_changelog_walk(40) | |||
r1341 | time.sleep(2) | |||
r1338 | test_changeset_walk(limit=100) | |||
r1341 | time.sleep(2) | |||
test_files_walk(100) | ||||