Measure http.server render

This commit is contained in:
Erik Johnston 2016-08-19 17:51:08 +01:00
parent 47dd8f02a1
commit 39b900b316

View file

@ -19,6 +19,7 @@ from synapse.api.errors import (
) )
from synapse.util.logcontext import LoggingContext, PreserveLoggingContext from synapse.util.logcontext import LoggingContext, PreserveLoggingContext
from synapse.util.caches import intern_dict from synapse.util.caches import intern_dict
from synapse.util.metrics import Measure
import synapse.metrics import synapse.metrics
import synapse.events import synapse.events
@ -234,41 +235,42 @@ class JsonResource(HttpServer, resource.Resource):
request_metrics = RequestMetrics() request_metrics = RequestMetrics()
request_metrics.start(self.clock) request_metrics.start(self.clock)
# Loop through all the registered callbacks to check if the method with Measure(self.clock, "http.render"):
# and path regex match # Loop through all the registered callbacks to check if the method
for path_entry in self.path_regexs.get(request.method, []): # and path regex match
m = path_entry.pattern.match(request.path) for path_entry in self.path_regexs.get(request.method, []):
if not m: m = path_entry.pattern.match(request.path)
continue if not m:
continue
# We found a match! Trigger callback and then return the # We found a match! Trigger callback and then return the
# returned response. We pass both the request and any # returned response. We pass both the request and any
# matched groups from the regex to the callback. # matched groups from the regex to the callback.
callback = path_entry.callback callback = path_entry.callback
servlet_instance = getattr(callback, "__self__", None) servlet_instance = getattr(callback, "__self__", None)
if servlet_instance is not None: if servlet_instance is not None:
servlet_classname = servlet_instance.__class__.__name__ servlet_classname = servlet_instance.__class__.__name__
else: else:
servlet_classname = "%r" % callback servlet_classname = "%r" % callback
kwargs = intern_dict({ kwargs = intern_dict({
name: urllib.unquote(value).decode("UTF-8") if value else value name: urllib.unquote(value).decode("UTF-8") if value else value
for name, value in m.groupdict().items() for name, value in m.groupdict().items()
}) })
callback_return = yield callback(request, **kwargs) callback_return = yield callback(request, **kwargs)
if callback_return is not None: if callback_return is not None:
code, response = callback_return code, response = callback_return
self._send_response(request, code, response) self._send_response(request, code, response)
try: try:
request_metrics.stop(self.clock, request, servlet_classname) request_metrics.stop(self.clock, request, servlet_classname)
except: except:
pass pass
return return
# Huh. No one wanted to handle that? Fiiiiiine. Send 400. # Huh. No one wanted to handle that? Fiiiiiine. Send 400.
raise UnrecognizedRequestError() raise UnrecognizedRequestError()