swh.core.statsd module#
- swh.core.statsd.random() x in the interval [0, 1).#
- class swh.core.statsd.TimedContextManagerDecorator(statsd, metric=None, error_metric=None, tags=None, sample_rate=1)[source]#
- Bases: - object- A context manager and a decorator which will report the elapsed time in the context OR in a function call. 
- class swh.core.statsd.Statsd(*, host=None, port=None, max_buffer_size=50, namespace=None, constant_tags=None)[source]#
- Bases: - object- Initialize a client to send metrics to a StatsD server. - Parameters:
- host (str) – the host of the StatsD server. Defaults to localhost. 
- port (int) – the port of the StatsD server. Defaults to 8125. 
- max_buffer_size (int) – Maximum number of metrics to buffer before sending to the server if sending metrics in batch 
- namespace (str) – Namespace to prefix all metric names 
- constant_tags (Dict[str, str]) – Tags to attach to all metrics 
 
 - Note - This class also supports the following environment variables: - STATSD_HOST
- Override the default host of the statsd server 
- STATSD_PORT
- Override the default port of the statsd server 
- STATSD_TAGS
- Tags to attach to every metric reported. Example value: - “label:value,other_label:other_value” 
 - gauge(metric, value, tags=None, sample_rate=1)[source]#
- Record the value of a gauge, optionally setting a list of tags and a sample rate. - >>> statsd.gauge('users.online', 123) >>> statsd.gauge('active.connections', 1001, tags={"protocol": "http"}) 
 - increment(metric, value=1, tags=None, sample_rate=1)[source]#
- Increment a counter, optionally setting a value, tags and a sample rate. - >>> statsd.increment('page.views') >>> statsd.increment('files.transferred', 124) 
 - decrement(metric, value=1, tags=None, sample_rate=1)[source]#
- Decrement a counter, optionally setting a value, tags and a sample rate. - >>> statsd.decrement('files.remaining') >>> statsd.decrement('active.connections', 2) 
 - histogram(metric, value, tags=None, sample_rate=1)[source]#
- Sample a histogram value, optionally setting tags and a sample rate. - >>> statsd.histogram('uploaded.file.size', 1445) >>> statsd.histogram('file.count', 26, tags={"filetype": "python"}) 
 - timing(metric, value, tags=None, sample_rate=1)[source]#
- Record a timing, optionally setting tags and a sample rate. - >>> statsd.timing("query.response.time", 1234) 
 - timed(metric=None, error_metric=None, tags=None, sample_rate=1)[source]#
- A decorator or context manager that will measure the distribution of a function’s/context’s run time. Optionally specify a list of tags or a sample rate. If the metric is not defined as a decorator, the module name and function name will be used. The metric is required as a context manager. - @statsd.timed('user.query.time', sample_rate=0.5) def get_user(user_id): # Do what you need to ... pass # Is equivalent to ... with statsd.timed('user.query.time', sample_rate=0.5): # Do what you need to ... pass # Is equivalent to ... start = time.monotonic() try: get_user(user_id) finally: statsd.timing('user.query.time', time.monotonic() - start) 
 - set(metric, value, tags=None, sample_rate=1)[source]#
- Sample a set value. - >>> statsd.set('visitors.uniques', 999) 
 - property socket#
- Return a connected socket. - Note: connect the socket before assigning it to the class instance to avoid bad thread race conditions. 
 - open_buffer(max_buffer_size=50)[source]#
- Open a buffer to send a batch of metrics in one packet. - You can also use this as a context manager. - >>> with Statsd() as batch: ... batch.gauge('users.online', 123) ... batch.gauge('active.connections', 1001) 
 - status_gauge(metric_name: str, statuses: Collection[str], tags: Dict[str, str] | None = None)[source]#
- Context manager to keep track of status changes as a gauge - In addition to the metric_name and tags arguments, it expects a list of statuses to declare which statuses are possible, and returns a callable as context manager. This callable takes ones of the possible statuses as argument. Typical usage would be: - >>> with statsd.status_gauge( "metric_name", ["starting", "processing", "waiting"]) as set_status: set_status("starting") # ... set_status("waiting") # ...