You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by jo...@apache.org on 2013/09/24 19:08:21 UTC
[42/50] git commit: [#6699] make instrumentation extensible;
refine mongo instrumentation
[#6699] make instrumentation extensible; refine mongo instrumentation
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/d22e7983
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/d22e7983
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/d22e7983
Branch: refs/heads/cj/6422
Commit: d22e79832940794c04cd5e187442bb5e46dd7c4e
Parents: f236c14
Author: Dave Brondsema <db...@slashdotmedia.com>
Authored: Mon Sep 23 17:00:37 2013 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Tue Sep 24 04:01:56 2013 +0000
----------------------------------------------------------------------
Allura/allura/lib/custom_middleware.py | 51 +++++------------------------
Allura/docs/extending.rst | 1 +
ForgeGit/forgegit/git_main.py | 13 ++++++++
ForgeGit/setup.py | 4 +++
ForgeSVN/forgesvn/svn_main.py | 11 ++++++-
ForgeSVN/setup.py | 4 +++
6 files changed, 41 insertions(+), 43 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/d22e7983/Allura/allura/lib/custom_middleware.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/custom_middleware.py b/Allura/allura/lib/custom_middleware.py
index d4652ab..c942474 100644
--- a/Allura/allura/lib/custom_middleware.py
+++ b/Allura/allura/lib/custom_middleware.py
@@ -23,6 +23,7 @@ from contextlib import contextmanager
import tg
import pkg_resources
from paste import fileapp
+from paste.deploy.converters import aslist
from pylons import tmpl_context as c
from pylons.util import call_wsgi_application
from timermiddleware import Timer, TimerMiddleware
@@ -180,10 +181,10 @@ class AlluraTimerMiddleware(TimerMiddleware):
import socket
import urllib2
- return self.scm_lib_timers() + self.repo_impl_timers() + [
+ return self.entry_point_timers() + [
Timer('jinja', jinja2.Template, 'render', 'stream', 'generate'),
Timer('markdown', markdown.Markdown, 'convert'),
- Timer('ming', ming.odm.odmsession.ODMCursor, 'next'),
+ Timer('ming', ming.odm.odmsession.ODMCursor, 'next'), # FIXME: this may captures timings ok, but is misleading for counts
Timer('ming', ming.odm.odmsession.ODMSession, 'flush', 'find',
'get'),
Timer('ming', ming.schema.Document, 'validate',
@@ -194,8 +195,7 @@ class AlluraTimerMiddleware(TimerMiddleware):
Timer('mongo', pymongo.collection.Collection, 'count', 'find',
'find_one'),
Timer('mongo', pymongo.cursor.Cursor, 'count', 'distinct',
- 'explain', 'hint', 'limit', 'next', 'rewind', 'skip',
- 'sort', 'where'),
+ '_refresh'),
# urlopen and socket io may or may not overlap partially
Timer('render', genshi.Stream, 'render'),
Timer('repo.Blob.{method_name}', allura.model.repo.Blob, '*'),
@@ -210,6 +210,7 @@ class AlluraTimerMiddleware(TimerMiddleware):
Timer('template', genshi.template.Template, '_prepare', '_parse',
'generate'),
Timer('urlopen', urllib2, 'urlopen'),
+ Timer('base_repo_tool.{method_name}', allura.model.repository.RepositoryImplementation, 'last_commit_ids'),
Timer('_diffs_copied', allura.model.repo.Commit, '_diffs_copied'),
Timer('sequencematcher.{method_name}', allura.model.repo.SequenceMatcher, 'ratio', 'quick_ratio', 'real_quick_ratio'),
Timer('unified_diff', allura.model.repo, 'unified_diff'),
@@ -220,43 +221,9 @@ class AlluraTimerMiddleware(TimerMiddleware):
stat_record.add('request_category', c.app.config.tool_name.lower())
return stat_record
- def scm_lib_timers(self):
+ def entry_point_timers(self):
timers = []
- with pass_on_exc(ImportError):
- import forgesvn
- timers.append(Timer('svn_lib.{method_name}', forgesvn.model.svn.SVNLibWrapper, 'checkout', 'add',
- 'checkin', 'info2', 'log', 'cat', 'list'))
- with pass_on_exc(ImportError):
- import git
- import forgegit
- timers.append(Timer('git_lib.{method_name}', git.Repo, 'rev_parse', 'iter_commits', 'commit'))
- timers.append(Timer('git_lib.{method_name}', forgegit.model.git_repo.GitLibCmdWrapper, 'log'))
- with pass_on_exc(ImportError):
- import mercurial.hg
- timers.append(Timer('hg_lib.{method_name}', mercurial.hg.localrepo.localrepository, 'heads',
- 'branchtags', 'tags'))
- timers.append(Timer('hg_lib.{method_name}', mercurial.cmdutil, 'walkchangerevs'))
+ for ep in h.iter_entry_points('allura.timers'):
+ func = ep.load()
+ timers += aslist(func())
return timers
-
- def repo_impl_timers(self):
- timers= []
- from allura.model.repository import Repository, RepositoryImplementation
- timers.append(Timer('base_tool.{method_name}', RepositoryImplementation, 'last_commit_ids'))
- with pass_on_exc(ImportError):
- from forgegit.model.git_repo import GitImplementation
- timers.append(Timer('git_tool.{method_name}', GitImplementation, '*'))
- with pass_on_exc(ImportError):
- from forgesvn.model.svn import SVNImplementation
- timers.append(Timer('svn_tool.{method_name}', SVNImplementation, '*'))
- with pass_on_exc(ImportError):
- from forgehg.model.hg import HgImplementation
- timers.append(Timer('hg_tool.{method_name}', HgImplementation, '*'))
- return timers
-
-
-@contextmanager
-def pass_on_exc(exc):
- try:
- yield
- except exc:
- pass
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/d22e7983/Allura/docs/extending.rst
----------------------------------------------------------------------
diff --git a/Allura/docs/extending.rst b/Allura/docs/extending.rst
index 5458b69..c241d5f 100644
--- a/Allura/docs/extending.rst
+++ b/Allura/docs/extending.rst
@@ -34,6 +34,7 @@ The available extension points for Allura are:
* :class:`allura.lib.spam.SpamFilter`
* ``site_stats`` in the root API data. Docs in :class:`allura.controllers.rest.RestController`
* :mod:`allura.lib.package_path_loader` (for overriding templates)
+* ``[allura.timers]`` functions which return a list or single :class:`timermiddleware.Timer` which will be included in stats.log timings
A listing of available 3rd-party extensions is at https://forge-allura.apache.org/p/allura/wiki/Extensions/
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/d22e7983/ForgeGit/forgegit/git_main.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/git_main.py b/ForgeGit/forgegit/git_main.py
index 2ba63bc..1d11e41 100644
--- a/ForgeGit/forgegit/git_main.py
+++ b/ForgeGit/forgegit/git_main.py
@@ -23,6 +23,8 @@ from pylons import tmpl_context as c
from ming.utils import LazyProperty
from ming.orm.ormsession import ThreadLocalORMSession
+from timermiddleware import Timer
+import git
# Pyforge-specific imports
import allura.tasks.repo_tasks
@@ -106,3 +108,14 @@ class ForgeGitApp(RepositoryApp):
cloned_from_url=init_from_url)
else:
allura.tasks.repo_tasks.init.post()
+
+
+def git_timers():
+ return [
+ Timer('git_lib.{method_name}', git.Repo, 'rev_parse', 'iter_commits', 'commit'),
+ Timer('git_lib.{method_name}', GM.git_repo.GitLibCmdWrapper, 'log'),
+ ]
+
+
+def forgegit_timers():
+ return Timer('git_tool.{method_name}', GM.git_repo.GitImplementation, '*')
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/d22e7983/ForgeGit/setup.py
----------------------------------------------------------------------
diff --git a/ForgeGit/setup.py b/ForgeGit/setup.py
index 0f6274d..3d14ef3 100644
--- a/ForgeGit/setup.py
+++ b/ForgeGit/setup.py
@@ -42,5 +42,9 @@ setup(name='ForgeGit',
# -*- Entry points: -*-
[allura]
Git=forgegit.git_main:ForgeGitApp
+
+ [allura.timers]
+ git = forgegit.git_main:git_timers
+ forgegit = forgegit.git_main:forgegit_timers
""",
)
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/d22e7983/ForgeSVN/forgesvn/svn_main.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/svn_main.py b/ForgeSVN/forgesvn/svn_main.py
index 03b1b7f..bee61b3 100644
--- a/ForgeSVN/forgesvn/svn_main.py
+++ b/ForgeSVN/forgesvn/svn_main.py
@@ -18,13 +18,13 @@
#-*- python -*-
import logging
from pylons import tmpl_context as c
-from pylons import request
# Non-stdlib imports
from ming.utils import LazyProperty
from ming.orm.ormsession import ThreadLocalORMSession
from tg import expose, redirect, validate, flash
from tg.decorators import with_trailing_slash, without_trailing_slash
+from timermiddleware import Timer
# Pyforge-specific imports
import allura.tasks.repo_tasks
@@ -169,3 +169,12 @@ class SVNImportController(BaseController):
c.user, self.app.repo, 'error',
text="Can't import into non empty repository.")
redirect(c.project.url() + 'admin/tools')
+
+
+def svn_timers():
+ return Timer('svn_lib.{method_name}', SM.svn.SVNLibWrapper, 'checkout', 'add',
+ 'checkin', 'info2', 'log', 'cat', 'list')
+
+
+def forgesvn_timers():
+ return Timer('svn_tool.{method_name}', SM.svn.SVNImplementation, '*')
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/d22e7983/ForgeSVN/setup.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/setup.py b/ForgeSVN/setup.py
index 2ee8d2e..d3b1154 100644
--- a/ForgeSVN/setup.py
+++ b/ForgeSVN/setup.py
@@ -51,5 +51,9 @@ setup(name='ForgeSVN',
# -*- Entry points: -*-
[allura]
SVN=forgesvn.svn_main:ForgeSVNApp
+
+ [allura.timers]
+ svn = forgesvn.svn_main:svn_timers
+ forgesvn = forgesvn.svn_main:forgesvn_timers
""",
)