|
|
from __future__ import absolute_import, division, unicode_literals
|
|
|
|
|
|
import logging
|
|
|
|
|
|
from .stream import TCPStatsClient, UnixSocketStatsClient # noqa
|
|
|
from .udp import StatsClient # noqa
|
|
|
|
|
|
HOST = 'localhost'
|
|
|
PORT = 8125
|
|
|
IPV6 = False
|
|
|
PREFIX = None
|
|
|
MAXUDPSIZE = 512
|
|
|
|
|
|
log = logging.getLogger('rhodecode.statsd')
|
|
|
|
|
|
|
|
|
def statsd_config(config, prefix='statsd.'):
|
|
|
_config = {}
|
|
|
for key in config.keys():
|
|
|
if key.startswith(prefix):
|
|
|
_config[key[len(prefix):]] = config[key]
|
|
|
return _config
|
|
|
|
|
|
|
|
|
def client_from_config(configuration, prefix='statsd.', **kwargs):
|
|
|
from pyramid.settings import asbool
|
|
|
|
|
|
_config = statsd_config(configuration, prefix)
|
|
|
statsd_enabled = asbool(_config.pop('enabled', False))
|
|
|
if not statsd_enabled:
|
|
|
log.debug('statsd client not enabled by statsd.enabled = flag, skipping...')
|
|
|
return
|
|
|
|
|
|
host = _config.pop('statsd_host', HOST)
|
|
|
port = _config.pop('statsd_port', PORT)
|
|
|
prefix = _config.pop('statsd_prefix', PREFIX)
|
|
|
maxudpsize = _config.pop('statsd_maxudpsize', MAXUDPSIZE)
|
|
|
ipv6 = asbool(_config.pop('statsd_ipv6', IPV6))
|
|
|
log.debug('configured statsd client %s:%s', host, port)
|
|
|
|
|
|
try:
|
|
|
client = StatsClient(
|
|
|
host=host, port=port, prefix=prefix, maxudpsize=maxudpsize, ipv6=ipv6)
|
|
|
except Exception:
|
|
|
log.exception('StatsD is enabled, but failed to connect to statsd server, fallback: disable statsd')
|
|
|
client = None
|
|
|
|
|
|
return client
|
|
|
|
|
|
|
|
|
def get_statsd_client(request):
|
|
|
return client_from_config(request.registry.settings)
|
|
|
|