示例#1
0
    def test_patch_unpatch(self):
        # Test patch idempotence
        patch()
        patch()

        es = elasticsearch.Elasticsearch(port=ELASTICSEARCH_CONFIG['port'])
        Pin(service=self.TEST_SERVICE, tracer=self.tracer).onto(es.transport)

        # Test index creation
        es.indices.create(index=self.ES_INDEX, ignore=400)

        spans = self.get_spans()
        self.reset()
        assert spans, spans
        assert len(spans) == 1

        # Test unpatch
        self.reset()
        unpatch()

        es = elasticsearch.Elasticsearch(port=ELASTICSEARCH_CONFIG['port'])

        # Test index creation
        es.indices.create(index=self.ES_INDEX, ignore=400)

        spans = self.get_spans()
        self.reset()
        assert not spans, spans

        # Test patch again
        self.reset()
        patch()

        es = elasticsearch.Elasticsearch(port=ELASTICSEARCH_CONFIG['port'])
        Pin(service=self.TEST_SERVICE, tracer=self.tracer).onto(es.transport)

        # Test index creation
        es.indices.create(index=self.ES_INDEX, ignore=400)

        spans = self.get_spans()
        self.reset()
        assert spans, spans
        assert len(spans) == 1
示例#2
0
    def test_patch_unpatch(self):
        tracer = get_dummy_tracer()
        writer = tracer.writer

        # Test patch idempotence
        patch()
        patch()

        es = elasticsearch.Elasticsearch(port=ELASTICSEARCH_CONFIG['port'])
        Pin(service=self.TEST_SERVICE, tracer=tracer).onto(es.transport)

        # Test index creation
        es.indices.create(index=self.ES_INDEX, ignore=400)

        spans = writer.pop()
        assert spans, spans
        eq_(len(spans), 1)

        # Test unpatch
        unpatch()

        es = elasticsearch.Elasticsearch(port=ELASTICSEARCH_CONFIG['port'])

        # Test index creation
        es.indices.create(index=self.ES_INDEX, ignore=400)

        spans = writer.pop()
        assert not spans, spans

        # Test patch again
        patch()

        es = elasticsearch.Elasticsearch(port=ELASTICSEARCH_CONFIG['port'])
        Pin(service=self.TEST_SERVICE, tracer=tracer).onto(es.transport)

        # Test index creation
        es.indices.create(index=self.ES_INDEX, ignore=400)

        spans = writer.pop()
        assert spans, spans
        eq_(len(spans), 1)
示例#3
0
    def setUp(self):
        """Prepare ES"""
        super(ElasticsearchPatchTest, self).setUp()

        es = elasticsearch.Elasticsearch(port=ELASTICSEARCH_CONFIG["port"])
        Pin(service=self.TEST_SERVICE, tracer=self.tracer).onto(es.transport)
        mapping = {"mapping": {"properties": {"created": {"type": "date", "format": "yyyy-MM-dd"}}}}
        es.indices.create(index=self.ES_INDEX, ignore=400, body=mapping)

        patch()

        self.es = es
示例#4
0
    def setUp(self):
        """Prepare ES"""
        super(ElasticsearchPatchTest, self).setUp()

        es = elasticsearch.Elasticsearch(port=ELASTICSEARCH_CONFIG['port'])
        Pin(service=self.TEST_SERVICE, tracer=self.tracer).onto(es.transport)
        mapping = {'mapping': {'properties': {'created': {'type': 'date', 'format': 'yyyy-MM-dd'}}}}
        es.indices.create(index=self.ES_INDEX, ignore=400, body=mapping)

        patch()

        self.es = es
