Skip to content

Commit 6ebabac

Browse files
committed
fix: Adapted instrumentations to the new get_tracer_tuple function
Signed-off-by: Cagri Yonca <cagri@ibm.com>
1 parent f9f34c5 commit 6ebabac

29 files changed

+315
-266
lines changed

src/instana/instrumentation/aio_pika.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,32 @@
11
# (c) Copyright IBM Corp. 2025
22

3+
34
try:
4-
import aio_pika # noqa: F401
5-
import wrapt
65
from typing import (
76
TYPE_CHECKING,
8-
Dict,
97
Any,
108
Callable,
9+
Dict,
10+
Optional,
1111
Tuple,
1212
Type,
13-
Optional,
1413
)
1514

15+
import aio_pika # noqa: F401
16+
import wrapt
17+
1618
from instana.log import logger
1719
from instana.propagators.format import Format
18-
from instana.util.traceutils import get_tracer_tuple, tracing_is_off
1920
from instana.singletons import get_tracer
21+
from instana.util.traceutils import get_tracer_tuple
2022

2123
if TYPE_CHECKING:
22-
from instana.span.span import InstanaSpan
24+
from aio_pika.abc import AbstractMessage, ConsumerTag
2325
from aio_pika.exchange import Exchange
24-
from aiormq.abc import ConfirmationFrameType
25-
from aio_pika.abc import ConsumerTag, AbstractMessage
2626
from aio_pika.queue import Queue, QueueIterator
27+
from aiormq.abc import ConfirmationFrameType
28+
29+
from instana.span.span import InstanaSpan
2730

