def MessageTraceWrapper(wrapped, library, operation, destination_type, destination_name, params={}): return_value = return_value_fn(wrapped) def _nr_message_trace_wrapper_(wrapped, instance, args, kwargs): transaction = current_transaction() if transaction is None: return wrapped(*args, **kwargs) if callable(library): if instance is not None: _library = library(instance, *args, **kwargs) else: _library = library(*args, **kwargs) else: _library = library if callable(operation): if instance is not None: _operation = operation(instance, *args, **kwargs) else: _operation = operation(*args, **kwargs) else: _operation = operation if callable(destination_type): if instance is not None: _destination_type = destination_type(instance, *args, **kwargs) else: _destination_type = destination_type(*args, **kwargs) else: _destination_type = destination_type if callable(destination_name): if instance is not None: _destination_name = destination_name(instance, *args, **kwargs) else: _destination_name = destination_name(*args, **kwargs) else: _destination_name = destination_name trace = MessageTrace(transaction, _library, _operation, _destination_type, _destination_name, params={}) return return_value(trace, lambda: wrapped(*args, **kwargs)) return FunctionWrapper(wrapped, _nr_message_trace_wrapper_)
def ExternalTraceWrapper(wrapped, library, url, method=None): return_value = return_value_fn(wrapped) def dynamic_wrapper(wrapped, instance, args, kwargs): transaction = current_transaction() if transaction is None: return wrapped(*args, **kwargs) if callable(url): if instance is not None: _url = url(instance, *args, **kwargs) else: _url = url(*args, **kwargs) else: _url = url if callable(method): if instance is not None: _method = method(instance, *args, **kwargs) else: _method = method(*args, **kwargs) else: _method = method trace = ExternalTrace(transaction, library, _url, _method) return return_value(trace, lambda: wrapped(*args, **kwargs)) def literal_wrapper(wrapped, instance, args, kwargs): transaction = current_transaction() if transaction is None: return wrapped(*args, **kwargs) trace = ExternalTrace(transaction, library, url, method) return return_value(trace, lambda: wrapped(*args, **kwargs)) if callable(url) or callable(method): return FunctionWrapper(wrapped, dynamic_wrapper) return FunctionWrapper(wrapped, literal_wrapper)
def MemcacheTraceWrapper(wrapped, command): return_value = return_value_fn(wrapped) def _nr_wrapper_memcache_trace_(wrapped, instance, args, kwargs): transaction = current_transaction() if transaction is None: return wrapped(*args, **kwargs) if callable(command): if instance is not None: _command = command(instance, *args, **kwargs) else: _command = command(*args, **kwargs) else: _command = command trace = MemcacheTrace(transaction, _command) return return_value(trace, lambda: wrapped(*args, **kwargs)) return FunctionWrapper(wrapped, _nr_wrapper_memcache_trace_)
def DatabaseTraceWrapper(wrapped, sql, dbapi2_module=None): return_value = return_value_fn(wrapped) def _nr_database_trace_wrapper_(wrapped, instance, args, kwargs): transaction = current_transaction() if transaction is None: return wrapped(*args, **kwargs) if callable(sql): if instance is not None: _sql = sql(instance, *args, **kwargs) else: _sql = sql(*args, **kwargs) else: _sql = sql trace = DatabaseTrace(transaction, _sql, dbapi2_module) return return_value(trace, lambda: wrapped(*args, **kwargs)) return FunctionWrapper(wrapped, _nr_database_trace_wrapper_)
def FunctionTraceWrapper(wrapped, name=None, group=None, label=None, params=None, terminal=False, rollup=None): return_value = return_value_fn(wrapped) def dynamic_wrapper(wrapped, instance, args, kwargs): transaction = current_transaction() if transaction is None: return wrapped(*args, **kwargs) if callable(name): if instance is not None: _name = name(instance, *args, **kwargs) else: _name = name(*args, **kwargs) elif name is None: _name = callable_name(wrapped) else: _name = name if callable(group): if instance is not None: _group = group(instance, *args, **kwargs) else: _group = group(*args, **kwargs) else: _group = group if callable(label): if instance is not None: _label = label(instance, *args, **kwargs) else: _label = label(*args, **kwargs) else: _label = label if callable(params): if instance is not None: _params = params(instance, *args, **kwargs) else: _params = params(*args, **kwargs) else: _params = params trace = FunctionTrace(transaction, _name, _group, _label, _params, terminal, rollup) return return_value(trace, lambda: wrapped(*args, **kwargs)) def literal_wrapper(wrapped, instance, args, kwargs): transaction = current_transaction() if transaction is None: return wrapped(*args, **kwargs) _name = name or callable_name(wrapped) trace = FunctionTrace(transaction, _name, group, label, params, terminal, rollup) return return_value(trace, lambda: wrapped(*args, **kwargs)) if (callable(name) or callable(group) or callable(label) or callable(params)): return FunctionWrapper(wrapped, dynamic_wrapper) return FunctionWrapper(wrapped, literal_wrapper)
def DatastoreTraceWrapper(wrapped, product, target, operation): """Wraps a method to time datastore queries. :param wrapped: The function to apply the trace to. :type wrapped: function :param product: The name of the vendor. :type product: str or callable :param target: The name of the collection or table. If the name is unknown, 'other' should be used. :type target: str or callable :param operation: The name of the datastore operation. This can be the primitive operation type accepted by the datastore itself or the name of any API function/method in the client library. :type operation: str or callable :rtype: :class:`newrelic.common.object_wrapper.FunctionWrapper` This is typically used to wrap datastore queries such as calls to Redis or ElasticSearch. Usage:: >>> import newrelic.agent >>> import time >>> timed_sleep = newrelic.agent.DatastoreTraceWrapper(time.sleep, ... 'time', None, 'sleep') """ return_value = return_value_fn(wrapped) def _nr_datastore_trace_wrapper_(wrapped, instance, args, kwargs): transaction = current_transaction() if transaction is None: return wrapped(*args, **kwargs) if callable(product): if instance is not None: _product = product(instance, *args, **kwargs) else: _product = product(*args, **kwargs) else: _product = product if callable(target): if instance is not None: _target = target(instance, *args, **kwargs) else: _target = target(*args, **kwargs) else: _target = target if callable(operation): if instance is not None: _operation = operation(instance, *args, **kwargs) else: _operation = operation(*args, **kwargs) else: _operation = operation trace = DatastoreTrace(transaction, _product, _target, _operation) return return_value(trace, lambda: wrapped(*args, **kwargs)) return FunctionWrapper(wrapped, _nr_datastore_trace_wrapper_)