def uninstrument(): elasticsearch = utils.get_module('elasticsearch') if not utils.is_instrumented(elasticsearch): return from elasticsearch_opentracing import disable_tracing, TracingTransport disable_tracing() # because of https://bugs.python.org/issue25731 we cannot simply restore # built-in __new__. Use a generic implementation as a workaround def __new__(cls, *_, **__): return object.__new__(cls) if _tracing_transport_new[0] is not None: if hasattr(_tracing_transport_new[0], '__get__'): TracingTransport.__new__ = _tracing_transport_new[0].__get__( TracingTransport) else: # builtin doesn't follow descriptor protocol TracingTransport.__new__ = __new__.__get__(TracingTransport) _tracing_transport_new[0] = None if _transport_new[0] is not None: if hasattr(_transport_new[0], '__get__'): elasticsearch.transport.Transport.__new__ = _transport_new[ 0].__get__(elasticsearch.transport.Transport) else: elasticsearch.transport.Transport.__new__ = __new__.__get__( elasticsearch.transport.Transport) _transport_new[0] = None utils.mark_uninstrumented(elasticsearch)
def target2(): ev.wait() enable_tracing() self.es.get(index='test-index', doc_type='tweet', id=2) ev.set() disable_tracing()
def target1(): set_active_span(DummySpan()) enable_tracing() self.es.get(index='test-index', doc_type='tweet', id=1) ev.set() ev.wait() disable_tracing()
def test_disable_tracing(self, mock_perform_req): init_tracing(self.tracer, trace_all_requests=False) enable_tracing() disable_tracing() self.assertEqual(0, len(self.tracer.spans)) self.es.get(index='test-index', doc_type='tweet', id=1) self.assertEqual(0, len(self.tracer.spans)) disable_tracing() # shouldn't cause a problem
def test_trace_all_requests(self, mock_perform_req): init_tracing(self.tracer) for i in range(3): self.es.get(index='test-index', doc_type='tweet', id=i) self.assertEqual(3, len(self.tracer.spans)) self.assertTrue(all(map(lambda x: x.is_finished, self.tracer.spans))) enable_tracing() disable_tracing() # Shouldnt prevent further tracing self.es.get(index='test-index', doc_type='tweet', id=4) self.assertEqual(4, len(self.tracer.spans)) self.assertTrue(all(map(lambda x: x.is_finished, self.tracer.spans))) self.assertTrue(all(map(lambda x: x.child_of is None, self.tracer.spans)))
def test_disable_tracing_span(self, mock_perform_req): init_tracing(self.tracer, trace_all_requests=False) main_span = DummySpan() set_active_span(main_span) # Make sure the active span was preserved enable_tracing() disable_tracing() self.assertEqual(main_span, get_active_span()) # Make sure it was preserved, by tracing. enable_tracing() self.es.get(index='test-index', doc_type='tweet', id=1) self.assertEqual(1, len(self.tracer.spans)) self.assertEqual(main_span, self.tracer.spans[0].child_of)
if __name__ == '__main__': elasticsearch_opentracing.init_tracing(tracer, trace_all_requests=False) es = Elasticsearch( '127.0.0.1', transport_class=elasticsearch_opentracing.TracingTransport) # We want to trace only the creation of the document, not the # index creation not checking the document was actually created. with tracer.start_span('main span') as main_span: elasticsearch_opentracing.set_active_span(main_span) es.indices.create('test-index', ignore=400) doc = { 'author': 'john', 'text': 'Find me if you can', 'timestamp': datetime.now(), } elasticsearch_opentracing.enable_tracing() es.index(index='test-index', doc_type='tweet', id=1, body=doc) # Traced elasticsearch_opentracing.disable_tracing() res = es.get(index='test-index', doc_type='tweet', id=1) # Not traced print(res['_source']) elasticsearch_opentracing.clear_active_span()