コード例 #1
0
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)
コード例 #2
0
        def target2():
            ev.wait()

            enable_tracing()
            self.es.get(index='test-index', doc_type='tweet', id=2)

            ev.set()
            disable_tracing()
コード例 #3
0
        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()
コード例 #4
0
    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
コード例 #5
0
    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)))
コード例 #6
0
    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)
コード例 #7
0
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()