forked from MirrorHub/synapse
Measure http.server render
This commit is contained in:
parent
47dd8f02a1
commit
39b900b316
1 changed files with 30 additions and 28 deletions
|
@ -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()
|
||||||
|
|
Loading…
Reference in a new issue