示例#5
0
    def test_elasticsearch_ot(self):
        """Shortened OpenTracing version of test_elasticsearch."""
        tracer = get_dummy_tracer()
        writer = tracer.writer
        ot_tracer = init_tracer("my_svc", tracer)

        transport_class = get_traced_transport(
            datadog_tracer=tracer,
            datadog_service=self.TEST_SERVICE,
        )

        es = elasticsearch.Elasticsearch(transport_class=transport_class,
                                         port=ELASTICSEARCH_CONFIG["port"])

        # Test index creation
        mapping = {
            "mapping": {
                "properties": {
                    "created": {
                        "type": "date",
                        "format": "yyyy-MM-dd"
                    }
                }
            }
        }

        with ot_tracer.start_active_span("ot_span"):
            es.indices.create(index=self.ES_INDEX, ignore=400, body=mapping)

        spans = writer.pop()
        assert spans
        assert len(spans) == 2
        ot_span, dd_span = spans

        # confirm the parenting
        assert ot_span.parent_id is None
        assert dd_span.parent_id == ot_span.span_id

        assert ot_span.service == "my_svc"
        assert ot_span.resource == "ot_span"

        BaseTracerTestCase.assert_is_measured(dd_span)
        assert dd_span.service == self.TEST_SERVICE
        assert dd_span.name == "elasticsearch.query"
        assert dd_span.span_type == "elasticsearch"
        assert dd_span.error == 0
        assert dd_span.get_tag("elasticsearch.method") == "PUT"
        assert dd_span.get_tag("elasticsearch.url") == "/%s" % self.ES_INDEX
        assert dd_span.resource == "PUT /%s" % self.ES_INDEX
示例#6
0
    def test_elasticsearch_ot(self):
        """Shortened OpenTracing version of test_elasticsearch."""
        tracer = get_dummy_tracer()
        writer = tracer.writer
        ot_tracer = init_tracer('my_svc', tracer)

        transport_class = get_traced_transport(
            datadog_tracer=tracer,
            datadog_service=self.TEST_SERVICE,
        )

        es = elasticsearch.Elasticsearch(transport_class=transport_class,
                                         port=ELASTICSEARCH_CONFIG['port'])

        # Test index creation
        mapping = {
            'mapping': {
                'properties': {
                    'created': {
                        'type': 'date',
                        'format': 'yyyy-MM-dd'
                    }
                }
            }
        }

        with ot_tracer.start_active_span('ot_span'):
            es.indices.create(index=self.ES_INDEX, ignore=400, body=mapping)

        spans = writer.pop()
        assert spans
        assert len(spans) == 2
        ot_span, dd_span = spans

        # confirm the parenting
        assert ot_span.parent_id is None
        assert dd_span.parent_id == ot_span.span_id

        assert ot_span.service == 'my_svc'
        assert ot_span.resource == 'ot_span'

        assert_is_measured(dd_span)
        assert dd_span.service == self.TEST_SERVICE
        assert dd_span.name == 'elasticsearch.query'
        assert dd_span.span_type == 'elasticsearch'
        assert dd_span.error == 0
        assert dd_span.get_tag('elasticsearch.method') == 'PUT'
        assert dd_span.get_tag('elasticsearch.url') == '/%s' % self.ES_INDEX
        assert dd_span.resource == 'PUT /%s' % self.ES_INDEX
示例#7
0
    def test_elasticsearch_ot(self):
        """Shortened OpenTracing version of test_elasticsearch."""
        tracer = get_dummy_tracer()
        writer = tracer.writer
        ot_tracer = init_tracer('my_svc', tracer)

        transport_class = get_traced_transport(
            datadog_tracer=tracer, datadog_service=self.TEST_SERVICE)

        es = elasticsearch.Elasticsearch(transport_class=transport_class,
                                         port=ELASTICSEARCH_CONFIG['port'])

        # Test index creation
        mapping = {
            'mapping': {
                'properties': {
                    'created': {
                        'type': 'date',
                        'format': 'yyyy-MM-dd'
                    }
                }
            }
        }

        with ot_tracer.start_active_span('ot_span'):
            es.indices.create(index=self.ES_INDEX, ignore=400, body=mapping)

        spans = writer.pop()
        assert spans
        eq_(len(spans), 2)
        ot_span, dd_span = spans

        # confirm the parenting
        eq_(ot_span.parent_id, None)
        eq_(dd_span.parent_id, ot_span.span_id)

        eq_(ot_span.service, "my_svc")
        eq_(ot_span.resource, "ot_span")

        eq_(dd_span.service, self.TEST_SERVICE)
        eq_(dd_span.name, "elasticsearch.query")
        eq_(dd_span.span_type, "elasticsearch")
        eq_(dd_span.error, 0)
        eq_(dd_span.get_tag('elasticsearch.method'), "PUT")
        eq_(dd_span.get_tag('elasticsearch.url'), "/%s" % self.ES_INDEX)
        eq_(dd_span.resource, "PUT /%s" % self.ES_INDEX)
