def METHOD_NAME(cls):
    for attr in cls.__dict__:
        attribute = getattr(cls, attr)
        if not callable(attribute) or inspect.isclass(attribute):
            continue
        # Ignoring staticmethod and classmethod because they don't need cls in args
        # also ignore nested classes
        if isinstance(cls.__dict__[attr], staticmethod) or isinstance(cls.__dict__[attr], classmethod):
            continue
        # Get rid of SnmpCheck._thread_factory and related
        if getattr(attribute, '__module__', 'threading') in EXCLUDED_MODULES:
            continue
        if not integration_tracing_exhaustive and attr not in AGENT_CHECK_DEFAULT_TRACED_METHODS:
            continue
        if attr == 'warning':
            setattr(cls, attr, traced_warning(attribute, tracer))
        else:
            setattr(cls, attr, tracing_method(attribute, tracer))
    return cls