statsd_client.py
52 lines
| 1.2 KiB
| text/x-python
|
PythonLexer
r4792 | from rhodecode.lib._vendor.statsd import client_from_config | |||
class StatsdClientNotInitialised(Exception): | ||||
pass | ||||
class _Singleton(type): | ||||
"""A metaclass that creates a Singleton base class when called.""" | ||||
_instances = {} | ||||
def __call__(cls, *args, **kwargs): | ||||
if cls not in cls._instances: | ||||
r5096 | cls._instances[cls] = super().__call__(*args, **kwargs) | |||
r4792 | return cls._instances[cls] | |||
class Singleton(_Singleton("SingletonMeta", (object,), {})): | ||||
pass | ||||
class StatsdClientClass(Singleton): | ||||
setup_run = False | ||||
statsd_client = None | ||||
statsd = None | ||||
r5323 | def __repr__(self): | |||
return f"{self.__class__}(statsd={self.statsd})" | ||||
r4792 | def __getattribute__(self, name): | |||
if name.startswith("statsd"): | ||||
if self.setup_run: | ||||
r5096 | return super().__getattribute__(name) | |||
r4792 | else: | |||
return None | ||||
#raise StatsdClientNotInitialised("requested key was %s" % name) | ||||
r5096 | return super().__getattribute__(name) | |||
r4792 | ||||
def setup(self, settings): | ||||
""" | ||||
Initialize the client | ||||
""" | ||||
statsd = client_from_config(settings) | ||||
self.statsd = statsd | ||||
self.statsd_client = statsd | ||||
self.setup_run = True | ||||
StatsdClient = StatsdClientClass() | ||||