示例#8
0
    def test_elasticsearch(self):
        """Test the elasticsearch integration

        All in this for now. Will split it later.
        """
        tracer = get_dummy_tracer()
        writer = tracer.writer
        transport_class = get_traced_transport(
                datadog_tracer=tracer,
                datadog_service=self.TEST_SERVICE)

        es = elasticsearch.Elasticsearch(transport_class=transport_class, port=ELASTICSEARCH_CONFIG['port'])

        # Test index creation
        mapping = {"mapping": {"properties": {"created": {"type":"date", "format": "yyyy-MM-dd"}}}}
        es.indices.create(index=self.ES_INDEX, ignore=400, body=mapping)

        spans = writer.pop()
        assert spans
        eq_(len(spans), 1)
        span = spans[0]
        eq_(span.service, self.TEST_SERVICE)
        eq_(span.name, "elasticsearch.query")
        eq_(span.span_type, "elasticsearch")
        eq_(span.error, 0)
        eq_(span.get_tag('elasticsearch.method'), "PUT")
        eq_(span.get_tag('elasticsearch.url'), "/%s" % self.ES_INDEX)
        eq_(span.resource, "PUT /%s" % self.ES_INDEX)

        # Put data
        args = {'index':self.ES_INDEX, 'doc_type':self.ES_TYPE}
        es.index(id=10, body={'name': 'ten', 'created': datetime.date(2016, 1, 1)}, **args)
        es.index(id=11, body={'name': 'eleven', 'created': datetime.date(2016, 2, 1)}, **args)
        es.index(id=12, body={'name': 'twelve', 'created': datetime.date(2016, 3, 1)}, **args)

        spans = writer.pop()
        assert spans
        eq_(len(spans), 3)
        span = spans[0]
        eq_(span.error, 0)
        eq_(span.get_tag('elasticsearch.method'), "PUT")
        eq_(span.get_tag('elasticsearch.url'), "/%s/%s/%s" % (self.ES_INDEX, self.ES_TYPE, 10))
        eq_(span.resource, "PUT /%s/%s/?" % (self.ES_INDEX, self.ES_TYPE))

        # Make the data available
        es.indices.refresh(index=self.ES_INDEX)

        spans = writer.pop()
        assert spans, spans
        eq_(len(spans), 1)
        span = spans[0]
        eq_(span.resource, "POST /%s/_refresh" % self.ES_INDEX)
        eq_(span.get_tag('elasticsearch.method'), "POST")
        eq_(span.get_tag('elasticsearch.url'), "/%s/_refresh" % self.ES_INDEX)

        # Search data
        result = es.search(sort=['name:desc'], size=100,
                body={"query":{"match_all":{}}}, **args)

        assert len(result["hits"]["hits"]) == 3, result

        spans = writer.pop()
        assert spans
        eq_(len(spans), 1)
        span = spans[0]
        eq_(span.resource,
                "GET /%s/%s/_search" % (self.ES_INDEX, self.ES_TYPE))
        eq_(span.get_tag('elasticsearch.method'), "GET")
        eq_(span.get_tag('elasticsearch.url'),
                "/%s/%s/_search" % (self.ES_INDEX, self.ES_TYPE))
        eq_(span.get_tag('elasticsearch.body').replace(" ", ""), '{"query":{"match_all":{}}}')
        eq_(set(span.get_tag('elasticsearch.params').split('&')), {'sort=name%3Adesc', 'size=100'})

        self.assertTrue(span.get_metric('elasticsearch.took') > 0)

        # Search by type not supported by default json encoder
        query = {"range": {"created": {"gte": datetime.date(2016, 2, 1)}}}
        result = es.search(size=100, body={"query": query}, **args)

        assert len(result["hits"]["hits"]) == 2, result

        # Raise error 404 with a non existent index
        writer.pop()
        try:
            es.get(index="non_existent_index", id=100, doc_type="_all")
            eq_("error_not_raised", "elasticsearch.exceptions.TransportError")
        except elasticsearch.exceptions.TransportError as e:
            spans = writer.pop()
            assert spans
            span = spans[0]
            eq_(span.get_tag(http.STATUS_CODE), u'404')

        # Raise error 400, the index 10 is created twice
        try:
            es.indices.create(index=10)
            es.indices.create(index=10)
            eq_("error_not_raised", "elasticsearch.exceptions.TransportError")
        except elasticsearch.exceptions.TransportError as e:
            spans = writer.pop()
            assert spans
            span = spans[-1]
            eq_(span.get_tag(http.STATUS_CODE), u'400')

        # Drop the index, checking it won't raise exception on success or failure
        es.indices.delete(index=self.ES_INDEX, ignore=[400, 404])
        es.indices.delete(index=self.ES_INDEX, ignore=[400, 404])
