Skip to content

Instantly share code, notes, and snippets.

@blech
Forked from tominsam/debug
Created February 10, 2010 23:07
Show Gist options
  • Save blech/300950 to your computer and use it in GitHub Desktop.
Save blech/300950 to your computer and use it in GitHub Desktop.
AppEngine timing debugger
import time
from google.appengine.ext import webapp
from google.appengine.api import datastore
import logging
ACCUMULATE = False
def monkey_patch(namespace, name, wrapper):
nname = '_orig_' + name
if not getattr(namespace, nname, None):
setattr(namespace, nname, getattr(namespace, name))
def w(*args, **kwargs):
return wrapper(getattr(namespace, nname), *args, **kwargs)
setattr(namespace, name, w)
gqls_debugging = []
def wr(orig_func, self, *args, **kwargs):
t0 = time.time()
r = orig_func(self, *args, **kwargs)
t1 = time.time()
logging.info("%5.0fms GQL %s\n args: %r %r " % ((t1-t0)*1000, ("%s" % self._ToPb()).replace("\n", "\n ").strip(), args, kwargs) )
return r
monkey_patch(datastore.Query, '_Run', wr)
def monkey_patch_simple_timer(namespace, name, comment=None):
if not comment:
comment = name.upper()
def wr(orig_func, *args, **kwargs):
t0 = time.time()
r = orig_func(*args, **kwargs)
t1 = time.time()
logging.info( "%5.0fms %s %r %r" % ((t1-t0)*1000, comment, args, kwargs) )
return r
monkey_patch(datastore, name, wr)
monkey_patch_simple_timer(datastore, 'Put')
monkey_patch_simple_timer(datastore, 'Get')
monkey_patch_simple_timer(datastore, 'Delete')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment