def test_pin_find(self): # ensure Pin will find the first available pin # Override service obj_a = self.Obj() pin = Pin(service='service-a') pin.onto(obj_a) # Override service obj_b = self.Obj() pin = Pin(service='service-b') pin.onto(obj_b) # No Pin set obj_c = self.Obj() # We find the first pin (obj_b) pin = Pin._find(obj_c, obj_b, obj_a) assert pin is not None assert pin.service == 'service-b' # We find the first pin (obj_a) pin = Pin._find(obj_a, obj_b, obj_c) assert pin is not None assert pin.service == 'service-a' # We don't find a pin if none is there pin = Pin._find(obj_c, obj_c, obj_c) assert pin is None
def patch_conn(conn): tags = {t: getattr(conn, a) for t, a in CONN_ATTR_BY_TAG.items() if getattr(conn, a, '') != ''} pin = Pin(service='mysql', app='mysql', app_type=AppTypes.db, tags=tags) # grab the metadata from the conn wrapped = TracedConnection(conn, pin=pin) pin.onto(wrapped) return wrapped
def test_pin(self): # ensure a Pin can be attached to an instance obj = self.Obj() pin = Pin(service='metrics') pin.onto(obj) got = Pin.get_from(obj) assert got.service == pin.service assert got is pin
def patch_conn(conn, *args, **kwargs): tags = { t: kwargs[k] if k in kwargs else args[p] for t, (k, p) in KWPOS_BY_TAG.items() if k in kwargs or len(args) > p } tags[net.TARGET_PORT] = conn.port pin = Pin(service='mysql', app='mysql', app_type=AppTypes.db, tags=tags) # grab the metadata from the conn wrapped = TracedConnection(conn, pin=pin) pin.onto(wrapped) return wrapped
def test_pin_does_not_override_global_with_new_instance(self): # ensure that when a `Pin` is created from a class, the specific # instance doesn't override the global one, even if only the # `onto()` API has been used class A(object): pass pin = Pin(service='metrics') pin.onto(A) global_pin = Pin.get_from(A) global_pin._config['distributed_tracing'] = True a = A() pin = Pin.get_from(a) assert pin is not None assert pin._config['distributed_tracing'] is True pin._config['distributed_tracing'] = False assert global_pin._config['distributed_tracing'] is True assert pin._config['distributed_tracing'] is False
def test_analytics_integration_on_using_pin_default(self): """ When making a request When an integration trace search is enabled and sample rate is set We expect the root span to have the appropriate tag """ pin = Pin(service=__name__, app='requests', _config={ 'service_name': __name__, 'distributed_tracing': False, 'split_by_domain': False, 'analytics_enabled': True, }) pin.onto(self.session) self.session.get(URL_200) spans = self.tracer.writer.pop() self.assertEqual(len(spans), 1) s = spans[0] self.assertEqual(s.get_metric(ANALYTICS_SAMPLE_RATE_KEY), 1.0)