def track_duration(self, key):
        """Context manager that sets a value with the duration of time that it
        takes to execute whatever it is wrapping.

        :param str key: The timing name

        """
        if key not in self.durations:
            self.durations[key] = []
        start_time = time.time()
        try:
            yield
        finally:
            self.durations[key].append(
                max(start_time, time.time()) - start_time)