Skip to content

Commit 170c2c7

Browse files
authored
ext/boto ext/botocore:Converted resource to hold Resource attribute than a string (#866)
1 parent b56fe2a commit 170c2c7

File tree

6 files changed

+106
-22
lines changed

6 files changed

+106
-22
lines changed

ext/opentelemetry-ext-boto/CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@
22

33
## Unreleased
44

5+
- ext/boto and ext/botocore: fails to export spans via jaeger
6+
([#866](https://github.com/open-telemetry/opentelemetry-python/pull/866))
7+
58
## 0.9b0
69

710
Released 2020-06-10
811

912
- Initial release
13+

ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/__init__.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252

5353
from opentelemetry.ext.boto.version import __version__
5454
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
55+
from opentelemetry.sdk.trace import Resource
5556
from opentelemetry.trace import SpanKind, get_tracer
5657

5758
logger = logging.getLogger(__name__)
@@ -123,9 +124,14 @@ def _common_request( # pylint: disable=too-many-locals
123124
) as span:
124125
if args:
125126
http_method = args[0]
126-
span.resource = "%s.%s" % (endpoint_name, http_method.lower())
127+
span.resource = Resource(
128+
labels={
129+
"endpoint": endpoint_name,
130+
"http_method": http_method.lower(),
131+
}
132+
)
127133
else:
128-
span.resource = endpoint_name
134+
span.resource = Resource(labels={"endpoint": endpoint_name})
129135

130136
add_span_arg_tags(
131137
span, endpoint_name, args, args_name, traced_args,

ext/opentelemetry-ext-boto/tests/test_boto_instrumentation.py

+40-9
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
)
2828

2929
from opentelemetry.ext.boto import BotoInstrumentor
30+
from opentelemetry.sdk.resources import Resource
3031
from opentelemetry.test.test_base import TestBase
3132

3233

@@ -69,7 +70,12 @@ def test_ec2_client(self):
6970
span = spans[1]
7071
self.assertEqual(span.attributes["aws.operation"], "RunInstances")
7172
assert_span_http_status_code(span, 200)
72-
self.assertEqual(span.resource, "ec2.runinstances")
73+
self.assertEqual(
74+
span.resource,
75+
Resource(
76+
labels={"endpoint": "ec2", "http_method": "runinstances"}
77+
),
78+
)
7379
self.assertEqual(span.attributes["http.method"], "POST")
7480
self.assertEqual(span.attributes["aws.region"], "us-west-2")
7581
self.assertEqual(span.name, "ec2.command")
@@ -123,7 +129,10 @@ def test_s3_client(self):
123129
self.assertEqual(len(spans), 3)
124130
span = spans[2]
125131
assert_span_http_status_code(span, 200)
126-
self.assertEqual(span.resource, "s3.head")
132+
self.assertEqual(
133+
span.resource,
134+
Resource(labels={"endpoint": "s3", "http_method": "head"}),
135+
)
127136
self.assertEqual(span.attributes["http.method"], "HEAD")
128137
self.assertEqual(span.attributes["aws.operation"], "head_bucket")
129138
self.assertEqual(span.name, "s3.command")
@@ -135,7 +144,10 @@ def test_s3_client(self):
135144
spans = self.memory_exporter.get_finished_spans()
136145
assert spans
137146
span = spans[2]
138-
self.assertEqual(span.resource, "s3.head")
147+
self.assertEqual(
148+
span.resource,
149+
Resource(labels={"endpoint": "s3", "http_method": "head"}),
150+
)
139151

140152
@mock_s3_deprecated
141153
def test_s3_put(self):
@@ -152,15 +164,24 @@ def test_s3_put(self):
152164
self.assertEqual(len(spans), 3)
153165
self.assertEqual(spans[0].attributes["aws.operation"], "create_bucket")
154166
assert_span_http_status_code(spans[0], 200)
155-
self.assertEqual(spans[0].resource, "s3.put")
167+
self.assertEqual(
168+
spans[0].resource,
169+
Resource(labels={"endpoint": "s3", "http_method": "put"}),
170+
)
156171
# get bucket
157172
self.assertEqual(spans[1].attributes["aws.operation"], "head_bucket")
158-
self.assertEqual(spans[1].resource, "s3.head")
173+
self.assertEqual(
174+
spans[1].resource,
175+
Resource(labels={"endpoint": "s3", "http_method": "head"}),
176+
)
159177
# put object
160178
self.assertEqual(
161179
spans[2].attributes["aws.operation"], "_send_file_internal"
162180
)
163-
self.assertEqual(spans[2].resource, "s3.put")
181+
self.assertEqual(
182+
spans[2].resource,
183+
Resource(labels={"endpoint": "s3", "http_method": "put"}),
184+
)
164185

165186
@mock_lambda_deprecated
166187
def test_unpatch(self):
@@ -200,7 +221,10 @@ def test_lambda_client(self):
200221
self.assertEqual(len(spans), 2)
201222
span = spans[0]
202223
assert_span_http_status_code(span, 200)
203-
self.assertEqual(span.resource, "lambda.get")
224+
self.assertEqual(
225+
span.resource,
226+
Resource(labels={"endpoint": "lambda", "http_method": "get"}),
227+
)
204228
self.assertEqual(span.attributes["http.method"], "GET")
205229
self.assertEqual(span.attributes["aws.region"], "us-east-2")
206230
self.assertEqual(span.attributes["aws.operation"], "list_functions")
@@ -214,7 +238,12 @@ def test_sts_client(self):
214238
spans = self.memory_exporter.get_finished_spans()
215239
assert spans
216240
span = spans[0]
217-
self.assertEqual(span.resource, "sts.getfederationtoken")
241+
self.assertEqual(
242+
span.resource,
243+
Resource(
244+
labels={"endpoint": "sts", "http_method": "getfederationtoken"}
245+
),
246+
)
218247
self.assertEqual(span.attributes["aws.region"], "us-west-2")
219248
self.assertEqual(
220249
span.attributes["aws.operation"], "GetFederationToken"
@@ -238,5 +267,7 @@ def test_elasticache_client(self):
238267
spans = self.memory_exporter.get_finished_spans()
239268
assert spans
240269
span = spans[0]
241-
self.assertEqual(span.resource, "elasticache")
270+
self.assertEqual(
271+
span.resource, Resource(labels={"endpoint": "elasticcache"})
272+
)
242273
self.assertEqual(span.attributes["aws.region"], "us-west-2")

ext/opentelemetry-ext-botocore/CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
## Unreleased
44

5+
- ext/boto and ext/botocore: fails to export spans via jaeger
6+
([#866](https://github.com/open-telemetry/opentelemetry-python/pull/866))
7+
58
## 0.9b0
69

710
Released 2020-06-10

ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/__init__.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858

5959
from opentelemetry.ext.botocore.version import __version__
6060
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
61+
from opentelemetry.sdk.trace import Resource
6162
from opentelemetry.trace import SpanKind, get_tracer
6263

6364
logger = logging.getLogger(__name__)
@@ -98,10 +99,15 @@ def _patched_api_call(self, original_func, instance, args, kwargs):
9899
operation = None
99100
if args:
100101
operation = args[0]
101-
span.resource = "%s.%s" % (endpoint_name, operation.lower())
102+
span.resource = Resource(
103+
labels={
104+
"endpoint": endpoint_name,
105+
"operation": operation.lower(),
106+
}
107+
)
102108

103109
else:
104-
span.resource = endpoint_name
110+
span.resource = Resource(labels={"endpoint": endpoint_name})
105111

106112
add_span_arg_tags(
107113
span,

ext/opentelemetry-ext-botocore/tests/test_botocore_instrumentation.py

+43-9
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
)
1111

1212
from opentelemetry.ext.botocore import BotocoreInstrumentor
13+
from opentelemetry.sdk.resources import Resource
1314
from opentelemetry.test.test_base import TestBase
1415

1516

@@ -49,7 +50,12 @@ def test_traced_client(self):
4950
self.assertEqual(span.attributes["aws.region"], "us-west-2")
5051
self.assertEqual(span.attributes["aws.operation"], "DescribeInstances")
5152
assert_span_http_status_code(span, 200)
52-
self.assertEqual(span.resource, "ec2.describeinstances")
53+
self.assertEqual(
54+
span.resource,
55+
Resource(
56+
labels={"endpoint": "ec2", "operation": "describeinstances"}
57+
),
58+
)
5359
self.assertEqual(span.name, "ec2.command")
5460

5561
@mock_ec2
@@ -73,7 +79,10 @@ def test_s3_client(self):
7379
self.assertEqual(len(spans), 2)
7480
self.assertEqual(span.attributes["aws.operation"], "ListBuckets")
7581
assert_span_http_status_code(span, 200)
76-
self.assertEqual(span.resource, "s3.listbuckets")
82+
self.assertEqual(
83+
span.resource,
84+
Resource(labels={"endpoint": "s3", "operation": "listbuckets"}),
85+
)
7786

7887
# testing for span error
7988
self.memory_exporter.get_finished_spans()
@@ -82,7 +91,10 @@ def test_s3_client(self):
8291
spans = self.memory_exporter.get_finished_spans()
8392
assert spans
8493
span = spans[2]
85-
self.assertEqual(span.resource, "s3.listobjects")
94+
self.assertEqual(
95+
span.resource,
96+
Resource(labels={"endpoint": "s3", "operation": "listobjects"}),
97+
)
8698

8799
@mock_s3
88100
def test_s3_put(self):
@@ -97,9 +109,15 @@ def test_s3_put(self):
97109
self.assertEqual(len(spans), 2)
98110
self.assertEqual(span.attributes["aws.operation"], "CreateBucket")
99111
assert_span_http_status_code(span, 200)
100-
self.assertEqual(span.resource, "s3.createbucket")
112+
self.assertEqual(
113+
span.resource,
114+
Resource(labels={"endpoint": "s3", "operation": "createbucket"}),
115+
)
101116
self.assertEqual(spans[1].attributes["aws.operation"], "PutObject")
102-
self.assertEqual(spans[1].resource, "s3.putobject")
117+
self.assertEqual(
118+
spans[1].resource,
119+
Resource(labels={"endpoint": "s3", "operation": "putobject"}),
120+
)
103121
self.assertEqual(spans[1].attributes["params.Key"], str(params["Key"]))
104122
self.assertEqual(
105123
spans[1].attributes["params.Bucket"], str(params["Bucket"])
@@ -119,7 +137,10 @@ def test_sqs_client(self):
119137
self.assertEqual(span.attributes["aws.region"], "us-east-1")
120138
self.assertEqual(span.attributes["aws.operation"], "ListQueues")
121139
assert_span_http_status_code(span, 200)
122-
self.assertEqual(span.resource, "sqs.listqueues")
140+
self.assertEqual(
141+
span.resource,
142+
Resource(labels={"endpoint": "sqs", "operation": "listqueues"}),
143+
)
123144

124145
@mock_kinesis
125146
def test_kinesis_client(self):
@@ -136,7 +157,12 @@ def test_kinesis_client(self):
136157
self.assertEqual(span.attributes["aws.region"], "us-east-1")
137158
self.assertEqual(span.attributes["aws.operation"], "ListStreams")
138159
assert_span_http_status_code(span, 200)
139-
self.assertEqual(span.resource, "kinesis.liststreams")
160+
self.assertEqual(
161+
span.resource,
162+
Resource(
163+
labels={"endpoint": "kinesis", "operation": "liststreams"}
164+
),
165+
)
140166

141167
@mock_kinesis
142168
def test_unpatch(self):
@@ -176,7 +202,12 @@ def test_lambda_client(self):
176202
self.assertEqual(span.attributes["aws.region"], "us-east-1")
177203
self.assertEqual(span.attributes["aws.operation"], "ListFunctions")
178204
assert_span_http_status_code(span, 200)
179-
self.assertEqual(span.resource, "lambda.listfunctions")
205+
self.assertEqual(
206+
span.resource,
207+
Resource(
208+
labels={"endpoint": "lambda", "operation": "listfunctions"}
209+
),
210+
)
180211

181212
@mock_kms
182213
def test_kms_client(self):
@@ -191,7 +222,10 @@ def test_kms_client(self):
191222
self.assertEqual(span.attributes["aws.region"], "us-east-1")
192223
self.assertEqual(span.attributes["aws.operation"], "ListKeys")
193224
assert_span_http_status_code(span, 200)
194-
self.assertEqual(span.resource, "kms.listkeys")
225+
self.assertEqual(
226+
span.resource,
227+
Resource(labels={"endpoint": "kms", "operation": "listkeys"}),
228+
)
195229

196230
# checking for protection on sts against security leak
197231
self.assertTrue("params" not in span.attributes.keys())

0 commit comments

Comments
 (0)