Option to serve metrics from their own localhost-only TCP port instead of muxed on the main listener

This commit is contained in:
Paul "LeoNerd" Evans 2015-03-12 16:05:46 +00:00
parent a2cdd11d4a
commit b98b4c135d
2 changed files with 15 additions and 2 deletions

View File

@ -129,7 +129,8 @@ class SynapseHomeServer(HomeServer):
location of the web client. This does nothing if web_client is not
True.
"""
web_client = self.get_config().webclient
config = self.get_config()
web_client = config.webclient
# list containing (path_str, Resource) e.g:
# [ ("/aaa/bbb/cc", Resource1), ("/aaa/dummy", Resource2) ]
@ -155,7 +156,7 @@ class SynapseHomeServer(HomeServer):
self.root_resource = Resource()
metrics_resource = self.get_resource_for_metrics()
if metrics_resource is not None:
if config.metrics_port is None and metrics_resource is not None:
desired_tree.append((METRICS_PREFIX, metrics_resource))
# ideally we'd just use getChild and putChild but getChild doesn't work
@ -234,6 +235,13 @@ class SynapseHomeServer(HomeServer):
)
logger.info("Synapse now listening on port %d", config.unsecure_port)
metrics_resource = self.get_resource_for_metrics()
if metrics_resource and config.metrics_port is not None:
reactor.listenTCP(
config.metrics_port, Site(metrics_resource), interface="127.0.0.1",
)
logger.info("Metrics now running on 127.0.0.1 port %d", config.metrics_port)
def get_version_string():
try:

View File

@ -20,6 +20,7 @@ class MetricsConfig(Config):
def __init__(self, args):
super(MetricsConfig, self).__init__(args)
self.enable_metrics = args.enable_metrics
self.metrics_port = args.metrics_port
@classmethod
def add_arguments(cls, parser):
@ -29,3 +30,7 @@ class MetricsConfig(Config):
'--enable-metrics', dest="enable_metrics", action="store_true",
help="Enable collection and rendering of performance metrics"
)
metrics_group.add_argument(
'--metrics-port', metavar="PORT", type=int,
help="Separate port to accept metrics requests on (on localhost)"
)