cubicweb/statsd_logger.py
branch3.26
changeset 12291 b640ef6ad633
parent 11767 432f87a63057
child 12302 0d474f888f4a
equal deleted inserted replaced
12290:2b049c9fcec5 12291:b640ef6ad633
    45     <bucket>.<context>:<ms>|ms\n
    45     <bucket>.<context>:<ms>|ms\n
    46 
    46 
    47 There is also a decorator (``statsd_timeit``) that may be used to
    47 There is also a decorator (``statsd_timeit``) that may be used to
    48 measure and send to the statsd_ server the time passed in a function
    48 measure and send to the statsd_ server the time passed in a function
    49 or a method and the number of calls. It will send a message like::
    49 or a method and the number of calls. It will send a message like::
    50    
    50 
    51     <bucket>.<funcname>:<ms>|ms\n<bucket>.<funcname>:1|c\n
    51     <bucket>.<funcname>:<ms>|ms\n<bucket>.<funcname>:1|c\n
    52 
    52 
    53 
    53 
    54 .. _statsd: https://github.com/etsy/statsd
    54 .. _statsd: https://github.com/etsy/statsd
    55 
    55 
    56 """
    56 """
    57 
       
    58 
    57 
    59 
    58 
    60 import time
    59 import time
    61 import socket
    60 import socket
    62 
    61 
   110         self.callable = callableobj
   109         self.callable = callableobj
   111 
   110 
   112     @property
   111     @property
   113     def __doc__(self):
   112     def __doc__(self):
   114         return self.callable.__doc__
   113         return self.callable.__doc__
       
   114 
   115     @property
   115     @property
   116     def __name__(self):
   116     def __name__(self):
   117         return self.callable.__name__
   117         return self.callable.__name__
   118     
   118 
   119     def __call__(self, *args, **kw):
   119     def __call__(self, *args, **kw):
   120         if _address is None:
   120         if _address is None:
   121             return self.callable(*args, **kw)
   121             return self.callable(*args, **kw)
   122         t0 = time.time()
   122         t0 = time.time()
   123         try:
   123         try:
   124             return self.callable(*args, **kw)
   124             return self.callable(*args, **kw)
   125         finally:
   125         finally:
   126             dt = 1000*(time.time()-t0)
   126             dt = 1000 * (time.time() - t0)
   127             msg = '{0}.{1}:{2:.4f}|ms\n{0}.{1}:1|c\n'.format(_bucket, self.__name__, dt)
   127             msg = '{0}.{1}:{2:.4f}|ms\n{0}.{1}:1|c\n'.format(
       
   128                 _bucket, self.__name__, dt)
   128             _socket.sendto(msg, _address)
   129             _socket.sendto(msg, _address)
   129                 
   130 
   130     def __get__(self, obj, objtype):
   131     def __get__(self, obj, objtype):
   131         """Support instance methods."""
   132         """Support instance methods."""
   132         if obj is None: # class method or some already wrapped method
   133         if obj is None:  # class method or some already wrapped method
   133             return self
   134             return self
   134         import functools
   135         import functools
   135         return functools.partial(self.__call__, obj)
   136         return functools.partial(self.__call__, obj)