Skip to main content

Performance metrics, based on Coda Hale's Yammer metrics

Project description

pipeline status coverage report PyPI Status PyPI Version PyPI Python PyPI License PyPI Format

Applipy Metrics

Note: This is a hard fork of Lightricks/PyFormance at commit d59501e

A Python port of the core portion of a Java Metrics library by Coda Hale, with inspiration by YUNOMI - Y U NO MEASURE IT?

Applipy Metrics is a toolset for performance measurement and statistics, with a signaling mechanism that allows to issue events in cases of unexpected behavior

Core Features


A gauge metric is an instantaneous reading of a particular value.


Simple interface to increment and decrement a value. For example, this can be used to measure the total number of jobs sent to the queue, as well as the pending (not yet complete) number of jobs in the queue. Simply increment the counter when an operation starts and decrement it when it completes.


Measures the statistical distribution of values in a data stream. Keeps track of minimum, maximum, mean, standard deviation, etc. It also measures median, 75th, 90th, 95th, 98th, 99th, and 99.9th percentiles. An example use case would be for looking at the number of daily logins for 99 percent of your days, ignoring outliers.

Regex Grouping

Useful when working with APIs. A RegexRegistry allows to group API calls and measure from a single location instead of having to define different timers in different places.

>>> from applipy_metrics.registry import RegexRegistry
>>> reg = RegexRegistry(pattern='^/api/(?P<model>)/\d+/(?P<verb>)?$')
>>> def rest_api_request(path):
...     with reg.timer(path).time():
...         # do stuff
>>> print(reg.dump_metrics())


This library exposes an applipy module, if applipy is installed.

The module can be imported at applipy_metrics.MetricsModule.

It binds a MetricsRegistry instance, so that other modules can declare a dependency and use it to create metrics.

Configurations available

  • metrics.clock: fully qualified name of an object with a member function named time() that returns unix timestamps. Will be used as the registry clock, used for summaries.
  • metrics.summary.sample_provider: fully qualified name of a function that accepts a clock instance and returns an instance of either applipy_metrics.stats.samples.ExpDecayingSample, applipy_metrics.stats.samples.SlidingTimeWindowSample or None.

Metrics Reporters

If you want to report your metrics using a applipy_metrics.reporters.reporter.Reporter instance, simply bind your reporter provider/instance to the base reporter type. The MetricsModule will take care of its lifecycle.



The simplest and easiest way to use the Applipy Metrics library.


You can use the count_calls decorator to count the number of times a function is called.

>>> from applipy_metrics import counter, count_calls
>>> @count_calls
... def test():
...     pass
>>> for i in range(10):
...     test()
>>> print(counter("test_calls").get_count())

You can use the time_calls decorator to time the execution of a function and get distribution data from it.

>>> import time
>>> from applipy_metrics import summary, time_calls
>>> @time_calls
... def test():
...     time.sleep(0.1)
>>> for i in range(10):
...     test()
>>> print(summary("test_calls").get_snapshot().get_mean())

With statement

You can also use a timer using the with statement

>>> import time
>>> from applipy_metrics import summary, Chronometer
>>> with Chronometer(on_stop=lambda x: summary("test").add(x)):
...    time.sleep(0.1)
>>> print(summary("test").get_snapshot().get_mean())

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

applipy_metrics-1.2.3.tar.gz (16.5 kB view hashes)

Uploaded source

Built Distribution

applipy_metrics-1.2.3-py3-none-any.whl (19.3 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page