DataDog / datadogpy

The Datadog Python library
https://datadoghq.com/
Other
609 stars 303 forks source link

Add histogram context manager and decorator #769

Open oldpatricka opened 1 year ago

oldpatricka commented 1 year ago

This MR adds support for a new decorator for histograms, much the same as the distributed decorator. (It is heavily cribbed from same).

A decorator or context manager that will measure the histogram of a function's/context's run time using custom metric HISTOGRAM.

E.g. of usage follows:

@statsd.histogrammed('user.query.time', sample_rate=0.5)
def get_user(user_id):
    # Do what you need to ...
    pass

# Is equivalent to ...
with statsd.histogrammed('user.query.time', sample_rate=0.5):
    # Do what you need to ...
    pass

# Is equivalent to ...
start = time.time()
try:
    get_user(user_id)
finally:
    statsd.histogram('user.query.time', time.time() - start)

Requirements for Contributing to this repository

What does this PR do?

This adds a new histogrammed decorator that works much the same way as timed and distributed. I wanted to time a function using a histogram in my project, and added very similar code to my project to do so.

This implements https://github.com/DataDog/datadogpy/issues/770

Description of the Change

This copies what is done with the distributed decorator extremely closely.

Alternate Designs

This is a simple change so no alternatives were considered.

Possible Drawbacks

I can't imagine any.

Verification Process

I ran a forked of the dogstatsd client against my datadog account and saw metrics appear as expected.

Additional Notes

N/A

Release Notes

N/A

Review checklist (to be filled by reviewers)

github-actions[bot] commented 1 year ago

This issue has been automatically marked as stale because it has not had activity in the last 30 days. Note that the issue will not be automatically closed, but this notification will remind us to investigate why there's been inactivity.