mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-08-01 17:34:38 +08:00
Merge branch 'master' into usage
This commit is contained in:
@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
|
- Update pymemcache instrumentation to follow semantic conventions
|
||||||
|
([#183](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/183))
|
||||||
|
|
||||||
## Version 0.13b0
|
## Version 0.13b0
|
||||||
|
|
||||||
Released 2020-09-17
|
Released 2020-09-17
|
||||||
|
@ -54,14 +54,13 @@ logger = logging.getLogger(__name__)
|
|||||||
# https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/span-general.md#general-network-connection-attributes
|
# https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/span-general.md#general-network-connection-attributes
|
||||||
_HOST = "net.peer.name"
|
_HOST = "net.peer.name"
|
||||||
_PORT = "net.peer.port"
|
_PORT = "net.peer.port"
|
||||||
|
_TRANSPORT = "net.transport"
|
||||||
# Database semantic conventions here:
|
# Database semantic conventions here:
|
||||||
# https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/database.md
|
# https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/database.md
|
||||||
_DB = "db.type"
|
_DB = "db.system"
|
||||||
_URL = "db.url"
|
|
||||||
|
|
||||||
_DEFAULT_SERVICE = "memcached"
|
_DEFAULT_SERVICE = "memcached"
|
||||||
_RAWCMD = "db.statement"
|
_RAWCMD = "db.statement"
|
||||||
_CMD = "memcached.command"
|
|
||||||
COMMANDS = [
|
COMMANDS = [
|
||||||
"set",
|
"set",
|
||||||
"set_many",
|
"set_many",
|
||||||
@ -114,7 +113,7 @@ def _with_tracer_wrapper(func):
|
|||||||
@_with_tracer_wrapper
|
@_with_tracer_wrapper
|
||||||
def _wrap_cmd(tracer, cmd, wrapped, instance, args, kwargs):
|
def _wrap_cmd(tracer, cmd, wrapped, instance, args, kwargs):
|
||||||
with tracer.start_as_current_span(
|
with tracer.start_as_current_span(
|
||||||
_CMD, kind=SpanKind.INTERNAL, attributes={}
|
cmd, kind=SpanKind.CLIENT, attributes={}
|
||||||
) as span:
|
) as span:
|
||||||
try:
|
try:
|
||||||
if span.is_recording():
|
if span.is_recording():
|
||||||
@ -172,9 +171,10 @@ def _get_address_attributes(instance):
|
|||||||
host, port = instance.server
|
host, port = instance.server
|
||||||
address_attributes[_HOST] = host
|
address_attributes[_HOST] = host
|
||||||
address_attributes[_PORT] = port
|
address_attributes[_PORT] = port
|
||||||
address_attributes[_URL] = "memcached://{}:{}".format(host, port)
|
address_attributes[_TRANSPORT] = "IP.TCP"
|
||||||
elif isinstance(instance.server, str):
|
elif isinstance(instance.server, str):
|
||||||
address_attributes[_URL] = "memcached://{}".format(instance.server)
|
address_attributes[_HOST] = instance.server
|
||||||
|
address_attributes[_TRANSPORT] = "Unix"
|
||||||
|
|
||||||
return address_attributes
|
return address_attributes
|
||||||
|
|
||||||
|
@ -62,17 +62,12 @@ class PymemcacheClientTestCase(
|
|||||||
self.assertEqual(num_expected, len(spans))
|
self.assertEqual(num_expected, len(spans))
|
||||||
|
|
||||||
for span, query in zip(spans, queries_expected):
|
for span, query in zip(spans, queries_expected):
|
||||||
self.assertEqual(span.name, "memcached.command")
|
command, *_ = query.split(" ")
|
||||||
self.assertIs(span.kind, trace_api.SpanKind.INTERNAL)
|
self.assertEqual(span.name, command)
|
||||||
self.assertEqual(
|
self.assertIs(span.kind, trace_api.SpanKind.CLIENT)
|
||||||
span.attributes["net.peer.name"], "{}".format(TEST_HOST)
|
self.assertEqual(span.attributes["net.peer.name"], TEST_HOST)
|
||||||
)
|
|
||||||
self.assertEqual(span.attributes["net.peer.port"], TEST_PORT)
|
self.assertEqual(span.attributes["net.peer.port"], TEST_PORT)
|
||||||
self.assertEqual(span.attributes["db.type"], "memcached")
|
self.assertEqual(span.attributes["db.system"], "memcached")
|
||||||
self.assertEqual(
|
|
||||||
span.attributes["db.url"],
|
|
||||||
"memcached://{}:{}".format(TEST_HOST, TEST_PORT),
|
|
||||||
)
|
|
||||||
self.assertEqual(span.attributes["db.statement"], query)
|
self.assertEqual(span.attributes["db.statement"], query)
|
||||||
|
|
||||||
def test_set_success(self):
|
def test_set_success(self):
|
||||||
@ -214,10 +209,8 @@ class PymemcacheClientTestCase(
|
|||||||
spans = self.memory_exporter.get_finished_spans()
|
spans = self.memory_exporter.get_finished_spans()
|
||||||
|
|
||||||
self.assertEqual(len(spans), 2)
|
self.assertEqual(len(spans), 2)
|
||||||
self.assertEqual(
|
self.assertEqual(spans[0].attributes["net.peer.name"], TEST_HOST)
|
||||||
spans[0].attributes["db.url"],
|
self.assertEqual(spans[0].attributes["net.peer.port"], TEST_PORT)
|
||||||
"memcached://{}:{}".format(TEST_HOST, TEST_PORT),
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_append_stored(self):
|
def test_append_stored(self):
|
||||||
client = self.make_client([b"STORED\r\n"])
|
client = self.make_client([b"STORED\r\n"])
|
||||||
@ -517,17 +510,12 @@ class PymemcacheHashClientTestCase(TestBase):
|
|||||||
self.assertEqual(num_expected, len(spans))
|
self.assertEqual(num_expected, len(spans))
|
||||||
|
|
||||||
for span, query in zip(spans, queries_expected):
|
for span, query in zip(spans, queries_expected):
|
||||||
self.assertEqual(span.name, "memcached.command")
|
command, *_ = query.split(" ")
|
||||||
self.assertIs(span.kind, trace_api.SpanKind.INTERNAL)
|
self.assertEqual(span.name, command)
|
||||||
self.assertEqual(
|
self.assertIs(span.kind, trace_api.SpanKind.CLIENT)
|
||||||
span.attributes["net.peer.name"], "{}".format(TEST_HOST)
|
self.assertEqual(span.attributes["net.peer.name"], TEST_HOST)
|
||||||
)
|
|
||||||
self.assertEqual(span.attributes["net.peer.port"], TEST_PORT)
|
self.assertEqual(span.attributes["net.peer.port"], TEST_PORT)
|
||||||
self.assertEqual(span.attributes["db.type"], "memcached")
|
self.assertEqual(span.attributes["db.system"], "memcached")
|
||||||
self.assertEqual(
|
|
||||||
span.attributes["db.url"],
|
|
||||||
"memcached://{}:{}".format(TEST_HOST, TEST_PORT),
|
|
||||||
)
|
|
||||||
self.assertEqual(span.attributes["db.statement"], query)
|
self.assertEqual(span.attributes["db.statement"], query)
|
||||||
|
|
||||||
def test_delete_many_found(self):
|
def test_delete_many_found(self):
|
||||||
|
Reference in New Issue
Block a user