From 8bd130a893629146e6723bbd63d0b0b5cb059947 Mon Sep 17 00:00:00 2001 From: Michael He Date: Mon, 9 Jun 2025 21:06:46 +0000 Subject: [PATCH 1/3] bump otel dependency versions to 1.33.0/0.54b0 --- aws-opentelemetry-distro/pyproject.toml | 106 ++++++++++++------------ 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/aws-opentelemetry-distro/pyproject.toml b/aws-opentelemetry-distro/pyproject.toml index e49fffbb0..bc98b7a27 100644 --- a/aws-opentelemetry-distro/pyproject.toml +++ b/aws-opentelemetry-distro/pyproject.toml @@ -24,61 +24,61 @@ classifiers = [ ] dependencies = [ - "opentelemetry-api == 1.27.0", - "opentelemetry-sdk == 1.27.0", - "opentelemetry-exporter-otlp-proto-grpc == 1.27.0", - "opentelemetry-exporter-otlp-proto-http == 1.27.0", - "opentelemetry-propagator-b3 == 1.27.0", - "opentelemetry-propagator-jaeger == 1.27.0", - "opentelemetry-exporter-otlp-proto-common == 1.27.0", + "opentelemetry-api == 1.33.0", + "opentelemetry-sdk == 1.33.0", + "opentelemetry-exporter-otlp-proto-grpc == 1.33.0", + "opentelemetry-exporter-otlp-proto-http == 1.33.0", + "opentelemetry-propagator-b3 == 1.33.0", + "opentelemetry-propagator-jaeger == 1.33.0", + "opentelemetry-exporter-otlp-proto-common == 1.33.0", "opentelemetry-sdk-extension-aws == 2.0.2", "opentelemetry-propagator-aws-xray == 1.0.1", - "opentelemetry-distro == 0.48b0", - "opentelemetry-propagator-ot-trace == 0.48b0", - "opentelemetry-instrumentation == 0.48b0", - "opentelemetry-instrumentation-aws-lambda == 0.48b0", - "opentelemetry-instrumentation-aio-pika == 0.48b0", - "opentelemetry-instrumentation-aiohttp-client == 0.48b0", - "opentelemetry-instrumentation-aiopg == 0.48b0", - "opentelemetry-instrumentation-asgi == 0.48b0", - "opentelemetry-instrumentation-asyncpg == 0.48b0", - "opentelemetry-instrumentation-boto == 0.48b0", - "opentelemetry-instrumentation-boto3sqs == 0.48b0", - "opentelemetry-instrumentation-botocore == 0.48b0", - "opentelemetry-instrumentation-celery == 0.48b0", - "opentelemetry-instrumentation-confluent-kafka == 0.48b0", - "opentelemetry-instrumentation-dbapi == 0.48b0", - "opentelemetry-instrumentation-django == 0.48b0", - "opentelemetry-instrumentation-elasticsearch == 0.48b0", - "opentelemetry-instrumentation-falcon == 0.48b0", - "opentelemetry-instrumentation-fastapi == 0.48b0", - "opentelemetry-instrumentation-flask == 0.48b0", - "opentelemetry-instrumentation-grpc == 0.48b0", - "opentelemetry-instrumentation-httpx == 0.48b0", - "opentelemetry-instrumentation-jinja2 == 0.48b0", - "opentelemetry-instrumentation-kafka-python == 0.48b0", - "opentelemetry-instrumentation-logging == 0.48b0", - "opentelemetry-instrumentation-mysql == 0.48b0", - "opentelemetry-instrumentation-mysqlclient == 0.48b0", - "opentelemetry-instrumentation-pika == 0.48b0", - "opentelemetry-instrumentation-psycopg2 == 0.48b0", - "opentelemetry-instrumentation-pymemcache == 0.48b0", - "opentelemetry-instrumentation-pymongo == 0.48b0", - "opentelemetry-instrumentation-pymysql == 0.48b0", - "opentelemetry-instrumentation-pyramid == 0.48b0", - "opentelemetry-instrumentation-redis == 0.48b0", - "opentelemetry-instrumentation-remoulade == 0.48b0", - "opentelemetry-instrumentation-requests == 0.48b0", - "opentelemetry-instrumentation-sqlalchemy == 0.48b0", - "opentelemetry-instrumentation-sqlite3 == 0.48b0", - "opentelemetry-instrumentation-starlette == 0.48b0", - "opentelemetry-instrumentation-system-metrics == 0.48b0", - "opentelemetry-instrumentation-tornado == 0.48b0", - "opentelemetry-instrumentation-tortoiseorm == 0.48b0", - "opentelemetry-instrumentation-urllib == 0.48b0", - "opentelemetry-instrumentation-urllib3 == 0.48b0", - "opentelemetry-instrumentation-wsgi == 0.48b0", - "opentelemetry-instrumentation-cassandra == 0.48b0", + "opentelemetry-distro == 0.54b0", + "opentelemetry-propagator-ot-trace == 0.54b0", + "opentelemetry-instrumentation == 0.54b0", + "opentelemetry-instrumentation-aws-lambda == 0.54b0", + "opentelemetry-instrumentation-aio-pika == 0.54b0", + "opentelemetry-instrumentation-aiohttp-client == 0.54b0", + "opentelemetry-instrumentation-aiopg == 0.54b0", + "opentelemetry-instrumentation-asgi == 0.54b0", + "opentelemetry-instrumentation-asyncpg == 0.54b0", + "opentelemetry-instrumentation-boto == 0.54b0", + "opentelemetry-instrumentation-boto3sqs == 0.54b0", + "opentelemetry-instrumentation-botocore == 0.54b0", + "opentelemetry-instrumentation-celery == 0.54b0", + "opentelemetry-instrumentation-confluent-kafka == 0.54b0", + "opentelemetry-instrumentation-dbapi == 0.54b0", + "opentelemetry-instrumentation-django == 0.54b0", + "opentelemetry-instrumentation-elasticsearch == 0.54b0", + "opentelemetry-instrumentation-falcon == 0.54b0", + "opentelemetry-instrumentation-fastapi == 0.54b0", + "opentelemetry-instrumentation-flask == 0.54b0", + "opentelemetry-instrumentation-grpc == 0.54b0", + "opentelemetry-instrumentation-httpx == 0.54b0", + "opentelemetry-instrumentation-jinja2 == 0.54b0", + "opentelemetry-instrumentation-kafka-python == 0.54b0", + "opentelemetry-instrumentation-logging == 0.54b0", + "opentelemetry-instrumentation-mysql == 0.54b0", + "opentelemetry-instrumentation-mysqlclient == 0.54b0", + "opentelemetry-instrumentation-pika == 0.54b0", + "opentelemetry-instrumentation-psycopg2 == 0.54b0", + "opentelemetry-instrumentation-pymemcache == 0.54b0", + "opentelemetry-instrumentation-pymongo == 0.54b0", + "opentelemetry-instrumentation-pymysql == 0.54b0", + "opentelemetry-instrumentation-pyramid == 0.54b0", + "opentelemetry-instrumentation-redis == 0.54b0", + "opentelemetry-instrumentation-remoulade == 0.54b0", + "opentelemetry-instrumentation-requests == 0.54b0", + "opentelemetry-instrumentation-sqlalchemy == 0.54b0", + "opentelemetry-instrumentation-sqlite3 == 0.54b0", + "opentelemetry-instrumentation-starlette == 0.54b0", + "opentelemetry-instrumentation-system-metrics == 0.54b0", + "opentelemetry-instrumentation-tornado == 0.54b0", + "opentelemetry-instrumentation-tortoiseorm == 0.54b0", + "opentelemetry-instrumentation-urllib == 0.54b0", + "opentelemetry-instrumentation-urllib3 == 0.54b0", + "opentelemetry-instrumentation-wsgi == 0.54b0", + "opentelemetry-instrumentation-cassandra == 0.54b0", ] [project.optional-dependencies] From 944102ec006d3b615d31e167e10537e47f76cd01 Mon Sep 17 00:00:00 2001 From: Michael He Date: Mon, 9 Jun 2025 21:23:49 +0000 Subject: [PATCH 2/3] change assert to true for bedrock-runtime patch in upstream --- .../amazon/opentelemetry/distro/test_instrumentation_patch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_instrumentation_patch.py b/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_instrumentation_patch.py index 87e6c4810..0fad2313d 100644 --- a/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_instrumentation_patch.py +++ b/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_instrumentation_patch.py @@ -147,7 +147,7 @@ def _test_unpatched_botocore_instrumentation(self): ) # BedrockRuntime - self.assertFalse("bedrock-runtime" in _KNOWN_EXTENSIONS, "Upstream has added a bedrock-runtime extension") + self.assertTrue("bedrock-runtime" in _KNOWN_EXTENSIONS, "Upstream has added a bedrock-runtime extension") # SecretsManager self.assertFalse("secretsmanager" in _KNOWN_EXTENSIONS, "Upstream has added a SecretsManager extension") From e8baf08b999e36068b5f246e1798d82f7fe82e89 Mon Sep 17 00:00:00 2001 From: Michael He Date: Mon, 9 Jun 2025 21:59:40 +0000 Subject: [PATCH 3/3] update botocore patch function signatures --- .../distro/patches/_bedrock_patches.py | 7 ++++--- .../distro/patches/_botocore_patches.py | 17 +++++++++++------ .../distro/test_instrumentation_patch.py | 3 ++- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/patches/_bedrock_patches.py b/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/patches/_bedrock_patches.py index a25e55330..d8c241ede 100644 --- a/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/patches/_bedrock_patches.py +++ b/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/patches/_bedrock_patches.py @@ -31,6 +31,7 @@ _AttributeMapT, _AwsSdkCallContext, _AwsSdkExtension, + _BotocoreInstrumentorContext, _BotoResultT, ) from opentelemetry.trace.span import Span @@ -192,7 +193,7 @@ def extract_attributes(self, attributes: _AttributeMapT): if request_param_value: attributes[attribute_key] = request_param_value - def on_success(self, span: Span, result: _BotoResultT): + def on_success(self, span: Span, result: _BotoResultT, instrumentor_context: _BotocoreInstrumentorContext): if self._operation_class is None: return @@ -229,7 +230,7 @@ class _BedrockExtension(_AwsSdkExtension): """ # pylint: disable=no-self-use - def on_success(self, span: Span, result: _BotoResultT): + def on_success(self, span: Span, result: _BotoResultT, instrumentor_context: _BotocoreInstrumentorContext): # _GUARDRAIL_ID can only be retrieved from the response, not from the request guardrail_id = result.get(_GUARDRAIL_ID) if guardrail_id: @@ -333,7 +334,7 @@ def _set_if_not_none(attributes, key, value): attributes[key] = value # pylint: disable=too-many-branches - def on_success(self, span: Span, result: Dict[str, Any]): + def on_success(self, span: Span, result: Dict[str, Any], instrumentor_context: _BotocoreInstrumentorContext): model_id = self._call_context.params.get(_MODEL_ID) if not model_id: diff --git a/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/patches/_botocore_patches.py b/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/patches/_botocore_patches.py index 0f4a77d1e..3cea9146f 100644 --- a/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/patches/_botocore_patches.py +++ b/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/patches/_botocore_patches.py @@ -25,7 +25,12 @@ from opentelemetry.instrumentation.botocore.extensions.lmbd import _LambdaExtension from opentelemetry.instrumentation.botocore.extensions.sns import _SnsExtension from opentelemetry.instrumentation.botocore.extensions.sqs import _SqsExtension -from opentelemetry.instrumentation.botocore.extensions.types import _AttributeMapT, _AwsSdkExtension, _BotoResultT +from opentelemetry.instrumentation.botocore.extensions.types import ( + _AttributeMapT, + _AwsSdkExtension, + _BotocoreInstrumentorContext, + _BotoResultT, +) from opentelemetry.semconv.trace import SpanAttributes from opentelemetry.trace.span import Span @@ -75,8 +80,8 @@ def patch_extract_attributes(self, attributes: _AttributeMapT): old_on_success = _LambdaExtension.on_success - def patch_on_success(self, span: Span, result: _BotoResultT): - old_on_success(self, span, result) + def patch_on_success(self, span: Span, result: _BotoResultT, instrumentor_context: _BotocoreInstrumentorContext): + old_on_success(self, span, result, instrumentor_context) lambda_configuration = result.get("Configuration", {}) function_arn = lambda_configuration.get("FunctionArn") if function_arn: @@ -180,8 +185,8 @@ def patch_extract_attributes(self, attributes: _AttributeMapT): old_on_success = _SqsExtension.on_success - def patch_on_success(self, span: Span, result: _BotoResultT): - old_on_success(self, span, result) + def patch_on_success(self, span: Span, result: _BotoResultT, instrumentor_context: _BotocoreInstrumentorContext): + old_on_success(self, span, result, instrumentor_context) queue_url = result.get("QueueUrl") if queue_url: span.set_attribute(AWS_SQS_QUEUE_URL, queue_url) @@ -243,7 +248,7 @@ def extract_attributes(self, attributes: _AttributeMapT): attributes[AWS_SECRETSMANAGER_SECRET_ARN] = secret_id # pylint: disable=no-self-use - def on_success(self, span: Span, result: _BotoResultT): + def on_success(self, span: Span, result: _BotoResultT, instrumentor_context: _BotocoreInstrumentorContext): secret_arn = result.get("ARN") if secret_arn: span.set_attribute(AWS_SECRETSMANAGER_SECRET_ARN, secret_arn) diff --git a/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_instrumentation_patch.py b/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_instrumentation_patch.py index 0fad2313d..7b62cfb49 100644 --- a/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_instrumentation_patch.py +++ b/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_instrumentation_patch.py @@ -678,6 +678,7 @@ def _do_on_success( ) -> Dict[str, str]: span_mock: Span = MagicMock() mock_call_context = MagicMock() + mock_instrumentor_context = MagicMock() span_attributes: Dict[str, str] = {} def set_side_effect(set_key, set_value): @@ -692,6 +693,6 @@ def set_side_effect(set_key, set_value): mock_call_context.params = params extension = _KNOWN_EXTENSIONS[service_name]()(mock_call_context) - extension.on_success(span_mock, result) + extension.on_success(span_mock, result, mock_instrumentor_context) return span_attributes