Search code examples
pythongoogle-app-enginewebapp2

How to measure page generation time with webapp2?


I would like to display the time needed to generate a page. I guess the best place for the end time would be in the rendering function of the base handler:

class Handler(webapp2.RequestHandler):
    def write(self, *a, **kw):
        self.response.out.write(*a, **kw)

    def render_str(self, template, **params):
        t = jinja_env.get_template(template)
        time_passed = datetime.now() - start_time
        return t.render(params, time_passed=time_passed)

    def render(self, template, **kw):
        self.write(self.render_str(template, **kw))

However, I am not sure where to place the starting timer. I'd prefer not to insert it in every individual handler...


Solution

  • One place could be the handler's dispatch function, for example where the webapp2 sessions (if you use them) are saved, something like this:

    def MyHandler(webapp2.RequestHandler)
        ...
        def dispatch(self):
            start_time = time.time()
            try:
                super(MyHandler, self).dispatch()
            finally:
                elapsed_time = time.time() - start_time
                self.session_store.save_sessions(self.response)
    

    But it will measure duration for all handlers, not just for those rendering and displaying a response page.