mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2024-12-27 14:49:24 -05:00
Add vector counters to HTTP clients and servers; count the requests by method and responses by method and response code
This commit is contained in:
parent
c53ec53d80
commit
7d72e44eb9
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
from synapse.api.errors import CodeMessageException
|
from synapse.api.errors import CodeMessageException
|
||||||
from syutil.jsonutil import encode_canonical_json
|
from syutil.jsonutil import encode_canonical_json
|
||||||
|
import synapse.metrics
|
||||||
|
|
||||||
from twisted.internet import defer, reactor
|
from twisted.internet import defer, reactor
|
||||||
from twisted.web.client import (
|
from twisted.web.client import (
|
||||||
@ -31,6 +32,15 @@ import urllib
|
|||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
metrics = synapse.metrics.get_metrics_for(__name__)
|
||||||
|
|
||||||
|
outgoing_requests_counter = metrics.register_counter("outgoing_requests",
|
||||||
|
keys=["method"],
|
||||||
|
)
|
||||||
|
incoming_responses_counter = metrics.register_counter("incoming_responses",
|
||||||
|
keys=["method","code"],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class SimpleHttpClient(object):
|
class SimpleHttpClient(object):
|
||||||
"""
|
"""
|
||||||
@ -48,7 +58,18 @@ class SimpleHttpClient(object):
|
|||||||
def request(self, method, *args, **kwargs):
|
def request(self, method, *args, **kwargs):
|
||||||
# A small wrapper around self.agent.request() so we can easily attach
|
# A small wrapper around self.agent.request() so we can easily attach
|
||||||
# counters to it
|
# counters to it
|
||||||
return self.agent.request(method, *args, **kwargs)
|
outgoing_requests_counter.inc(method)
|
||||||
|
d = self.agent.request(method, *args, **kwargs)
|
||||||
|
|
||||||
|
def _cb(response):
|
||||||
|
incoming_responses_counter.inc(method, response.code)
|
||||||
|
return response
|
||||||
|
def _eb(failure):
|
||||||
|
incoming_responses_counter.inc(method, "ERR")
|
||||||
|
return failure
|
||||||
|
d.addCallbacks(_cb, _eb)
|
||||||
|
|
||||||
|
return d
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def post_urlencoded_get_json(self, uri, args={}):
|
def post_urlencoded_get_json(self, uri, args={}):
|
||||||
|
@ -23,6 +23,7 @@ from twisted.web._newclient import ResponseDone
|
|||||||
from synapse.http.endpoint import matrix_federation_endpoint
|
from synapse.http.endpoint import matrix_federation_endpoint
|
||||||
from synapse.util.async import sleep
|
from synapse.util.async import sleep
|
||||||
from synapse.util.logcontext import PreserveLoggingContext
|
from synapse.util.logcontext import PreserveLoggingContext
|
||||||
|
import synapse.metrics
|
||||||
|
|
||||||
from syutil.jsonutil import encode_canonical_json
|
from syutil.jsonutil import encode_canonical_json
|
||||||
|
|
||||||
@ -40,6 +41,15 @@ import urlparse
|
|||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
metrics = synapse.metrics.get_metrics_for(__name__)
|
||||||
|
|
||||||
|
outgoing_requests_counter = metrics.register_counter("outgoing_requests",
|
||||||
|
keys=["method"],
|
||||||
|
)
|
||||||
|
incoming_responses_counter = metrics.register_counter("incoming_responses",
|
||||||
|
keys=["method","code"],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class MatrixFederationHttpAgent(_AgentBase):
|
class MatrixFederationHttpAgent(_AgentBase):
|
||||||
|
|
||||||
@ -49,6 +59,8 @@ class MatrixFederationHttpAgent(_AgentBase):
|
|||||||
def request(self, destination, endpoint, method, path, params, query,
|
def request(self, destination, endpoint, method, path, params, query,
|
||||||
headers, body_producer):
|
headers, body_producer):
|
||||||
|
|
||||||
|
outgoing_requests_counter.inc(method)
|
||||||
|
|
||||||
host = b""
|
host = b""
|
||||||
port = 0
|
port = 0
|
||||||
fragment = b""
|
fragment = b""
|
||||||
@ -59,10 +71,20 @@ class MatrixFederationHttpAgent(_AgentBase):
|
|||||||
# Set the connection pool key to be the destination.
|
# Set the connection pool key to be the destination.
|
||||||
key = destination
|
key = destination
|
||||||
|
|
||||||
return self._requestWithEndpoint(key, endpoint, method, parsed_URI,
|
d = self._requestWithEndpoint(key, endpoint, method, parsed_URI,
|
||||||
headers, body_producer,
|
headers, body_producer,
|
||||||
parsed_URI.originForm)
|
parsed_URI.originForm)
|
||||||
|
|
||||||
|
def _cb(response):
|
||||||
|
incoming_responses_counter.inc(method, response.code)
|
||||||
|
return response
|
||||||
|
def _eb(failure):
|
||||||
|
incoming_responses_counter.inc(method, "ERR")
|
||||||
|
return failure
|
||||||
|
d.addCallbacks(_cb, _eb)
|
||||||
|
|
||||||
|
return d
|
||||||
|
|
||||||
|
|
||||||
class MatrixFederationHttpClient(object):
|
class MatrixFederationHttpClient(object):
|
||||||
"""HTTP client used to talk to other homeservers over the federation
|
"""HTTP client used to talk to other homeservers over the federation
|
||||||
|
@ -18,6 +18,7 @@ from synapse.api.errors import (
|
|||||||
cs_exception, SynapseError, CodeMessageException, UnrecognizedRequestError
|
cs_exception, SynapseError, CodeMessageException, UnrecognizedRequestError
|
||||||
)
|
)
|
||||||
from synapse.util.logcontext import LoggingContext
|
from synapse.util.logcontext import LoggingContext
|
||||||
|
import synapse.metrics
|
||||||
|
|
||||||
from syutil.jsonutil import (
|
from syutil.jsonutil import (
|
||||||
encode_canonical_json, encode_pretty_printed_json
|
encode_canonical_json, encode_pretty_printed_json
|
||||||
@ -34,6 +35,15 @@ import urllib
|
|||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
metrics = synapse.metrics.get_metrics_for(__name__)
|
||||||
|
|
||||||
|
incoming_requests_counter = metrics.register_counter("incoming_requests",
|
||||||
|
keys=["method"],
|
||||||
|
)
|
||||||
|
outgoing_responses_counter = metrics.register_counter("outgoing_responses",
|
||||||
|
keys=["method","code"],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class HttpServer(object):
|
class HttpServer(object):
|
||||||
""" Interface for registering callbacks on a HTTP server
|
""" Interface for registering callbacks on a HTTP server
|
||||||
@ -112,6 +122,8 @@ class JsonResource(HttpServer, resource.Resource):
|
|||||||
This checks if anyone has registered a callback for that method and
|
This checks if anyone has registered a callback for that method and
|
||||||
path.
|
path.
|
||||||
"""
|
"""
|
||||||
|
incoming_requests_counter.inc(request.method)
|
||||||
|
|
||||||
code = None
|
code = None
|
||||||
start = self.clock.time_msec()
|
start = self.clock.time_msec()
|
||||||
try:
|
try:
|
||||||
@ -190,6 +202,8 @@ class JsonResource(HttpServer, resource.Resource):
|
|||||||
request)
|
request)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
outgoing_responses_counter.inc(request.method, str(code))
|
||||||
|
|
||||||
# TODO: Only enable CORS for the requests that need it.
|
# TODO: Only enable CORS for the requests that need it.
|
||||||
respond_with_json(
|
respond_with_json(
|
||||||
request, code, response_json_object,
|
request, code, response_json_object,
|
||||||
|
Loading…
Reference in New Issue
Block a user