示例#9
0
 def tearDown(self):
     """Clean ES"""
     es = elasticsearch.Elasticsearch(port=ELASTICSEARCH_CONFIG['port'])
     es.indices.delete(index=self.ES_INDEX, ignore=[400, 404])
示例#10
0
 def setUp(self):
     """Prepare ES"""
     es = elasticsearch.Elasticsearch(port=ELASTICSEARCH_CONFIG['port'])
     es.indices.delete(index=self.ES_INDEX, ignore=[400, 404])
示例#11
0
    def test_elasticsearch(self):
        """Test the elasticsearch integration

        All in this for now. Will split it later.
        """
        tracer = get_dummy_tracer()
        writer = tracer.writer
        transport_class = get_traced_transport(
            datadog_tracer=tracer, datadog_service=self.TEST_SERVICE)

        es = elasticsearch.Elasticsearch(transport_class=transport_class,
                                         port=ELASTICSEARCH_CONFIG['port'])

        # Test index creation
        mapping = {
            'mapping': {
                'properties': {
                    'created': {
                        'type': 'date',
                        'format': 'yyyy-MM-dd'
                    }
                }
            }
        }
        es.indices.create(index=self.ES_INDEX, ignore=400, body=mapping)

        spans = writer.pop()
        assert spans
        assert len(spans) == 1
        span = spans[0]
        assert span.service == self.TEST_SERVICE
        assert span.name == 'elasticsearch.query'
        assert span.span_type == 'elasticsearch'
        assert span.error == 0
        assert span.get_tag('elasticsearch.method') == 'PUT'
        assert span.get_tag('elasticsearch.url') == '/%s' % self.ES_INDEX
        assert span.resource == 'PUT /%s' % self.ES_INDEX

        # Put data
        args = {'index': self.ES_INDEX, 'doc_type': self.ES_TYPE}
        es.index(id=10,
                 body={
                     'name': 'ten',
                     'created': datetime.date(2016, 1, 1)
                 },
                 **args)
        es.index(id=11,
                 body={
                     'name': 'eleven',
                     'created': datetime.date(2016, 2, 1)
                 },
                 **args)
        es.index(id=12,
                 body={
                     'name': 'twelve',
                     'created': datetime.date(2016, 3, 1)
                 },
                 **args)

        spans = writer.pop()
        assert spans
        assert len(spans) == 3
        span = spans[0]
        assert span.error == 0
        assert span.get_tag('elasticsearch.method') == 'PUT'
        assert span.get_tag('elasticsearch.url') == '/%s/%s/%s' % (
            self.ES_INDEX, self.ES_TYPE, 10)
        assert span.resource == 'PUT /%s/%s/?' % (self.ES_INDEX, self.ES_TYPE)

        # Make the data available
        es.indices.refresh(index=self.ES_INDEX)

        spans = writer.pop()
        assert spans, spans
        assert len(spans) == 1
        span = spans[0]
        assert span.resource == 'POST /%s/_refresh' % self.ES_INDEX
        assert span.get_tag('elasticsearch.method') == 'POST'
        assert span.get_tag(
            'elasticsearch.url') == '/%s/_refresh' % self.ES_INDEX

        # Search data
        result = es.search(sort=['name:desc'],
                           size=100,
                           body={'query': {
                               'match_all': {}
                           }},
                           **args)

        assert len(result['hits']['hits']) == 3, result

        spans = writer.pop()
        assert spans
        assert len(spans) == 1
        span = spans[0]
        assert span.resource == 'GET /%s/%s/_search' % (self.ES_INDEX,
                                                        self.ES_TYPE)
        assert span.get_tag('elasticsearch.method') == 'GET'
        assert span.get_tag('elasticsearch.url') == '/%s/%s/_search' % (
            self.ES_INDEX, self.ES_TYPE)

        assert span.get_tag('elasticsearch.body').replace(
            ' ', '') == '{"query":{"match_all":{}}}'
        assert set(span.get_tag('elasticsearch.params').split('&')) == {
            'sort=name%3Adesc', 'size=100'
        }

        self.assertTrue(span.get_metric('elasticsearch.took') > 0)

        # Search by type not supported by default json encoder
        query = {'range': {'created': {'gte': datetime.date(2016, 2, 1)}}}
        result = es.search(size=100, body={'query': query}, **args)

        assert len(result['hits']['hits']) == 2, result

        # Raise error 404 with a non existent index
        writer.pop()
        try:
            es.get(index='non_existent_index', id=100, doc_type='_all')
            assert 'error_not_raised' == 'elasticsearch.exceptions.TransportError'
        except elasticsearch.exceptions.TransportError:
            spans = writer.pop()
            assert spans
            span = spans[0]
            assert span.get_tag(http.STATUS_CODE) == u'404'

        # Raise error 400, the index 10 is created twice
        try:
            es.indices.create(index=10)
            es.indices.create(index=10)
            assert 'error_not_raised' == 'elasticsearch.exceptions.TransportError'
        except elasticsearch.exceptions.TransportError:
            spans = writer.pop()
            assert spans
            span = spans[-1]
            assert span.get_tag(http.STATUS_CODE) == u'400'

        # Drop the index, checking it won't raise exception on success or failure
        es.indices.delete(index=self.ES_INDEX, ignore=[400, 404])
        es.indices.delete(index=self.ES_INDEX, ignore=[400, 404])
