48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
"""
|
|
Wrapper for dog_stats_api, ensuring tags are valid.
|
|
See: http://help.datadoghq.com/customer/portal/questions/908720-api-guidelines
|
|
"""
|
|
from dogapi import dog_stats_api
|
|
|
|
|
|
def _clean_tags(tags):
|
|
"""
|
|
Helper method that does the actual cleaning of tags for sending to statsd.
|
|
1. Handles any type of tag - a plain string, UTF-8 binary, or a unicode
|
|
string, and converts it to UTF-8 encoded bytestring needed by statsd.
|
|
2. Escape pipe character - used by statsd as a field separator.
|
|
3. Trim to 200 characters (DataDog API limitation)
|
|
"""
|
|
def clean(tagstr):
|
|
if isinstance(tagstr, str):
|
|
return tagstr.replace('|', '_')[:200]
|
|
return unicode(tagstr).replace('|', '_')[:200].encode("utf-8")
|
|
return [clean(t) for t in tags]
|
|
|
|
|
|
def increment(metric_name, *args, **kwargs):
|
|
"""
|
|
Wrapper around dog_stats_api.increment that cleans any tags used.
|
|
"""
|
|
if "tags" in kwargs:
|
|
kwargs["tags"] = _clean_tags(kwargs["tags"])
|
|
dog_stats_api.increment(metric_name, *args, **kwargs)
|
|
|
|
|
|
def histogram(metric_name, *args, **kwargs):
|
|
"""
|
|
Wrapper around dog_stats_api.histogram that cleans any tags used.
|
|
"""
|
|
if "tags" in kwargs:
|
|
kwargs["tags"] = _clean_tags(kwargs["tags"])
|
|
dog_stats_api.histogram(metric_name, *args, **kwargs)
|
|
|
|
|
|
def timer(metric_name, *args, **kwargs):
|
|
"""
|
|
Wrapper around dog_stats_api.timer that cleans any tags used.
|
|
"""
|
|
if "tags" in kwargs:
|
|
kwargs["tags"] = _clean_tags(kwargs["tags"])
|
|
return dog_stats_api.timer(metric_name, *args, **kwargs)
|