ironic.common.metrics module

class ironic.common.metrics.Counter(metrics, name, sample_rate)[source]

Bases: object

A counter decorator and context manager.

This metric type increments a counter every time the decorated method or context manager is executed. It is bound to this MetricLogger. For example:

from ironic.common import metrics_utils

METRICS = metrics_utils.get_metrics_logger()

@METRICS.counter('foo')
def foo(bar, baz):
    print bar, baz

with METRICS.counter('foo'):
    do_something()
__call__(f)[source]

Call self as a function.

class ironic.common.metrics.Gauge(metrics, name)[source]

Bases: object

A gauge decorator.

This metric type returns the value of the decorated method as a metric every time the method is executed. It is bound to this MetricLogger. For example:

from ironic.common import metrics_utils

METRICS = metrics_utils.get_metrics_logger()

@METRICS.gauge('foo')
def add_foo(bar, baz):
    return (bar + baz)
__call__(f)[source]

Call self as a function.

class ironic.common.metrics.MetricLogger(prefix='', delimiter='.')[source]

Bases: object

Abstract class representing a metrics logger.

A MetricLogger sends data to a backend (noop or statsd). The data can be a gauge, a counter, or a timer.

The data sent to the backend is composed of:
  • a full metric name

  • a numeric value

The format of the full metric name is:

_prefix<delim>name

where:
  • _prefix: [global_prefix<delim>][uuid<delim>][host_name<delim>]prefix

  • name: the name of this metric

  • <delim>: the delimiter. Default is ‘.’

counter(name, sample_rate=None)[source]
gauge(name)[source]
get_metric_name(name)[source]

Get the full metric name.

The format of the full metric name is:

_prefix<delim>name

where:
  • _prefix: [global_prefix<delim>][uuid<delim>][host_name<delim>] prefix

  • name: the name of this metric

  • <delim>: the delimiter. Default is ‘.’

Parameters:

name – The metric name.

Returns:

The full metric name, with logger prefix, as a string.

get_metrics_data()[source]

Return the metrics collection, if available.

send_counter(name, value, sample_rate=None)[source]

Send counter metric data.

Counters are used to count how many times an event occurred. The backend will increment the counter ‘name’ by the value ‘value’.

Optionally, specify sample_rate in the interval [0.0, 1.0] to sample data probabilistically where:

P(send metric data) = sample_rate

If sample_rate is None, then always send metric data, but do not have the backend send sample rate information (if supported).

Parameters:
  • name – Metric name

  • value – Metric numeric value that will be sent to the backend

  • sample_rate – Probabilistic rate at which the values will be sent. Value must be None or in the interval [0.0, 1.0].

send_gauge(name, value)[source]

Send gauge metric data.

Gauges are simple values. The backend will set the value of gauge ‘name’ to ‘value’.

Parameters:
  • name – Metric name

  • value – Metric numeric value that will be sent to the backend

send_timer(name, value)[source]

Send timer data.

Timers are used to measure how long it took to do something.

Parameters:
  • m_name – Metric name

  • m_value – Metric numeric value that will be sent to the backend

timer(name)[source]
class ironic.common.metrics.NoopMetricLogger(prefix='', delimiter='.')[source]

Bases: MetricLogger

Noop metric logger that throws away all metric data.

class ironic.common.metrics.Timer(metrics, name)[source]

Bases: object

A timer decorator and context manager.

This metric type times the decorated method or code running inside the context manager, and emits the time as the metric value. It is bound to this MetricLogger. For example:

from ironic.common import metrics_utils

METRICS = metrics_utils.get_metrics_logger()

@METRICS.timer('foo')
def foo(bar, baz):
    print bar, baz

with METRICS.timer('foo'):
    do_something()
__call__(f)[source]

Call self as a function.