Source code for graphitesend.block_metric

import sys
from time import time

if sys.version_info.major == 2:
    from contextlib2 import contextmanager, ExitStack
else:
    from contextlib import contextmanager, ExitStack


[docs]@contextmanager def executions(client, metric): """Track the number of executions""" try: yield finally: client.send(metric + ".executions", 1)
[docs]@contextmanager def errors(client, metric): """Track the number of errors""" try: yield except Exception: client.send(metric + ".errors", 1)
[docs]@contextmanager def processing_time(client, metric): """Track the processing time""" start = time() try: yield finally: client.send(metric + ".processing_time", time() - start)
[docs]class BlockMetric: """Enable tracking on a block of code""" #: Trackers activated during the execution of the block of code trackers = [executions, errors, processing_time] def __init__(self, client, metric): self.client = client self.metric = metric def __enter__(self): self.stack = ExitStack() for tracker in self.trackers: self.stack.enter_context(tracker(self.client, self.metric)) def __exit__(self, exc_type, exc_val, exc_tb): self.stack.__exit__(exc_type, exc_val, exc_tb)