def __init__(self, client=None, *args, **kwargs): # To support the former trace_mongo_client interface, we have to keep this old interface # TODO(Benjamin): drop it in a later version if not isinstance(client, _MongoClient): # Patched interface, instantiate the client # client is just the first arg which could be the host if it is # None, then it could be that the caller: # if client is None then __init__ was: # 1) invoked with host=None # 2) not given a first argument (client defaults to None) # we cannot tell which case it is, but it should not matter since # the default value for host is None, in either case we can simply # not provide it as an argument if client is None: client = _MongoClient(*args, **kwargs) # else client is a value for host so just pass it along else: client = _MongoClient(client, *args, **kwargs) super(TracedMongoClient, self).__init__(client) # NOTE[matt] the TracedMongoClient attempts to trace all of the network # calls in the trace library. This is good because it measures the # actual network time. It's bad because it uses a private API which # could change. We'll see how this goes. client._topology = TracedTopology(client._topology) # Default Pin ddtrace.Pin(service=mongox.SERVICE, app=mongox.SERVICE).onto(self)
def __init__(self, client=None, service=memcached.SERVICE, tracer=None, *args, **kwargs): """ Create a traced client that wraps the given memcached client. """ # The client instance/service/tracer attributes are kept for compatibility # with the old interface: TracedClient(client=pylibmc.Client(['localhost:11211'])) # TODO(Benjamin): Remove these in favor of patching. if not isinstance(client, _Client): # We are in the patched situation, just pass down all arguments to the pylibmc.Client # Note that, in that case, client isn't a real client (just the first argument) client = _Client(client, *args, **kwargs) else: log.warning( 'TracedClient instantiation is deprecated and will be remove ' 'in future versions (0.6.0). Use patching instead (see the docs).' ) super(TracedClient, self).__init__(client) pin = ddtrace.Pin(service=service, tracer=tracer) pin.onto(self) # attempt to collect the pool of urls this client talks to try: self._addresses = parse_addresses(client.addresses) except Exception: log.debug('error setting addresses', exc_info=True)
def trace_mongo_client(client, tracer, service=mongox.TYPE): tracer.set_service_info( service=service, app=mongox.TYPE, app_type=AppTypes.db, ) traced_client = TracedMongoClient(client) ddtrace.Pin(service=service, tracer=tracer).onto(traced_client) return traced_client
def tracer_config(__init__, app, args, kwargs): """ Wrap Tornado web application so that we can configure services info and tracing settings after the initialization. """ # call the Application constructor __init__(*args, **kwargs) # default settings settings = { 'tracer': ddtrace.tracer, 'default_service': 'tornado-web', 'distributed_tracing': False, } # update defaults with users settings user_settings = app.settings.get(CONFIG_KEY) if user_settings: settings.update(user_settings) app.settings[CONFIG_KEY] = settings tracer = settings['tracer'] service = settings['default_service'] # extract extra settings extra_settings = settings.get('settings', {}) # the tracer must use the right Context propagation and wrap executor; # this action is done twice because the patch() method uses the # global tracer while here we can have a different instance (even if # this is not usual). tracer.configure( context_provider=context_provider, wrap_executor=decorators.wrap_executor, enabled=settings.get('enabled', None), hostname=settings.get('agent_hostname', None), port=settings.get('agent_port', None), settings=extra_settings, ) # set global tags if any tags = settings.get('tags', None) if tags: tracer.set_tags(tags) # configure the current service tracer.set_service_info( service=service, app='tornado', app_type=AppTypes.web, ) # configure the PIN object for template rendering ddtrace.Pin(app='tornado', service=service, app_type='web', tracer=tracer).onto(template)
def __call__(self, *args, **kwargs): client = self.__wrapped__(*args, **kwargs) pin = ddtrace.Pin.get_from(self) if pin: # mongoengine uses pymongo internally, so we can just piggyback on the # existing pymongo integration and make sure that the connections it # uses internally are traced. client = TracedMongoClient(client) ddtrace.Pin(service=pin.service, tracer=pin.tracer).onto(client) return client
def tracer_config(__init__, app, args, kwargs): """ Wrap Tornado web application so that we can configure services info and tracing settings after the initialization. """ # call the Application constructor __init__(*args, **kwargs) # default settings settings = { "tracer": ddtrace.tracer, "default_service": config._get_service("tornado-web"), "distributed_tracing": None, "analytics_enabled": None, } # update defaults with users settings user_settings = app.settings.get(CONFIG_KEY) if user_settings: settings.update(user_settings) app.settings[CONFIG_KEY] = settings tracer = settings["tracer"] service = settings["default_service"] # extract extra settings extra_settings = settings.get("settings", {}) # the tracer must use the right Context propagation and wrap executor; # this action is done twice because the patch() method uses the # global tracer while here we can have a different instance (even if # this is not usual). tracer.configure( context_provider=context_provider, wrap_executor=decorators.wrap_executor, enabled=settings.get("enabled", None), hostname=settings.get("agent_hostname", None), port=settings.get("agent_port", None), settings=extra_settings, ) # set global tags if any tags = settings.get("tags", None) if tags: tracer.set_tags(tags) # configure the PIN object for template rendering ddtrace.Pin(service=service, tracer=tracer).onto(template)
def __init__(self, client=None, *args, **kwargs): # To support the former trace_mongo_client interface, we have to keep this old interface # TODO(Benjamin): drop it in a later version if not isinstance(client, _MongoClient): # Patched interface, instanciate the client # Note that, in that case, the client argument isn't a client, it's just the first arg client = _MongoClient(client, *args, **kwargs) super(TracedMongoClient, self).__init__(client) # Default Pin ddtrace.Pin(service=mongox.TYPE).onto(self) # NOTE[matt] the TracedMongoClient attempts to trace all of the network # calls in the trace library. This is good because it measures the # actual network time. It's bad because it uses a private API which # could change. We'll see how this goes. client._topology = TracedTopology(client._topology)
def trace_mongo_client(client, tracer, service=mongox.SERVICE): traced_client = TracedMongoClient(client) ddtrace.Pin(service=service, tracer=tracer).onto(traced_client) return traced_client
def __init__(self, connect): super(WrappedConnect, self).__init__(connect) ddtrace.Pin(service=mongox.SERVICE, tracer=ddtrace.tracer).onto(self)