Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 54 additions & 54 deletions aws-opentelemetry-distro/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,62 +24,62 @@ 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-processor-baggage == 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-processor-baggage == 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]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
_AttributeMapT,
_AwsSdkCallContext,
_AwsSdkExtension,
_BotocoreInstrumentorContext,
_BotoResultT,
)
from opentelemetry.trace.span import Span
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter as OTLPHttpOTLPMetricExporter
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.metrics import get_meter_provider
from opentelemetry.processor.baggage import BaggageSpanProcessor
from opentelemetry.sdk.environment_variables import OTEL_TRACES_SAMPLER, OTEL_TRACES_SAMPLER_ARG
from opentelemetry.sdk.metrics._internal.export import PeriodicExportingMetricReader
Expand Down Expand Up @@ -87,6 +88,22 @@ def setUpClass(cls):
aws_otel_configurator.configure()
cls.tracer_provider: TracerProvider = get_tracer_provider()

@classmethod
def tearDownClass(cls):
# Explicitly shut down meter provider to avoid I/O errors on Python 3.9 with gevent
# This ensures ConsoleMetricExporter is properly closed before Python cleanup
try:
meter_provider = get_meter_provider()
if hasattr(meter_provider, "force_flush"):
meter_provider.force_flush()
if hasattr(meter_provider, "shutdown"):
meter_provider.shutdown()
except (ValueError, RuntimeError):
# Ignore errors during cleanup:
# - ValueError: I/O operation on closed file (the exact error we're trying to prevent)
# - RuntimeError: Provider already shut down or threading issues
pass

def tearDown(self):
os.environ.pop("OTEL_AWS_APPLICATION_SIGNALS_ENABLED", None)
os.environ.pop("OTEL_AWS_APPLICATION_SIGNALS_RUNTIME_ENABLED", None)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down Expand Up @@ -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):
Expand All @@ -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
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
opentelemetry-distro==0.46b0
opentelemetry-exporter-otlp-proto-grpc==1.25.0
typing-extensions==4.9.0
typing-extensions==4.12.2
botocore==1.34.143
boto3==1.34.143
boto3==1.34.143
8 changes: 4 additions & 4 deletions contract-tests/images/applications/django/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
opentelemetry-distro==0.46b0
opentelemetry-exporter-otlp-proto-grpc==1.25.0
typing-extensions==4.9.0
django==5.0.11
opentelemetry-distro==0.54b0
opentelemetry-exporter-otlp-proto-grpc==1.33.0
typing-extensions==4.12.2
django==5.0.11
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
opentelemetry-distro==0.46b0
opentelemetry-exporter-otlp-proto-grpc==1.25.0
typing-extensions==4.9.0
mysql-connector-python~=9.1.0
opentelemetry-distro==0.54b0
opentelemetry-exporter-otlp-proto-grpc==1.33.0
typing-extensions==4.12.2
mysql-connector-python~=9.1.0
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
opentelemetry-distro==0.46b0
opentelemetry-exporter-otlp-proto-grpc==1.25.0
typing-extensions==4.9.0
opentelemetry-distro==0.54b0
opentelemetry-exporter-otlp-proto-grpc==1.33.0
typing-extensions==4.12.2
mysqlclient==2.2.4
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
opentelemetry-distro==0.46b0
opentelemetry-exporter-otlp-proto-grpc==1.25.0
typing-extensions==4.9.0
psycopg2==2.9.9
opentelemetry-distro==0.54b0
opentelemetry-exporter-otlp-proto-grpc==1.33.0
typing-extensions==4.12.2
psycopg2==2.9.9
8 changes: 4 additions & 4 deletions contract-tests/images/applications/pymysql/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
opentelemetry-distro==0.46b0
opentelemetry-exporter-otlp-proto-grpc==1.25.0
typing-extensions==4.9.0
pymysql==1.1.1
opentelemetry-distro==0.54b0
opentelemetry-exporter-otlp-proto-grpc==1.33.0
typing-extensions==4.12.2
pymysql==1.1.1
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
opentelemetry-distro==0.46b0
opentelemetry-exporter-otlp-proto-grpc==1.25.0
typing-extensions==4.9.0
opentelemetry-distro==0.54b0
opentelemetry-exporter-otlp-proto-grpc==1.33.0
typing-extensions==4.12.2
requests~=2.0
10 changes: 5 additions & 5 deletions contract-tests/images/mock-collector/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ license = "Apache-2.0"
requires-python = ">=3.9"

dependencies = [
"grpcio ~= 1.60.0",
"opentelemetry-proto==1.25.0",
"opentelemetry-sdk==1.25.0",
"protobuf==4.25.2",
"typing-extensions==4.9.0"
"grpcio ~= 1.66.0",
"opentelemetry-proto==1.33.0",
"opentelemetry-sdk==1.33.0",
"protobuf==5.26.1",
"typing-extensions==4.12.2"
]

[tool.hatch.build.targets.sdist]
Expand Down
10 changes: 5 additions & 5 deletions contract-tests/images/mock-collector/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
grpcio==1.60.1
opentelemetry-proto==1.25.0
opentelemetry-sdk==1.25.0
protobuf==4.25.2
typing-extensions==4.9.0
grpcio==1.66.2
opentelemetry-proto==1.33.0
opentelemetry-sdk==1.33.0
protobuf==5.26.1
typing-extensions==4.12.2
6 changes: 3 additions & 3 deletions contract-tests/tests/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ license = "Apache-2.0"
requires-python = ">=3.9"

dependencies = [
"opentelemetry-proto==1.25.0",
"opentelemetry-sdk==1.25.0",
"opentelemetry-proto==1.33.0",
"opentelemetry-sdk==1.33.0",
"testcontainers==3.7.1",
"grpcio==1.60.0",
"grpcio==1.66.2",
"docker==7.1.0",
"mock-collector==1.0.0",
"requests==2.32.2"
Expand Down
Loading