2831
def _extract_span_attributes(
2932
span: "InstanaSpan", connection, sort: str, routing_key: str, exchange: str
@@ -41,10 +44,10 @@ async def publish_with_instana(
4144
args: Tuple[object],
4245
kwargs: Dict[str, Any],
4346
) -> Optional["ConfirmationFrameType"]:
44-
if tracing_is_off():
47+
tracer, parent_span, _ = get_tracer_tuple()
48+
if not tracer:
4549
return await wrapped(*args, **kwargs)
4650

47-
tracer, parent_span, _ = get_tracer_tuple()
4851
parent_context = parent_span.get_span_context() if parent_span else None
4952

5053
def _bind_args(

src/instana/instrumentation/aioamqp.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
# (c) Copyright IBM Corp. 2025
22

33
try:
4-
import aioamqp
54
from typing import Any, Callable, Dict, Tuple
65

6+
import aioamqp
77
import wrapt
88
from opentelemetry.trace.status import StatusCode
99

1010
from instana.log import logger
11-
from instana.util.traceutils import get_tracer_tuple, tracing_is_off
11+
from instana.util.traceutils import get_tracer_tuple
1212

1313
@wrapt.patch_function_wrapper("aioamqp.channel", "Channel.basic_publish")
1414
async def basic_publish_with_instana(
@@ -17,10 +17,10 @@ async def basic_publish_with_instana(
1717
argv: Tuple[object, Tuple[object, ...]],
1818
kwargs: Dict[str, Any],
1919
) -> object:
20-
if tracing_is_off():
20+
tracer, parent_span, _ = get_tracer_tuple()
21+
if not tracer:
2122
return await wrapped(*argv, **kwargs)
2223

23-
tracer, parent_span, _ = get_tracer_tuple()
2424
parent_context = parent_span.get_span_context() if parent_span else None
2525
with tracer.start_as_current_span(
2626
"aioamqp-publisher", span_context=parent_context
@@ -57,11 +57,11 @@ async def basic_consume_with_instana(
5757
argv: Tuple[object, Tuple[object, ...]],
5858
kwargs: Dict[str, Any],
5959
) -> object:
60-
if tracing_is_off():
60+
tracer, parent_span, _ = get_tracer_tuple()
61+
if not tracer:
6162
return await wrapped(*argv, **kwargs)
6263

6364
callback = argv[0]
64-
tracer, parent_span, _ = get_tracer_tuple()
6565
parent_context = parent_span.get_span_context() if parent_span else None
6666

6767
@wrapt.decorator

src/instana/instrumentation/aiohttp/client.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,38 @@
22
# (c) Copyright Instana Inc. 2019
33

44

5-
from types import SimpleNamespace
6-
from typing import TYPE_CHECKING, Any, Awaitable, Callable, Dict, Tuple
7-
import wrapt
8-
9-
from opentelemetry.semconv.trace import SpanAttributes
10-
11-
from instana.log import logger
12-
from instana.propagators.format import Format
13-
from instana.singletons import agent
14-
from instana.util.secrets import strip_secrets_from_query
15-
from instana.util.traceutils import get_tracer_tuple, tracing_is_off, extract_custom_headers
16-
175
try:
6+
from types import SimpleNamespace
7+
from typing import TYPE_CHECKING, Any, Awaitable, Callable, Dict, Tuple
8+
189
import aiohttp
10+
import wrapt
11+
from opentelemetry.semconv.trace import SpanAttributes
12+
13+
from instana.log import logger
14+
from instana.propagators.format import Format
15+
from instana.singletons import agent
16+
from instana.util.secrets import strip_secrets_from_query
17+
from instana.util.traceutils import (
18+
extract_custom_headers,
19+
get_tracer_tuple,
20+
)
1921

2022
if TYPE_CHECKING:
2123
from aiohttp.client import ClientSession
22-
from instana.span.span import InstanaSpan
2324

25+
from instana.span.span import InstanaSpan
2426

2527
async def stan_request_start(
2628
session: "ClientSession", trace_config_ctx: SimpleNamespace, params
2729
) -> Awaitable[None]:
2830
try:
31+
tracer, parent_span, _ = get_tracer_tuple()
2932
# If we're not tracing, just return
30-
if tracing_is_off():
33+
if not tracer:
3134
trace_config_ctx.span_context = None
3235
return
3336

34-
tracer, parent_span, _ = get_tracer_tuple()
3537
parent_context = parent_span.get_span_context() if parent_span else None
3638

3739
span = tracer.start_span("aiohttp-client", span_context=parent_context)

src/instana/instrumentation/asyncio.py

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,22 @@
22
# (c) Copyright Instana Inc. 2019
33

44

5-
import time
6-
from contextlib import contextmanager
7-
from typing import Any, Callable, Dict, Iterator, Tuple
5+
try:
6+
import time
7+
from contextlib import contextmanager
8+
from typing import TYPE_CHECKING, Any, Callable, Dict, Iterator, Tuple
89

9-
import wrapt
10-
from opentelemetry.trace import use_span
11-
from opentelemetry.trace.status import StatusCode
10+
import wrapt
11+
from opentelemetry.trace import use_span
12+
from opentelemetry.trace.status import StatusCode
1213

13-
from instana.configurator import config
14-
from instana.log import logger
15-
from instana.span.span import InstanaSpan
16-
from instana.util.traceutils import get_tracer_tuple, tracing_is_off
14+
from instana.configurator import config
15+
from instana.log import logger
16+
from instana.span.span import InstanaSpan
17+
from instana.util.traceutils import get_tracer_tuple
1718

18-
try:
19+
if TYPE_CHECKING:
20+
from instana.tracer import InstanaTracer
1921
import asyncio
2022

2123
@wrapt.patch_function_wrapper("asyncio", "ensure_future")
@@ -25,13 +27,11 @@ def ensure_future_with_instana(
2527
argv: Tuple[object, Tuple[object, ...]],
2628
kwargs: Dict[str, Any],
2729
) -> object:
28-
if (
29-
not config["asyncio_task_context_propagation"]["enabled"]
30-
or tracing_is_off()
31-
):
30+
tracer, parent_span, _ = get_tracer_tuple()
31+
if not config["asyncio_task_context_propagation"]["enabled"] or not tracer:
3232
return wrapped(*argv, **kwargs)
3333

34-
with _start_as_current_async_span() as span:
34+
with _start_as_current_async_span(tracer, parent_span) as span:
3535
try:
3636
span.set_status(StatusCode.OK)
3737
return wrapped(*argv, **kwargs)
@@ -47,26 +47,26 @@ def create_task_with_instana(
4747
argv: Tuple[object, Tuple[object, ...]],
4848
kwargs: Dict[str, Any],
4949
) -> object:
50-
if (
51-
not config["asyncio_task_context_propagation"]["enabled"]
52-
or tracing_is_off()
53-
):
50+
tracer, parent_span, _ = get_tracer_tuple()
51+
if not config["asyncio_task_context_propagation"]["enabled"] or not tracer:
5452
return wrapped(*argv, **kwargs)
5553

56-
with _start_as_current_async_span() as span:
54+
with _start_as_current_async_span(tracer, parent_span) as span:
5755
try:
5856
span.set_status(StatusCode.OK)
5957
return wrapped(*argv, **kwargs)
6058
except Exception as exc:
6159
logger.debug(f"asyncio create_task_with_instana error: {exc}")
6260

6361
@contextmanager
64-
def _start_as_current_async_span() -> Iterator[InstanaSpan]:
62+
def _start_as_current_async_span(
63+
tracer: "InstanaTracer",
64+
parent_span: "InstanaSpan",
65+
) -> Iterator[InstanaSpan]:
6566
"""
6667
Creates and yield a special InstanaSpan to only propagate the Asyncio
6768
context.
6869
"""
69-
tracer, parent_span, _ = get_tracer_tuple()
7070
parent_context = parent_span.get_span_context() if parent_span else None
7171

7272
_time = time.time_ns()

src/instana/instrumentation/aws/boto3.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from botocore.client import BaseClient
1515

1616
from instana.span.span import InstanaSpan
17+
from instana.tracer import InstanaTracer
1718

1819
import json
1920

@@ -22,14 +23,16 @@
2223
from instana.log import logger
2324
from instana.propagators.format import Format
2425
from instana.singletons import get_tracer
25-
from instana.span.span import get_current_span
2626
from instana.util.traceutils import (
2727
extract_custom_headers,
2828
get_tracer_tuple,
29-
tracing_is_off,
3029
)
3130

32-
def lambda_inject_context(payload: Dict[str, Any], span: "InstanaSpan") -> None:
31+
def lambda_inject_context(
32+
tracer: "InstanaTracer",
33+
payload: Dict[str, Any],
34+
span: "InstanaSpan",
35+
) -> None:
3336
"""
3437
When boto3 lambda client 'Invoke' is called, we want to inject the tracing context.
3538
boto3/botocore has specific requirements:
@@ -54,9 +57,9 @@ def emit_add_auth_with_instana(
5457
args: Tuple[object],
5558
kwargs: Dict[str, Any],
5659
) -> Callable[..., None]:
57-
current_span = get_current_span()
58-
if not tracing_is_off() and current_span and current_span.is_recording():
59-
extract_custom_headers(current_span, args[0].headers)
60+
_, parent_span, _ = get_tracer_tuple()
61+
if parent_span:
62+
extract_custom_headers(parent_span, args[0].headers)
6063
return wrapped(*args, **kwargs)
6164

6265
@wrapt.patch_function_wrapper("botocore.client", "BaseClient._make_api_call")
@@ -66,12 +69,11 @@ def make_api_call_with_instana(
6669
args: Sequence[Dict[str, Any]],
6770
kwargs: Dict[str, Any],
6871
) -> Dict[str, Any]:
72+
tracer, parent_span, _ = get_tracer_tuple()
6973
# If we're not tracing, just return
70-
if tracing_is_off():
74+
if not tracer:
7175
return wrapped(*args, **kwargs)
7276

73-
tracer, parent_span, _ = get_tracer_tuple()
74-
7577
parent_context = parent_span.get_span_context() if parent_span else None
7678

7779
if instance.meta.service_model.service_name == "dynamodb":
@@ -101,7 +103,7 @@ def make_api_call_with_instana(
101103

102104
# Inject context when invoking lambdas
103105
if "lambda" in instance._endpoint.host and operation == "Invoke":
104-
lambda_inject_context(payload, span)
106+
lambda_inject_context(tracer, payload, span)
105107

106108
try:
107109
result = wrapped(*args, **kwargs)

src/instana/instrumentation/aws/s3.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
from instana.singletons import get_tracer
1616
from instana.util.traceutils import (
1717
get_tracer_tuple,
18-
tracing_is_off,
1918
)
2019

2120
operations = {
@@ -48,12 +47,11 @@ def collect_s3_injected_attributes(
4847
args: Sequence[object],
4948
kwargs: Dict[str, Any],
5049
) -> Callable[..., object]:
50+
tracer, parent_span, _ = get_tracer_tuple()
5151
# If we're not tracing, just return
52-
if tracing_is_off():
52+
if not tracer:
5353
return wrapped(*args, **kwargs)
5454

55-
tracer, parent_span, _ = get_tracer_tuple()
56-
5755
parent_context = parent_span.get_span_context() if parent_span else None
5856

5957
with tracer.start_as_current_span("s3", span_context=parent_context) as span:

src/instana/instrumentation/cassandra.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
try:
1111
from typing import TYPE_CHECKING, Any, Callable, Dict, Tuple
1212

13-
import cassandra
13+
import cassandra # noqa: F401
1414
import wrapt
1515

1616
from instana.log import logger
17-
from instana.util.traceutils import get_tracer_tuple, tracing_is_off
17+
from instana.util.traceutils import get_tracer_tuple
1818

1919
if TYPE_CHECKING:
2020
from cassandra.cluster import ResponseFuture, Session
@@ -73,11 +73,11 @@ def request_init_with_instana(
7373
fn: "ResponseFuture",
7474
) -> None:
7575
tracer, parent_span, _ = get_tracer_tuple()
76-
parent_context = parent_span.get_span_context() if parent_span else None
77-
78-
if tracing_is_off():
76+
if not tracer:
7977
return
8078

79+
parent_context = parent_span.get_span_context() if parent_span else None
80+
8181
attributes = {}
8282
if isinstance(fn.query, cassandra.query.SimpleStatement):
8383
attributes["cassandra.query"] = fn.query.query_string

0 commit comments

Comments
 (0)