11# (c) Copyright IBM Corp. 2025
2+ try :
3+ from typing import TYPE_CHECKING , Any , Callable , Dict , Sequence , Tuple , Type
24
3- from typing import TYPE_CHECKING , Any , Callable , Dict , Sequence , Tuple , Type
5+ from opentelemetry . semconv . trace import SpanAttributes
46
5- from opentelemetry .semconv .trace import SpanAttributes
7+ from instana .instrumentation .aws .dynamodb import create_dynamodb_span
8+ from instana .instrumentation .aws .s3 import create_s3_span
69
7- if TYPE_CHECKING :
8- from botocore .auth import SigV4Auth
9- from botocore .client import BaseClient
10+ if TYPE_CHECKING :
11+ from botocore .auth import SigV4Auth
12+ from botocore .client import BaseClient
1013
11- from instana .span .span import InstanaSpan
14+ from instana .span .span import InstanaSpan
1215
13- try :
1416 import json
1517
1618 import wrapt
@@ -69,37 +71,34 @@ def make_api_call_with_instana(
6971
7072 parent_context = parent_span .get_span_context () if parent_span else None
7173
72- try :
74+ if instance .meta .service_model .service_name == "dynamodb" :
75+ create_dynamodb_span (wrapped , instance , args , kwargs , parent_context )
76+ elif instance .meta .service_model .service_name == "s3" :
77+ create_s3_span (wrapped , instance , args , kwargs , parent_context )
78+ else :
7379 with tracer .start_as_current_span (
7480 "boto3" , span_context = parent_context
7581 ) as span :
76- try :
77- operation = args [0 ]
78- payload = args [1 ]
82+ operation = args [0 ]
83+ payload = args [1 ]
7984
80- span .set_attribute ("op" , operation )
81- span .set_attribute ("ep" , instance ._endpoint .host )
82- span .set_attribute ("reg" , instance ._client_config .region_name )
85+ span .set_attribute ("op" , operation )
86+ span .set_attribute ("ep" , instance ._endpoint .host )
87+ span .set_attribute ("reg" , instance ._client_config .region_name )
8388
84- span .set_attribute (
85- SpanAttributes .HTTP_URL ,
86- instance ._endpoint .host + ":443/" + args [0 ],
87- )
88- span .set_attribute (SpanAttributes .HTTP_METHOD , "POST" )
89+ span .set_attribute (
90+ SpanAttributes .HTTP_URL ,
91+ instance ._endpoint .host + ":443/" + args [0 ],
92+ )
93+ span .set_attribute (SpanAttributes .HTTP_METHOD , "POST" )
8994
90- # Don't collect payload for SecretsManager
91- if not hasattr (instance , "get_secret_value" ):
92- span .set_attribute ("payload" , payload )
95+ # Don't collect payload for SecretsManager
96+ if not hasattr (instance , "get_secret_value" ):
97+ span .set_attribute ("payload" , payload )
9398
94- # Inject context when invoking lambdas
95- if "lambda" in instance ._endpoint .host and operation == "Invoke" :
96- lambda_inject_context (payload , span )
97-
98- except Exception :
99- logger .debug (
100- "make_api_call_with_instana: collect error" ,
101- exc_info = True ,
102- )
99+ # Inject context when invoking lambdas
100+ if "lambda" in instance ._endpoint .host and operation == "Invoke" :
101+ lambda_inject_context (payload , span )
103102
104103 try :
105104 result = wrapped (* args , ** kwargs )
@@ -117,10 +116,7 @@ def make_api_call_with_instana(
117116 except Exception as exc :
118117 span .mark_as_errored ({"error" : exc })
119118 raise
120- except Exception :
121- logger .debug ("make_api_call_with_instana: collect error" , exc_info = True )
122- else :
123- return wrapped (* args , ** kwargs )
119+ return wrapped (* args , ** kwargs )
124120
125121except ImportError :
126122 pass
0 commit comments