import time
import who_calls
import neo_cgi
PROFILER_DATA = []
PROFILER_START = 0
PROFILER_ENABLED = 0
PROFILER_DEPTH = 0
def enable():
global PROFILER_START
global PROFILER_ENABLED
global PROFILER_DATA
PROFILER_START = time.time()
PROFILER_ENABLED = 1
PROFILER_DATA = []
def disable():
global PROFILER_START
global PROFILER_ENABLED
global PROFILER_DATA
PROFILER_START = 0
PROFILER_ENABLED = 0
PROFILER_DATA = []
def hdfExport(prefix, hdf):
global PROFILER_DATA
n = 0
for p in PROFILER_DATA:
hdf.setValue("%s.%d.when" % (prefix, n), "%5.2f" % (p.when))
hdf.setValue("%s.%d.time" % (prefix, n), "%5.2f" % (p.length))
hdf.setValue("%s.%d.klass" % (prefix, n), p.klass)
hdf.setValue("%s.%d.what" % (prefix, n), " " * p.depth + p.what)
hdf.setValue("%s.%d.where" % (prefix, n), neo_cgi.htmlEscape(p.where))
class Profiler:
def __init__ (self, klass, what):
global PROFILER_START
global PROFILER_ENABLED
global PROFILER_DATA
global PROFILER_DEPTH
if not PROFILER_ENABLED: return
self.when = time.time() - PROFILER_START
self.klass = klass
self.where = who_calls.pretty_who_calls()
self.what = what
self.length = 0
self.depth = PROFILER_DEPTH
PROFILER_DEPTH = PROFILER_DEPTH + 1
PROFILER_DATA.append(self)
def end(self):
global PROFILER_ENABLED
global PROFILER_DEPTH
if not PROFILER_ENABLED: return
self.length = time.time() - self.when - PROFILER_START
PROFILER_DEPTH = PROFILER_DEPTH - 1
if PROFILER_DEPTH < 0: PROFILER_DEPTH = 0
class ProfilerCursor:
def __init__ (self, real_cursor):
self.real_cursor = real_cursor
def execute (self, query, args=None):
p = Profiler("SQL", query)
r = self.real_cursor.execute(query, args)
p.end()
return r
def __getattr__ (self, key):
return getattr(self.real_cursor, key)