Skip to content

Commit 3d403f5

Browse files
RD-3794 - clean the wrapping line when reporting an error (#176)
* clean the wrapping line when reporting an error
1 parent dd8e084 commit 3d403f5

File tree

3 files changed

+33
-2
lines changed

3 files changed

+33
-2
lines changed

src/lumigo_tracer/lumigo_utils.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from contextlib import contextmanager
1515
from base64 import b64encode
1616
import inspect
17+
import traceback
1718

1819
try:
1920
import botocore
@@ -66,6 +67,7 @@
6667
ERROR_SIZE_LIMIT_MULTIPLIER = 2
6768
CHINA_REGION = "cn-northwest-1"
6869
EDGE_KINESIS_STREAM_NAME = "prod_trc-inges-edge_edge-kinesis-stream"
70+
STACKTRACE_LINE_TO_DROP = "lumigo_tracer/tracer.py"
6971
Container = TypeVar("Container", dict, list)
7072

7173
_logger: Dict[str, logging.Logger] = {}
@@ -701,3 +703,8 @@ def is_aws_arn(string_to_validate: Optional[str]) -> bool:
701703

702704
def is_provision_concurrency_initialization() -> bool:
703705
return os.environ.get("AWS_LAMBDA_INITIALIZATION_TYPE") == "provisioned-concurrency"
706+
707+
708+
def get_stacktrace(exception: Exception) -> str:
709+
original_traceback = traceback.format_tb(exception.__traceback__)
710+
return "".join(filter(lambda line: STACKTRACE_LINE_TO_DROP not in line, original_traceback))

src/lumigo_tracer/spans_container.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import time
77
import uuid
88
import signal
9-
import traceback
109
from typing import List, Dict, Optional, Callable, Set
1110

1211
from lumigo_tracer.event.event_dumper import EventDumper
@@ -24,6 +23,7 @@
2423
get_current_ms_time,
2524
get_region,
2625
is_provision_concurrency_initialization,
26+
get_stacktrace,
2727
)
2828
from lumigo_tracer import lumigo_utils
2929
from lumigo_tracer.parsing_utils import parse_trace_id, safe_split_get, recursive_json_join
@@ -202,7 +202,7 @@ def add_exception_event(
202202
self.function_span["error"] = self._create_exception_event(
203203
exc_type=exception.__class__.__name__,
204204
message=message,
205-
stacktrace=traceback.format_exc(),
205+
stacktrace=get_stacktrace(exception),
206206
frames=format_frames(frames_infos) if Configuration.verbose else [],
207207
)
208208

src/test/unit/test_tracer.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import datetime
22
import json
3+
import re
4+
import traceback
35
from decimal import Decimal
46
import http.client
57
import os
@@ -439,3 +441,25 @@ def lambda_test_function(event, context):
439441
aws_secret_access_key=secret_access_key,
440442
config=ANY,
441443
)
444+
445+
446+
def test_lumigo_tracer_doesnt_change_exception(context):
447+
@lumigo_tracer(token="123")
448+
def wrapped(event, context):
449+
raise Exception("Inner exception")
450+
451+
with pytest.raises(Exception):
452+
wrapped({}, context)
453+
454+
def wrapped(event, context):
455+
raise Exception("Inner exception")
456+
457+
with pytest.raises(Exception) as e:
458+
wrapped({}, context)
459+
460+
stacktrace = SpansContainer.get_span().function_span["error"]["stacktrace"]
461+
assert "lumigo_tracer/tracer.py" not in stacktrace
462+
line_dropper = re.compile(r"\d{3}")
463+
from_lumigo = line_dropper.sub("-", stacktrace)
464+
original = line_dropper.sub("-", traceback.format_tb(e.value.__traceback__)[1])
465+
assert from_lumigo == original

0 commit comments

Comments
 (0)