示例#12
0
    def test_elasticsearch(self):
        """Test the elasticsearch integration

        All in this for now. Will split it later.
        """
        tracer = get_dummy_tracer()
        writer = tracer.writer
        transport_class = get_traced_transport(
            datadog_tracer=tracer,
            datadog_service=self.TEST_SERVICE,
        )

        es = elasticsearch.Elasticsearch(transport_class=transport_class,
                                         port=ELASTICSEARCH_CONFIG["port"])

        # Test index creation
        mapping = {
            "mapping": {
                "properties": {
                    "created": {
                        "type": "date",
                        "format": "yyyy-MM-dd"
                    }
                }
            }
        }
        es.indices.create(index=self.ES_INDEX, ignore=400, body=mapping)

        spans = writer.pop()
        assert spans
        assert len(spans) == 1
        span = spans[0]

        BaseTracerTestCase.assert_is_measured(span)
        assert span.service == self.TEST_SERVICE
        assert span.name == "elasticsearch.query"
        assert span.span_type == "elasticsearch"
        assert span.error == 0
        assert span.get_tag("elasticsearch.method") == "PUT"
        assert span.get_tag("elasticsearch.url") == "/%s" % self.ES_INDEX
        assert span.resource == "PUT /%s" % self.ES_INDEX

        # Put data
        args = {"index": self.ES_INDEX, "doc_type": self.ES_TYPE}
        es.index(id=10,
                 body={
                     "name": "ten",
                     "created": datetime.date(2016, 1, 1)
                 },
                 **args)
        es.index(id=11,
                 body={
                     "name": "eleven",
                     "created": datetime.date(2016, 2, 1)
                 },
                 **args)
        es.index(id=12,
                 body={
                     "name": "twelve",
                     "created": datetime.date(2016, 3, 1)
                 },
                 **args)

        spans = writer.pop()
        assert spans
        assert len(spans) == 3
        span = spans[0]
        BaseTracerTestCase.assert_is_measured(span)
        assert span.error == 0
        assert span.get_tag("elasticsearch.method") == "PUT"
        assert span.get_tag("elasticsearch.url") == "/%s/%s/%s" % (
            self.ES_INDEX, self.ES_TYPE, 10)
        assert span.resource == "PUT /%s/%s/?" % (self.ES_INDEX, self.ES_TYPE)

        # Make the data available
        es.indices.refresh(index=self.ES_INDEX)

        spans = writer.pop()
        assert spans, spans
        assert len(spans) == 1
        span = spans[0]
        BaseTracerTestCase.assert_is_measured(span)
        assert span.resource == "POST /%s/_refresh" % self.ES_INDEX
        assert span.get_tag("elasticsearch.method") == "POST"
        assert span.get_tag(
            "elasticsearch.url") == "/%s/_refresh" % self.ES_INDEX

        # Search data
        result = es.search(sort=["name:desc"],
                           size=100,
                           body={"query": {
                               "match_all": {}
                           }},
                           **args)

        assert len(result["hits"]["hits"]) == 3, result

        spans = writer.pop()
        assert spans
        assert len(spans) == 1
        span = spans[0]
        BaseTracerTestCase.assert_is_measured(span)
        assert span.resource == "GET /%s/%s/_search" % (self.ES_INDEX,
                                                        self.ES_TYPE)
        assert span.get_tag("elasticsearch.method") == "GET"
        assert span.get_tag("elasticsearch.url") == "/%s/%s/_search" % (
            self.ES_INDEX, self.ES_TYPE)

        assert span.get_tag("elasticsearch.body").replace(
            " ", "") == '{"query":{"match_all":{}}}'
        assert set(span.get_tag("elasticsearch.params").split("&")) == {
            "sort=name%3Adesc", "size=100"
        }
        assert http.QUERY_STRING not in span.meta

        self.assertTrue(span.get_metric("elasticsearch.took") > 0)

        # Search by type not supported by default json encoder
        query = {"range": {"created": {"gte": datetime.date(2016, 2, 1)}}}
        result = es.search(size=100, body={"query": query}, **args)

        assert len(result["hits"]["hits"]) == 2, result

        # Raise error 404 with a non existent index
        writer.pop()
        try:
            es.get(index="non_existent_index", id=100, doc_type="_all")
            assert "error_not_raised" == "elasticsearch.exceptions.TransportError"
        except elasticsearch.exceptions.TransportError:
            spans = writer.pop()
            assert spans
            span = spans[0]
            BaseTracerTestCase.assert_is_measured(span)
            assert_span_http_status_code(span, 404)

        # Raise error 400, the index 10 is created twice
        try:
            es.indices.create(index=10)
            es.indices.create(index=10)
            assert "error_not_raised" == "elasticsearch.exceptions.TransportError"
        except elasticsearch.exceptions.TransportError:
            spans = writer.pop()
            assert spans
            span = spans[-1]
            BaseTracerTestCase.assert_is_measured(span)
            assert_span_http_status_code(span, 400)

        # Drop the index, checking it won't raise exception on success or failure
        es.indices.delete(index=self.ES_INDEX, ignore=[400, 404])
        es.indices.delete(index=self.ES_INDEX, ignore=[400, 404])
