def METHOD_NAME(f):
    @wraps(f)
    def wrapper(self, *args, **kwds):
        name = f.__name__
        self.startObserving(name, *args, **kwds)
        try:
            ret = f(self, *args, **kwds)
            self.endObserving(name, ret)
        except BaseException as e:
            self.failObserving(name, e)
            raise
        return ret
    return wrapper