Merge branch 'master' into redis-semantic-conv

This commit is contained in:
Leighton Chen
2020-11-17 09:50:25 -05:00
committed by GitHub
3 changed files with 21 additions and 30 deletions

View File

@ -2,6 +2,9 @@
## Unreleased
- Update pymemcache instrumentation to follow semantic conventions
([#183](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/183))
## Version 0.13b0
Released 2020-09-17

View File

@ -55,14 +55,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
_HOST = "net.peer.name"
_PORT = "net.peer.port"
_TRANSPORT = "net.transport"
# Database semantic conventions here:
# https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/database.md
_DB = "db.type"
_URL = "db.url"
_DB = "db.system"
_DEFAULT_SERVICE = "memcached"
_RAWCMD = "db.statement"
_CMD = "memcached.command"
COMMANDS = [
"set",
"set_many",
@ -115,7 +114,7 @@ def _with_tracer_wrapper(func):
@_with_tracer_wrapper
def _wrap_cmd(tracer, cmd, wrapped, instance, args, kwargs):
with tracer.start_as_current_span(
_CMD, kind=SpanKind.INTERNAL, attributes={}
cmd, kind=SpanKind.CLIENT, attributes={}
) as span:
try:
if span.is_recording():
@ -173,9 +172,10 @@ def _get_address_attributes(instance):
host, port = instance.server
address_attributes[_HOST] = host
address_attributes[_PORT] = port
address_attributes[_URL] = "memcached://{}:{}".format(host, port)
address_attributes[_TRANSPORT] = "IP.TCP"
elif isinstance(instance.server, str):
address_attributes[_URL] = "memcached://{}".format(instance.server)
address_attributes[_HOST] = instance.server
address_attributes[_TRANSPORT] = "Unix"
return address_attributes

View File

@ -62,17 +62,12 @@ class PymemcacheClientTestCase(
self.assertEqual(num_expected, len(spans))
for span, query in zip(spans, queries_expected):
self.assertEqual(span.name, "memcached.command")
self.assertIs(span.kind, trace_api.SpanKind.INTERNAL)
self.assertEqual(
span.attributes["net.peer.name"], "{}".format(TEST_HOST)
)
command, *_ = query.split(" ")
self.assertEqual(span.name, command)
self.assertIs(span.kind, trace_api.SpanKind.CLIENT)
self.assertEqual(span.attributes["net.peer.name"], TEST_HOST)
self.assertEqual(span.attributes["net.peer.port"], TEST_PORT)
self.assertEqual(span.attributes["db.type"], "memcached")
self.assertEqual(
span.attributes["db.url"],
"memcached://{}:{}".format(TEST_HOST, TEST_PORT),
)
self.assertEqual(span.attributes["db.system"], "memcached")
self.assertEqual(span.attributes["db.statement"], query)
def test_set_success(self):
@ -214,10 +209,8 @@ class PymemcacheClientTestCase(
spans = self.memory_exporter.get_finished_spans()
self.assertEqual(len(spans), 2)
self.assertEqual(
spans[0].attributes["db.url"],
"memcached://{}:{}".format(TEST_HOST, TEST_PORT),
)
self.assertEqual(spans[0].attributes["net.peer.name"], TEST_HOST)
self.assertEqual(spans[0].attributes["net.peer.port"], TEST_PORT)
def test_append_stored(self):
client = self.make_client([b"STORED\r\n"])
@ -517,17 +510,12 @@ class PymemcacheHashClientTestCase(TestBase):
self.assertEqual(num_expected, len(spans))
for span, query in zip(spans, queries_expected):
self.assertEqual(span.name, "memcached.command")
self.assertIs(span.kind, trace_api.SpanKind.INTERNAL)
self.assertEqual(
span.attributes["net.peer.name"], "{}".format(TEST_HOST)
)
command, *_ = query.split(" ")
self.assertEqual(span.name, command)
self.assertIs(span.kind, trace_api.SpanKind.CLIENT)
self.assertEqual(span.attributes["net.peer.name"], TEST_HOST)
self.assertEqual(span.attributes["net.peer.port"], TEST_PORT)
self.assertEqual(span.attributes["db.type"], "memcached")
self.assertEqual(
span.attributes["db.url"],
"memcached://{}:{}".format(TEST_HOST, TEST_PORT),
)
self.assertEqual(span.attributes["db.system"], "memcached")
self.assertEqual(span.attributes["db.statement"], query)
def test_delete_many_found(self):