Skip to content

Commit f033b71

Browse files
committed
fix: Adapted instrumentations to the new get_tracer_tuple function
Signed-off-by: Cagri Yonca <[email protected]>
1 parent f178038 commit f033b71

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+1173
-954
lines changed

src/instana/helpers.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
# (c) Copyright IBM Corp. 2021
22
# (c) Copyright Instana Inc. 2018
33

4-
import os
5-
from string import Template
6-
7-
from instana import eum_api_key as global_eum_api_key
8-
from .singletons import tracer
9-
from instana.log import logger
104

115
# Usage:
126
#
@@ -26,7 +20,7 @@ def eum_snippet(trace_id=None, eum_api_key=None, meta=None):
2620
2721
@return string
2822
"""
29-
return ''
23+
return ""
3024

3125

3226
def eum_test_snippet(trace_id=None, eum_api_key=None, meta=None):
@@ -40,4 +34,4 @@ def eum_test_snippet(trace_id=None, eum_api_key=None, meta=None):
4034
4135
@return string
4236
"""
43-
return ''
37+
return ""

src/instana/instrumentation/aio_pika.py

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

3+
34
try:
4-
import aio_pika
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 wrapt
16+
1617
from instana.log import logger
1718
from instana.propagators.format import Format
18-
from instana.util.traceutils import get_tracer_tuple, tracing_is_off
19-
from instana.singletons import tracer
19+
from instana.singletons import get_tracer
20+
from instana.util.traceutils import get_tracer_tuple
2021

2122
if TYPE_CHECKING:
22-
from instana.span.span import InstanaSpan
23+
from aio_pika.abc import AbstractMessage, ConsumerTag
2324
from aio_pika.exchange import Exchange
24-
from aiormq.abc import ConfirmationFrameType
25-
from aio_pika.abc import ConsumerTag, AbstractMessage
2625
from aio_pika.queue import Queue, QueueIterator
26+
from aiormq.abc import ConfirmationFrameType
27+
28+
from instana.span.span import InstanaSpan
2729

2830
def _extract_span_attributes(
2931
span: "InstanaSpan", connection, sort: str, routing_key: str, exchange: str
@@ -41,10 +43,10 @@ async def publish_with_instana(
4143
args: Tuple[object],
4244
kwargs: Dict[str, Any],
4345
) -> Optional["ConfirmationFrameType"]:
44-
if tracing_is_off():
46+
tracer, parent_span, _ = get_tracer_tuple()
47+
if not tracer:
4548
return await wrapped(*args, **kwargs)
4649

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

5052
def _bind_args(
@@ -54,10 +56,8 @@ def _bind_args(
5456
**kwargs: object,
5557
) -> Tuple[object, ...]:
5658
return (message, routing_key, args, kwargs)
57-
58-
(message, routing_key, args, kwargs) = _bind_args(
59-
*args, **kwargs
60-
)
59+
60+
(message, routing_key, args, kwargs) = _bind_args(*args, **kwargs)
6161

6262
with tracer.start_as_current_span(
6363
"rabbitmq", span_context=parent_context
@@ -91,6 +91,8 @@ async def consume_with_instana(
9191
args: Tuple[object],
9292
kwargs: Dict[str, Any],
9393
) -> "ConsumerTag":
94+
tracer = get_tracer()
95+
9496
connection = instance.channel._connection
9597
callback = kwargs["callback"] if kwargs.get("callback") else args[0]
9698

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: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# (c) Copyright IBM Corp. 2025
2+
3+
24
try:
35
from typing import TYPE_CHECKING, Any, Callable, Dict, Sequence, Tuple, Type
46

@@ -12,22 +14,24 @@
1214
from botocore.client import BaseClient
1315

1416
from instana.span.span import InstanaSpan
17+
from instana.tracer import InstanaTracer
1518

1619
import json
1720

1821
import wrapt
1922

2023
from instana.log import logger
2124
from instana.propagators.format import Format
22-
from instana.singletons import tracer
23-
from instana.span.span import get_current_span
2425
from instana.util.traceutils import (
2526
extract_custom_headers,
2627
get_tracer_tuple,
27-
tracing_is_off,
2828
)
2929

30-
def lambda_inject_context(payload: Dict[str, Any], span: "InstanaSpan") -> None:
30+
def lambda_inject_context(
31+
tracer: "InstanaTracer",
32+
payload: Dict[str, Any],
33+
span: "InstanaSpan",
34+
) -> None:
3135
"""
3236
When boto3 lambda client 'Invoke' is called, we want to inject the tracing context.
3337
boto3/botocore has specific requirements:
@@ -51,9 +55,9 @@ def emit_add_auth_with_instana(
5155
args: Tuple[object],
5256
kwargs: Dict[str, Any],
5357
) -> Callable[..., None]:
54-
current_span = get_current_span()
55-
if not tracing_is_off() and current_span and current_span.is_recording():
56-
extract_custom_headers(current_span, args[0].headers)
58+
_, parent_span, _ = get_tracer_tuple()
59+
if parent_span:
60+
extract_custom_headers(parent_span, args[0].headers)
5761
return wrapped(*args, **kwargs)
5862

5963
@wrapt.patch_function_wrapper("botocore.client", "BaseClient._make_api_call")
@@ -63,12 +67,11 @@ def make_api_call_with_instana(
6367
args: Sequence[Dict[str, Any]],
6468
kwargs: Dict[str, Any],
6569
) -> Dict[str, Any]:
70+
tracer, parent_span, _ = get_tracer_tuple()
6671
# If we're not tracing, just return
67-
if tracing_is_off():
72+
if not tracer:
6873
return wrapped(*args, **kwargs)
6974

70-
tracer, parent_span, _ = get_tracer_tuple()
71-
7275
parent_context = parent_span.get_span_context() if parent_span else None
7376

7477
if instance.meta.service_model.service_name == "dynamodb":
@@ -98,7 +101,7 @@ def make_api_call_with_instana(
98101

99102
# Inject context when invoking lambdas
100103
if "lambda" in instance._endpoint.host and operation == "Invoke":
101-
lambda_inject_context(payload, span)
104+
lambda_inject_context(tracer, payload, span)
102105

103106
try:
104107
result = wrapped(*args, **kwargs)

0 commit comments

Comments
 (0)