2
from optparse import SUPPRESS_HELP
3
from flexget.plugin import register_parser_option
4
from flexget.event import event
6
log = logging.getLogger('performance')
15
def log_query_count(name_point):
16
"""Debugging purposes, allows logging number of executed queries at :name_point:"""
17
log.info('At point named `%s` total of %s queries were ran' % (name_point, query_count))
20
@event('manager.startup')
22
if manager.options.debug_perf:
23
log.info('Enabling plugin and SQLAlchemy performance debugging')
26
# Monkeypatch query counter for SQLAlchemy
27
from sqlalchemy.engine import Connection
28
if hasattr(Connection, 'execute'):
29
orig_f = Connection.execute
31
def monkeypatched(*args, **kwargs):
34
return orig_f(*args, **kwargs)
36
Connection.execute = monkeypatched
38
log.critical('Unable to monkeypatch sqlalchemy')
40
@event('feed.execute.before_plugin')
41
def before(feed, keyword):
42
fd = _start.setdefault(feed.name, {})
43
fd.setdefault('time', {})[keyword] = time.time()
44
fd.setdefault('queries', {})[keyword] = query_count
46
@event('feed.execute.after_plugin')
47
def after(feed, keyword):
48
took = time.time() - _start[feed.name]['time'][keyword]
49
queries = query_count - _start[feed.name]['queries'][keyword]
50
# Store results, increases previous values
51
pd = performance.setdefault(feed.name, {})
52
data = pd.setdefault(keyword, {})
53
data['took'] = data.get('took', 0) + took
54
data['queries'] = data.get('queries', 0) + queries
56
@event('manager.execute.completed')
58
for name, data in performance.iteritems():
59
log.info('Performance results for feed %s:' % name)
60
for keyword, results in data.iteritems():
61
took = results['took']
62
queries = results['queries']
63
if took > 0.1 or queries > 10:
64
log.info('%-15s took %0.2f sec (%s queries)' % (keyword, took, queries))
67
register_parser_option('--debug-perf', action='store_true', dest='debug_perf', default=False,