示例#13
0
    def test_elasticsearch(self):
        """Test the elasticsearch integration

        All in this for now. Will split it later.
        """
        """Test the elasticsearch integration with patching

        """
        es = elasticsearch.Elasticsearch(port=ELASTICSEARCH_CONFIG['port'])

        tracer = get_dummy_tracer()
        writer = tracer.writer
        Pin(service=self.TEST_SERVICE, tracer=tracer).onto(es.transport)

        # Test index creation
        mapping = {'mapping': {'properties': {'created': {'type': 'date', 'format': 'yyyy-MM-dd'}}}}
        es.indices.create(index=self.ES_INDEX, ignore=400, body=mapping)

        spans = writer.pop()
        assert spans, spans
        eq_(len(spans), 1)
        span = spans[0]
        eq_(span.service, self.TEST_SERVICE)
        eq_(span.name, "elasticsearch.query")
        eq_(span.span_type, "elasticsearch")
        eq_(span.error, 0)
        eq_(span.get_tag('elasticsearch.method'), "PUT")
        eq_(span.get_tag('elasticsearch.url'), "/%s" % self.ES_INDEX)
        eq_(span.resource, "PUT /%s" % self.ES_INDEX)

        # Put data
        args = {'index': self.ES_INDEX, 'doc_type': self.ES_TYPE}
        es.index(id=10, body={'name': 'ten', 'created': datetime.date(2016, 1, 1)}, **args)
        es.index(id=11, body={'name': 'eleven', 'created': datetime.date(2016, 2, 1)}, **args)
        es.index(id=12, body={'name': 'twelve', 'created': datetime.date(2016, 3, 1)}, **args)

        spans = writer.pop()
        assert spans, spans
        eq_(len(spans), 3)
        span = spans[0]
        eq_(span.error, 0)
        eq_(span.get_tag('elasticsearch.method'), "PUT")
        eq_(span.get_tag('elasticsearch.url'), "/%s/%s/%s" % (self.ES_INDEX, self.ES_TYPE, 10))
        eq_(span.resource, "PUT /%s/%s/?" % (self.ES_INDEX, self.ES_TYPE))

        # Make the data available
        es.indices.refresh(index=self.ES_INDEX)

        spans = writer.pop()
        assert spans, spans
        eq_(len(spans), 1)
        span = spans[0]
        eq_(span.resource, "POST /%s/_refresh" % self.ES_INDEX)
        eq_(span.get_tag('elasticsearch.method'), "POST")
        eq_(span.get_tag('elasticsearch.url'), "/%s/_refresh" % self.ES_INDEX)

        # Search data
        result = es.search(
            sort=['name:desc'],
            size=100,
            body={'query': {'match_all': {}}},
            **args
        )

        assert len(result["hits"]["hits"]) == 3, result

        spans = writer.pop()
        assert spans, spans
        eq_(len(spans), 1)
        span = spans[0]
        eq_(span.resource,
            "GET /%s/%s/_search" % (self.ES_INDEX, self.ES_TYPE))
        eq_(span.get_tag('elasticsearch.method'), "GET")
        eq_(span.get_tag('elasticsearch.url'),
            "/%s/%s/_search" % (self.ES_INDEX, self.ES_TYPE))
        eq_(span.get_tag('elasticsearch.body').replace(" ", ""), '{"query":{"match_all":{}}}')
        eq_(set(span.get_tag('elasticsearch.params').split('&')), {'sort=name%3Adesc', 'size=100'})

        self.assertTrue(span.get_metric('elasticsearch.took') > 0)

        # Search by type not supported by default json encoder
        query = {"range": {"created": {"gte": datetime.date(2016, 2, 1)}}}
        result = es.search(size=100, body={"query": query}, **args)

        assert len(result["hits"]["hits"]) == 2, result

        # Drop the index, checking it won't raise exception on success or failure
        es.indices.delete(index=self.ES_INDEX, ignore=[400, 404])
        es.indices.delete(index=self.ES_INDEX, ignore=[400, 404])