summary refs log tree commit diff
diff options
context:
space:
mode:
authorPaul "LeoNerd" Evans <paul@matrix.org>2015-03-09 18:34:20 +0000
committerPaul "LeoNerd" Evans <paul@matrix.org>2015-03-12 16:24:51 +0000
commit1748605c5d69cb93cbe6bb4d93060124cdc9282f (patch)
tree61aaa16a8c9369fd14c56c23efbdc959cd0348c4
parentRemember to emit final linefeed from /metrics page, or Prometheus gets upset (diff)
downloadsynapse-1748605c5d69cb93cbe6bb4d93060124cdc9282f.tar.xz
Count incoming HTTP requests per servlet that responds
-rw-r--r--synapse/federation/transport/server.py4
-rw-r--r--synapse/http/server.py18
2 files changed, 15 insertions, 7 deletions
diff --git a/synapse/federation/transport/server.py b/synapse/federation/transport/server.py
index 6c624977d7..7838a81362 100644
--- a/synapse/federation/transport/server.py
+++ b/synapse/federation/transport/server.py
@@ -148,6 +148,10 @@ class BaseFederationServlet(object):
                 logger.exception("authenticate_request failed")
                 raise
             defer.returnValue(response)
+
+        # Extra logic that functools.wraps() doesn't finish
+        new_code.__self__ = code.__self__
+
         return new_code
 
     def register(self, server):
diff --git a/synapse/http/server.py b/synapse/http/server.py
index 23708c08c9..a0d190ff78 100644
--- a/synapse/http/server.py
+++ b/synapse/http/server.py
@@ -38,7 +38,7 @@ logger = logging.getLogger(__name__)
 metrics = synapse.metrics.get_metrics_for(__name__)
 
 incoming_requests_counter = metrics.register_counter("requests",
-    labels=["method"],
+    labels=["method", "servlet"],
 )
 outgoing_responses_counter = metrics.register_counter("responses",
     labels=["method","code"],
@@ -122,8 +122,6 @@ class JsonResource(HttpServer, resource.Resource):
             This checks if anyone has registered a callback for that method and
             path.
         """
-        incoming_requests_counter.inc(request.method)
-
         code = None
         start = self.clock.time_msec()
         try:
@@ -143,6 +141,15 @@ class JsonResource(HttpServer, resource.Resource):
                 # returned response. We pass both the request and any
                 # matched groups from the regex to the callback.
 
+                callback = path_entry.callback
+
+                servlet_instance = getattr(callback, "__self__", None)
+                if servlet_instance is not None:
+                    servlet_classname = servlet_instance.__class__.__name__
+                else:
+                    servlet_classname = "%r" % callback
+                incoming_requests_counter.inc(request.method, servlet_classname)
+
                 args = [
                     urllib.unquote(u).decode("UTF-8") for u in m.groups()
                 ]
@@ -152,10 +159,7 @@ class JsonResource(HttpServer, resource.Resource):
                     request.method, request.path
                 )
 
-                code, response = yield path_entry.callback(
-                    request,
-                    *args
-                )
+                code, response = yield callback(request, *args)
 
                 self._send_response(request, code, response)
                 return