Reference Documentation
=======================
This library defines mix-ins that record application metrics.  Each mix-in
implements the same interface:

.. class:: sprockets.mixins.metrics.Mixin

   .. data:: SETTINGS_KEY

      Key in ``self.application.settings`` that contains this particular
      mix-in's configuration data.

   .. method:: record_timing(duration, *path)
      :noindex:

      :param float duration: number of seconds to record
      :param path: timing path to record

      .. code-block:: python

         self.record_timing(self.request.request_time(), 'request', 'lookup')

   .. method:: increase_counter(*path, amount=1)
      :noindex:

      :param path: counter path to increment
      :keyword int amount: value to increase the counter by

      .. code-block:: python

         self.increase_counter('db', 'query', 'foo')

   .. method:: execution_timer(*path)
      :noindex:

      :param path: timing path to record

      This method returns a context manager that records a timing
      metric to the specified path.

      .. code-block:: python

         with self.execution_timer('db', 'query', 'foo'):
             rows = yield self.session.query('SELECT * FROM foo')

   .. method:: set_metric_tag(tag, value)
      :noindex:

      :param str tag: the tag to set
      :param str value: the value to assign to the tag

      This method stores a tag and value pair to be reported with
      metrics.  It is only implemented on back-ends that support
      tagging metrics (e.g., :class:`sprockets.mixins.metrics.InfluxDBMixin`)


Statsd Implementation
---------------------
.. autoclass:: sprockets.mixins.metrics.StatsdMixin
   :members:

InfluxDB Implementation
-----------------------
.. autoclass:: sprockets.mixins.metrics.InfluxDBMixin
   :members:

.. autoclass:: sprockets.mixins.metrics.influxdb.InfluxDBConnection
   :members:

Testing Helpers
---------------
*So who actually tests that their metrics are emitted as they expect?*

Usually the answer is *no one*.  Why is that?  The ``testing`` module
contains some helper that make testing a little easier.

.. autoclass:: sprockets.mixins.metrics.testing.FakeStatsdServer
   :members:

.. autoclass:: sprockets.mixins.metrics.testing.FakeInfluxHandler
   :members: