55
55
56
56
logger = logging .getLogger (__name__ )
57
57
58
+ SERVICE_PARAMS_BLOCK_LIST = {"s3" : ["params.Body" ]}
59
+
58
60
59
61
def _get_instance_region_name (instance ):
60
62
region = getattr (instance , "region" , None )
@@ -203,7 +205,24 @@ def _patched_auth_request(self, original_func, instance, args, kwargs):
203
205
)
204
206
205
207
206
- def add_span_arg_tags (span , endpoint_name , args , args_names , args_traced ):
208
+ def flatten_dict (dict_ , sep = "." , prefix = "" ):
209
+ """
210
+ Returns a normalized dict of depth 1 with keys in order of embedding
211
+ """
212
+ # NOTE: This should probably be in `opentelemetry.instrumentation.utils`.
213
+ # adapted from https://stackoverflow.com/a/19647596
214
+ return (
215
+ {
216
+ prefix + sep + k if prefix else k : v
217
+ for kk , vv in dict_ .items ()
218
+ for k , v in flatten_dict (vv , sep , kk ).items ()
219
+ }
220
+ if isinstance (dict_ , dict )
221
+ else {prefix : dict_ }
222
+ )
223
+
224
+
225
+ def add_span_arg_tags (span , aws_service , args , args_names , args_traced ):
207
226
def truncate_arg_value (value , max_len = 1024 ):
208
227
"""Truncate values which are bytes and greater than `max_len`.
209
228
Useful for parameters like "Body" in `put_object` operations.
@@ -213,34 +232,19 @@ def truncate_arg_value(value, max_len=1024):
213
232
214
233
return value
215
234
216
- def flatten_dict (dict_ , sep = "." , prefix = "" ):
217
- """
218
- Returns a normalized dict of depth 1 with keys in order of embedding
219
- """
220
- # adapted from https://stackoverflow.com/a/19647596
221
- return (
222
- {
223
- prefix + sep + k if prefix else k : v
224
- for kk , vv in dict_ .items ()
225
- for k , v in flatten_dict (vv , sep , kk ).items ()
226
- }
227
- if isinstance (dict_ , dict )
228
- else {prefix : dict_ }
229
- )
230
-
231
235
if not span .is_recording ():
232
236
return
233
237
234
- if endpoint_name not in {"kms" , "sts" }:
238
+ if aws_service not in {"kms" , "sts" }:
235
239
tags = dict (
236
240
(name , value )
237
241
for (name , value ) in zip (args_names , args )
238
242
if name in args_traced
239
243
)
240
244
tags = flatten_dict (tags )
241
- for key , value in {
242
- k : truncate_arg_value ( v )
243
- for k , v in tags . items ()
244
- if k not in { "s3" : [ "params.Body" ]}. get ( endpoint_name , [])
245
- }. items ():
246
- span .set_attribute (key , value )
245
+
246
+ for param_key , value in tags . items ():
247
+ if param_key in SERVICE_PARAMS_BLOCK_LIST . get ( aws_service , {}):
248
+ continue
249
+
250
+ span .set_attribute (param_key , truncate_arg_value ( value ) )
0 commit comments