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

Gauge

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

Counter

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.

Summary

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())

applipy

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.

Examples

Decorators

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

Counter

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())
10
Timer

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())
0.100820207596

With statement

You can also use a timer using the with statement

Chronometer
>>> 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())
0.10114598274230957

Project details


Download files

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

Files for applipy-metrics, version 1.2.3
Filename, size File type Python version Upload date Hashes
Filename, size applipy_metrics-1.2.3-py3-none-any.whl (19.3 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size applipy_metrics-1.2.3.tar.gz (16.5 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page