profiler.py
Go to the documentation of this file.
00001 
00002 import time
00003 import who_calls
00004 import neo_cgi
00005 
00006 PROFILER_DATA = []
00007 PROFILER_START = 0
00008 PROFILER_ENABLED = 0
00009 PROFILER_DEPTH = 0
00010 
00011 def enable():
00012     global PROFILER_START
00013     global PROFILER_ENABLED
00014     global PROFILER_DATA
00015     PROFILER_START = time.time()
00016     PROFILER_ENABLED = 1
00017     PROFILER_DATA = []
00018 
00019 def disable():
00020     global PROFILER_START
00021     global PROFILER_ENABLED
00022     global PROFILER_DATA
00023     PROFILER_START = 0
00024     PROFILER_ENABLED = 0
00025     PROFILER_DATA = []
00026 
00027 def hdfExport(prefix, hdf):
00028     global PROFILER_DATA
00029     n = 0
00030     for p in PROFILER_DATA:
00031         hdf.setValue("%s.%d.when" % (prefix, n), "%5.2f" % (p.when))
00032         hdf.setValue("%s.%d.time" % (prefix, n), "%5.2f" % (p.length))
00033         hdf.setValue("%s.%d.klass" % (prefix, n), p.klass)
00034         hdf.setValue("%s.%d.what" % (prefix, n), " " * p.depth + p.what)
00035         hdf.setValue("%s.%d.where" % (prefix, n), neo_cgi.htmlEscape(p.where))
00036 
00037 class Profiler:
00038     def __init__ (self, klass, what):
00039         global PROFILER_START
00040         global PROFILER_ENABLED
00041         global PROFILER_DATA
00042         global PROFILER_DEPTH
00043         if not PROFILER_ENABLED: return
00044         self.when = time.time() - PROFILER_START
00045         self.klass = klass
00046         self.where = who_calls.pretty_who_calls()
00047         self.what = what
00048         self.length = 0
00049         self.depth = PROFILER_DEPTH
00050         PROFILER_DEPTH = PROFILER_DEPTH + 1
00051 
00052         PROFILER_DATA.append(self)
00053 
00054     def end(self):
00055         global PROFILER_ENABLED
00056         global PROFILER_DEPTH
00057         if not PROFILER_ENABLED: return
00058         self.length = time.time() - self.when - PROFILER_START
00059         PROFILER_DEPTH = PROFILER_DEPTH - 1
00060         if PROFILER_DEPTH < 0: PROFILER_DEPTH = 0
00061 
00062 class ProfilerCursor:
00063     def __init__ (self, real_cursor):
00064         self.real_cursor = real_cursor
00065 
00066     def execute (self, query, args=None):
00067         p = Profiler("SQL", query)
00068         r = self.real_cursor.execute(query, args)
00069         p.end()
00070         return r
00071 
00072     def __getattr__ (self, key):
00073         return getattr(self.real_cursor, key)


pyclearsilver
Author(s): Scott Hassan/hassan@willowgarage.com
autogenerated on Wed Apr 23 2014 10:35:42