From fb4c330c0609b575123f4eb8ea5d26bc23eb81dc Mon Sep 17 00:00:00 2001 From: Christophe Papazian <114495376+christophe-papazian@users.noreply.github.com> Date: Tue, 28 Jan 2025 13:25:27 +0100 Subject: [PATCH 01/23] [python] ASM standalone from flaky to bug (#3905) --- tests/appsec/test_asm_standalone.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/appsec/test_asm_standalone.py b/tests/appsec/test_asm_standalone.py index b45e63f832..45328214c7 100644 --- a/tests/appsec/test_asm_standalone.py +++ b/tests/appsec/test_asm_standalone.py @@ -4,7 +4,7 @@ from requests.structures import CaseInsensitiveDict from utils.telemetry_utils import TelemetryUtils -from utils import context, weblog, interfaces, scenarios, features, rfc, bug, flaky, missing_feature +from utils import context, weblog, interfaces, scenarios, features, rfc, bug, missing_feature class AsmStandalone_UpstreamPropagation_Base(ABC): @@ -744,7 +744,6 @@ def test_app_dependencies_loaded(self): @rfc("https://docs.google.com/document/d/12NBx-nD-IoQEMiCRnJXneq4Be7cbtSc6pJLOFUWTpNE/edit") @features.appsec_standalone @scenarios.appsec_standalone -@flaky(context.library >= "python@2.18.0+dev", reason="APPSEC-56142") class Test_AppSecStandalone_UpstreamPropagation(AppSecStandalone_UpstreamPropagation_Base): """APPSEC correctly propagates AppSec events in distributing tracing with DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED=true.""" @@ -758,7 +757,6 @@ def propagated_tag_value(self): @rfc("https://docs.google.com/document/d/12NBx-nD-IoQEMiCRnJXneq4Be7cbtSc6pJLOFUWTpNE/edit") @features.appsec_standalone_v2 @scenarios.appsec_standalone_v2 -@flaky(context.library >= "python@2.18.0+dev", reason="APPSEC-56142") class Test_AppSecStandalone_UpstreamPropagation_V2(AppSecStandalone_UpstreamPropagation_Base): """APPSEC correctly propagates AppSec events in distributing tracing with DD_APM_TRACING_ENABLED=false.""" From b0be1c1a01c78539fe2678bedbee0a6d62444a82 Mon Sep 17 00:00:00 2001 From: Mikayla Toffler <46911781+mtoffl01@users.noreply.github.com> Date: Tue, 28 Jan 2025 11:51:55 -0500 Subject: [PATCH 02/23] [Golang] Enable Test_Config_ClientTagQueryString tests (#3900) --- manifests/golang.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manifests/golang.yml b/manifests/golang.yml index 0412dee676..2ee5667d62 100644 --- a/manifests/golang.yml +++ b/manifests/golang.yml @@ -589,8 +589,8 @@ tests/: Test_Config_ClientIPHeaderEnabled_False: v1.70.1 Test_Config_ClientIPHeader_Configured: v1.60.0 Test_Config_ClientIPHeader_Precedence: v1.69.0 - Test_Config_ClientTagQueryString_Configured: missing_feature (supports DD_TRACE_HTTP_URL_QUERY_STRING_DISABLED) - Test_Config_ClientTagQueryString_Empty: bug (APMAPI-966) # DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING is disabled by default + Test_Config_ClientTagQueryString_Configured: v1.72.0-dev + Test_Config_ClientTagQueryString_Empty: v1.72.0-dev Test_Config_HttpClientErrorStatuses_Default: v1.69.0 Test_Config_HttpClientErrorStatuses_FeatureFlagCustom: v1.69.0 Test_Config_HttpServerErrorStatuses_Default: v1.67.0 From 86f79e90d0b692e24e6e83d73ad9869b5fab609c Mon Sep 17 00:00:00 2001 From: Attila Szegedi Date: Tue, 28 Jan 2025 17:55:28 +0100 Subject: [PATCH 03/23] Fix retry logic for profiling tests with a content validator (#3901) --- utils/onboarding/backend_interface.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/utils/onboarding/backend_interface.py b/utils/onboarding/backend_interface.py index bb3a83f305..2ab6063c29 100644 --- a/utils/onboarding/backend_interface.py +++ b/utils/onboarding/backend_interface.py @@ -53,6 +53,7 @@ def _make_request( retry_delay=1, backoff_factor=2, max_retries=8, + validator=None, ): """Make a request to the backend with retries and backoff. With the defaults, this will retry for approximately 5 minutes.""" start_time = time.perf_counter() @@ -61,8 +62,10 @@ def _make_request( r = requests.request(method=method, url=url, headers=headers, json=json, timeout=request_timeout) logger.debug(f" Backend response status for url [{url}]: [{r.status_code}]") if r.status_code == 200: - return r.json() - + response_json = r.json() + if not validator or validator(response_json): + return response_json + logger.debug(f" Backend response does not meet expectation for url [{url}]: [{r.text}]") if r.status_code == 429: retry_after = _parse_retry_after(r.headers) logger.debug(f" Received 429 for url [{url}], rate limit reset in: [{retry_after}]") @@ -73,7 +76,7 @@ def _make_request( except requests.exceptions.RequestException as e: logger.error(f"Error received connecting to url: [{url}] {e} ") - logger.debug(f" Received unsuccessful status code for [{url}], retrying in: [{retry_delay}]") + logger.debug(f" Received unsuccessful response for [{url}], retrying in: [{retry_delay}]") # Avoid sleeping if we are going to hit the overall timeout. if time.perf_counter() + retry_delay - start_time >= overall_timeout: @@ -104,6 +107,11 @@ def _parse_retry_after(headers): return -1 +def _validate_profiler_response(json): + data = json["data"] + return isinstance(data, list) and len(data) > 0 + + def _query_for_profile(runtime_id): url = f"{API_HOST}/api/unstable/profiles/list" headers = _headers() @@ -121,7 +129,7 @@ def _query_for_profile(runtime_id): } logger.debug(f"Posting to {url} with query: {queryJson}") - data = _make_request(url, headers=headers, method="post", json=queryJson)["data"] - - # Check if we got any profile events - return bool(isinstance(data, list) and len(data) > 0) + profileId = _make_request( + url, headers=headers, method="post", json=queryJson, validator=_validate_profiler_response + )["data"][0]["id"] + logger.debug(f"Found profile in the backend with ID: {profileId}") From efb37ae0ad09563d805c6621256075935bd088a0 Mon Sep 17 00:00:00 2001 From: "Alexander S." Date: Tue, 28 Jan 2025 19:20:00 +0200 Subject: [PATCH 04/23] [Debugger] Update java ER approvals + fix recursion top layer existence test (#3897) --- ..._replay_async_java_snapshots_expected.json | 49 - ...eplay_async_python_snapshots_expected.json | 4 +- ..._replay_inner_java_snapshots_expected.json | 466 +- ...eplay_inner_python_snapshots_expected.json | 2 +- ..._multiframe_dotnet_snapshots_expected.json | 36 +- ...ay_multiframe_java_snapshots_expected.json | 336 +- ..._multiframe_python_snapshots_expected.json | 8 +- ...ecursion_20_dotnet_snapshots_expected.json | 80 +- ..._recursion_20_java_snapshots_expected.json | 5138 ++--------------- ...ecursion_20_python_snapshots_expected.json | 44 +- ...recursion_3_dotnet_snapshots_expected.json | 84 +- ...y_recursion_3_java_snapshots_expected.json | 478 +- ...recursion_3_python_snapshots_expected.json | 10 +- ...recursion_5_dotnet_snapshots_expected.json | 142 +- ...y_recursion_5_java_snapshots_expected.json | 766 +-- ...recursion_5_python_snapshots_expected.json | 14 +- ...paperscissors_java_snapshots_expected.json | 396 -- ...perscissors_python_snapshots_expected.json | 6 +- ...replay_simple_java_snapshots_expected.json | 62 - ...play_simple_python_snapshots_expected.json | 2 +- .../test_debugger_exception_replay.py | 51 +- 21 files changed, 693 insertions(+), 7481 deletions(-) diff --git a/tests/debugger/approvals/exception_replay_async_java_snapshots_expected.json b/tests/debugger/approvals/exception_replay_async_java_snapshots_expected.json index 794d8842f5..5af91fdd85 100644 --- a/tests/debugger/approvals/exception_replay_async_java_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_async_java_snapshots_expected.json @@ -1,53 +1,4 @@ [ - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": {}, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"Async exception\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.lambda$asyncThrow$0", - "lineNumber": 75 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "lambda$asyncThrow$0", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.lambda$asyncThrow$0", - "lineNumber": 75 - }, - { - "": "" - } - ], - "timestamp": "" - }, { "captures": { "entry": { diff --git a/tests/debugger/approvals/exception_replay_async_python_snapshots_expected.json b/tests/debugger/approvals/exception_replay_async_python_snapshots_expected.json index 13919da325..1d1620e78b 100644 --- a/tests/debugger/approvals/exception_replay_async_python_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_async_python_snapshots_expected.json @@ -58,7 +58,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -119,6 +119,6 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" } ] \ No newline at end of file diff --git a/tests/debugger/approvals/exception_replay_inner_java_snapshots_expected.json b/tests/debugger/approvals/exception_replay_inner_java_snapshots_expected.json index 245e0920be..47be1b5fdc 100644 --- a/tests/debugger/approvals/exception_replay_inner_java_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_inner_java_snapshots_expected.json @@ -13,452 +13,7 @@ "fields": {} } }, - "locals": { - "ex": { - "type": "org.springframework.web.server.ResponseStatusException", - "fields": { - "status": { - "type": "int", - "value": "500" - }, - "reason": { - "type": "java.lang.String", - "value": "Inner exception" - }, - "backtrace": { - "type": "java.lang.Object[]", - "elements": [ - { - "type": "short[]", - "elements": "", - "size": "32" - }, - { - "type": "int[]", - "elements": "", - "size": "32" - }, - { - "type": "java.lang.Object[]", - "elements": [ - { - "type": "java.lang.Class", - "value": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - }, - { - "": "" - } - ], - "size": "32" - }, - { - "type": "long[]", - "elements": "", - "size": "32" - }, - { - "type": "java.lang.Object[]", - "elements": [ - { - "type": "short[]", - "notCapturedReason": "depth" - }, - { - "type": "int[]", - "notCapturedReason": "depth" - }, - { - "type": "java.lang.Object[]", - "notCapturedReason": "depth" - }, - { - "type": "long[]", - "notCapturedReason": "depth" - }, - { - "type": "java.lang.Object[]", - "notCapturedReason": "depth" - }, - { - "": "" - } - ], - "size": "5" - }, - { - "": "" - } - ], - "size": "5" - }, - "detailMessage": { - "type": "java.lang.String", - "isNull": true - }, - "cause": { - "type": "java.lang.Throwable", - "isNull": true - }, - "stackTrace": { - "type": "java.lang.StackTraceElement[]", - "elements": [ - { - "type": "java.lang.StackTraceElement", - "fields": { - "declaringClassObject": { - "type": "java.lang.Class", - "isNull": true - }, - "classLoaderName": { - "type": "java.lang.String", - "isNull": true - }, - "moduleName": { - "type": "java.lang.String", - "isNull": true - }, - "moduleVersion": "", - "declaringClass": { - "type": "java.lang.String", - "value": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - }, - "methodName": { - "type": "java.lang.String", - "value": "exceptionReplayInner" - }, - "fileName": { - "type": "java.lang.String", - "value": "ExceptionReplayController.java" - }, - "lineNumber": { - "type": "java.lang.Integer", - "value": "32" - }, - "format": { - "type": "byte", - "value": "0" - } - } - }, - { - "type": "java.lang.StackTraceElement", - "fields": { - "declaringClassObject": { - "type": "java.lang.Class", - "isNull": true - }, - "classLoaderName": { - "type": "java.lang.String", - "isNull": true - }, - "moduleName": { - "type": "java.lang.String", - "isNull": true - }, - "moduleVersion": "", - "declaringClass": { - "type": "java.lang.String", - "value": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter" - }, - "methodName": { - "type": "java.lang.String", - "value": "doFilterInternal" - }, - "fileName": { - "type": "java.lang.String", - "value": "HandlerMappingResourceNameFilter.java" - }, - "lineNumber": { - "type": "java.lang.Integer", - "value": "50" - }, - "format": { - "type": "byte", - "value": "0" - } - } - }, - { - "": "" - } - ], - "size": "94" - }, - "depth": { - "type": "int", - "value": "94" - }, - "suppressedExceptions": { - "type": "java.lang.Throwable[]", - "elements": [], - "size": "0" - } - } - } - }, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"Outer exception\"; nested exception is org.springframework.web.server.ResponseStatusException: 500 INTERNAL_SERVER_ERROR \"Inner exception\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayInner", - "lineNumber": 34 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - }, - "caughtExceptions": [ - { - "message": "500 INTERNAL_SERVER_ERROR \"Inner exception\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayInner", - "lineNumber": 32 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - ] - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayInner", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayInner", - "lineNumber": 34 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - } - }, - "locals": { - "ex": { - "type": "org.springframework.web.server.ResponseStatusException", - "fields": { - "status": { - "type": "int", - "value": "500" - }, - "reason": { - "type": "java.lang.String", - "value": "Inner exception" - }, - "backtrace": { - "type": "java.lang.Object[]", - "elements": [ - { - "type": "short[]", - "elements": "", - "size": "32" - }, - { - "type": "int[]", - "elements": "", - "size": "32" - }, - { - "type": "java.lang.Object[]", - "elements": [ - { - "type": "java.lang.Class", - "value": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - }, - { - "": "" - } - ], - "size": "32" - }, - { - "type": "long[]", - "elements": "", - "size": "32" - }, - { - "type": "java.lang.Object[]", - "elements": [ - { - "type": "short[]", - "notCapturedReason": "depth" - }, - { - "type": "int[]", - "notCapturedReason": "depth" - }, - { - "type": "java.lang.Object[]", - "notCapturedReason": "depth" - }, - { - "type": "long[]", - "notCapturedReason": "depth" - }, - { - "type": "java.lang.Object[]", - "notCapturedReason": "depth" - }, - { - "": "" - } - ], - "size": "5" - }, - { - "": "" - } - ], - "size": "5" - }, - "detailMessage": { - "type": "java.lang.String", - "isNull": true - }, - "cause": { - "type": "java.lang.Throwable", - "isNull": true - }, - "stackTrace": { - "type": "java.lang.StackTraceElement[]", - "elements": [ - { - "type": "java.lang.StackTraceElement", - "fields": { - "declaringClassObject": { - "type": "java.lang.Class", - "isNull": true - }, - "classLoaderName": { - "type": "java.lang.String", - "isNull": true - }, - "moduleName": { - "type": "java.lang.String", - "isNull": true - }, - "moduleVersion": "", - "declaringClass": { - "type": "java.lang.String", - "value": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - }, - "methodName": { - "type": "java.lang.String", - "value": "exceptionReplayInner" - }, - "fileName": { - "type": "java.lang.String", - "value": "ExceptionReplayController.java" - }, - "lineNumber": { - "type": "java.lang.Integer", - "value": "32" - }, - "format": { - "type": "byte", - "value": "0" - } - } - }, - { - "type": "java.lang.StackTraceElement", - "fields": { - "declaringClassObject": { - "type": "java.lang.Class", - "isNull": true - }, - "classLoaderName": { - "type": "java.lang.String", - "isNull": true - }, - "moduleName": { - "type": "java.lang.String", - "isNull": true - }, - "moduleVersion": "", - "declaringClass": { - "type": "java.lang.String", - "value": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter" - }, - "methodName": { - "type": "java.lang.String", - "value": "doFilterInternal" - }, - "fileName": { - "type": "java.lang.String", - "value": "HandlerMappingResourceNameFilter.java" - }, - "lineNumber": { - "type": "java.lang.Integer", - "value": "50" - }, - "format": { - "type": "byte", - "value": "0" - } - } - }, - { - "": "" - } - ], - "size": "94" - }, - "depth": { - "type": "int", - "value": "94" - }, - "suppressedExceptions": { - "type": "java.lang.Throwable[]", - "elements": [], - "size": "0" - } - } - } - }, "staticFields": {}, "throwable": { "message": "500 INTERNAL_SERVER_ERROR \"Outer exception\"; nested exception is org.springframework.web.server.ResponseStatusException: 500 INTERNAL_SERVER_ERROR \"Inner exception\"", @@ -477,26 +32,7 @@ ], "type": "org.springframework.web.server.ResponseStatusException" } - }, - "caughtExceptions": [ - { - "message": "500 INTERNAL_SERVER_ERROR \"Inner exception\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayInner", - "lineNumber": 32 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - ] + } }, "exceptionId": "", "id": "", diff --git a/tests/debugger/approvals/exception_replay_inner_python_snapshots_expected.json b/tests/debugger/approvals/exception_replay_inner_python_snapshots_expected.json index b99da92da3..4e59c94ad1 100644 --- a/tests/debugger/approvals/exception_replay_inner_python_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_inner_python_snapshots_expected.json @@ -57,6 +57,6 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" } ] \ No newline at end of file diff --git a/tests/debugger/approvals/exception_replay_multiframe_dotnet_snapshots_expected.json b/tests/debugger/approvals/exception_replay_multiframe_dotnet_snapshots_expected.json index bd78286833..b98c59d389 100644 --- a/tests/debugger/approvals/exception_replay_multiframe_dotnet_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_multiframe_dotnet_snapshots_expected.json @@ -77,11 +77,16 @@ "id": "", "version": 1, "location": { - "method": "ExceptionReplayMultiframe", + "method": "DeepFunctionA", "type": "weblog.ExceptionReplayController" } }, "stack": [ + { + "function": "weblog.ExceptionReplayController.DeepFunctionA", + "fileName": "/app/ExceptionReplayController.cs", + "lineNumber": 91 + }, { "function": "weblog.ExceptionReplayController.ExceptionReplayMultiframe", "fileName": "/app/ExceptionReplayController.cs", @@ -125,6 +130,10 @@ "function": "weblog.ExceptionReplayController.DeepFunctionB", "lineNumber": 0 }, + { + "function": "weblog.ExceptionReplayController.DeepFunctionA", + "lineNumber": 0 + }, { "": "" } @@ -174,16 +183,11 @@ "id": "", "version": 1, "location": { - "method": "DeepFunctionC", + "method": "DeepFunctionB", "type": "weblog.ExceptionReplayController" } }, "stack": [ - { - "function": "weblog.ExceptionReplayController.DeepFunctionC", - "fileName": "/app/ExceptionReplayController.cs", - "lineNumber": 80 - }, { "function": "weblog.ExceptionReplayController.DeepFunctionB", "fileName": "/app/ExceptionReplayController.cs", @@ -237,10 +241,6 @@ "function": "weblog.ExceptionReplayController.DeepFunctionB", "lineNumber": 0 }, - { - "function": "weblog.ExceptionReplayController.DeepFunctionA", - "lineNumber": 0 - }, { "": "" } @@ -290,11 +290,16 @@ "id": "", "version": 1, "location": { - "method": "DeepFunctionB", + "method": "DeepFunctionC", "type": "weblog.ExceptionReplayController" } }, "stack": [ + { + "function": "weblog.ExceptionReplayController.DeepFunctionC", + "fileName": "/app/ExceptionReplayController.cs", + "lineNumber": 80 + }, { "function": "weblog.ExceptionReplayController.DeepFunctionB", "fileName": "/app/ExceptionReplayController.cs", @@ -405,16 +410,11 @@ "id": "", "version": 1, "location": { - "method": "DeepFunctionA", + "method": "ExceptionReplayMultiframe", "type": "weblog.ExceptionReplayController" } }, "stack": [ - { - "function": "weblog.ExceptionReplayController.DeepFunctionA", - "fileName": "/app/ExceptionReplayController.cs", - "lineNumber": 91 - }, { "function": "weblog.ExceptionReplayController.ExceptionReplayMultiframe", "fileName": "/app/ExceptionReplayController.cs", diff --git a/tests/debugger/approvals/exception_replay_multiframe_java_snapshots_expected.json b/tests/debugger/approvals/exception_replay_multiframe_java_snapshots_expected.json index cad939f0b3..b37cbd8706 100644 --- a/tests/debugger/approvals/exception_replay_multiframe_java_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_multiframe_java_snapshots_expected.json @@ -54,190 +54,14 @@ "version": 0, "location": { "lines": [], - "method": "deepFunctionC", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionC", - "lineNumber": 56 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionB", - "lineNumber": 60 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionA", - "lineNumber": 64 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayMultiframe", - "lineNumber": 69 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"multiple stack frames exception\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionC", - "lineNumber": 56 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionB", - "lineNumber": 60 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionA", - "lineNumber": 64 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayMultiframe", - "lineNumber": 69 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "deepFunctionC", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionC", - "lineNumber": 56 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionB", - "lineNumber": 60 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionA", - "lineNumber": 64 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayMultiframe", - "lineNumber": 69 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"multiple stack frames exception\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionC", - "lineNumber": 56 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionB", - "lineNumber": 60 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionA", - "lineNumber": 64 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayMultiframe", - "lineNumber": 69 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "deepFunctionB", + "method": "deepFunctionA", "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" } }, "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionB", - "lineNumber": 61 - }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionA", - "lineNumber": 64 + "lineNumber": 65 }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayMultiframe", @@ -390,92 +214,22 @@ "version": 0, "location": { "lines": [], - "method": "deepFunctionA", + "method": "deepFunctionC", "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" } }, "stack": [ { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionA", - "lineNumber": 65 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayMultiframe", - "lineNumber": 69 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionC", + "lineNumber": 56 }, { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionB", + "lineNumber": 60 }, - "return": { - "arguments": { - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"multiple stack frames exception\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionC", - "lineNumber": 56 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionB", - "lineNumber": 60 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionA", - "lineNumber": 64 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayMultiframe", - "lineNumber": 69 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "deepFunctionA", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionA", - "lineNumber": 65 + "lineNumber": 64 }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayMultiframe", @@ -491,80 +245,6 @@ ], "timestamp": "" }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"multiple stack frames exception\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionC", - "lineNumber": 56 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionB", - "lineNumber": 60 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.deepFunctionA", - "lineNumber": 64 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayMultiframe", - "lineNumber": 69 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayMultiframe", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayMultiframe", - "lineNumber": 70 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, { "captures": { "entry": { diff --git a/tests/debugger/approvals/exception_replay_multiframe_python_snapshots_expected.json b/tests/debugger/approvals/exception_replay_multiframe_python_snapshots_expected.json index a6cfe5066d..b381f663af 100644 --- a/tests/debugger/approvals/exception_replay_multiframe_python_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_multiframe_python_snapshots_expected.json @@ -68,7 +68,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -144,7 +144,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -225,7 +225,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -311,6 +311,6 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" } ] \ No newline at end of file diff --git a/tests/debugger/approvals/exception_replay_recursion_20_dotnet_snapshots_expected.json b/tests/debugger/approvals/exception_replay_recursion_20_dotnet_snapshots_expected.json index 5bebef38a0..f0fcf49c87 100644 --- a/tests/debugger/approvals/exception_replay_recursion_20_dotnet_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_recursion_20_dotnet_snapshots_expected.json @@ -184,6 +184,18 @@ "message": "recursion exception depth 20", "type": "System.Exception", "stacktrace": [ + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 0 + }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 0 + }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 0 + }, { "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 0 @@ -236,7 +248,7 @@ }, "currentDepth": { "type": "Int32", - "value": "0" + "value": "3" }, "this": { "type": "ExceptionReplayController", @@ -344,21 +356,6 @@ "fileName": "/app/ExceptionReplayController.cs", "lineNumber": 38 }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "fileName": "/app/ExceptionReplayController.cs", - "lineNumber": 38 - }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "fileName": "/app/ExceptionReplayController.cs", - "lineNumber": 38 - }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "fileName": "/app/ExceptionReplayController.cs", - "lineNumber": 38 - }, { "function": "Datadog.Trace.ClrProfiler.AutoInstrumentation.AspNetCore.BlockingMiddleware+", "lineNumber": 0 @@ -401,6 +398,10 @@ "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 0 }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 0 + }, { "": "" } @@ -445,7 +446,7 @@ }, "currentDepth": { "type": "Int32", - "value": "1" + "value": "2" }, "this": { "type": "ExceptionReplayController", @@ -558,11 +559,6 @@ "fileName": "/app/ExceptionReplayController.cs", "lineNumber": 38 }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "fileName": "/app/ExceptionReplayController.cs", - "lineNumber": 38 - }, { "function": "Datadog.Trace.ClrProfiler.AutoInstrumentation.AspNetCore.BlockingMiddleware+", "lineNumber": 0 @@ -605,10 +601,6 @@ "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 0 }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 0 - }, { "": "" } @@ -653,7 +645,7 @@ }, "currentDepth": { "type": "Int32", - "value": "2" + "value": "1" }, "this": { "type": "ExceptionReplayController", @@ -766,6 +758,11 @@ "fileName": "/app/ExceptionReplayController.cs", "lineNumber": 38 }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "fileName": "/app/ExceptionReplayController.cs", + "lineNumber": 38 + }, { "function": "Datadog.Trace.ClrProfiler.AutoInstrumentation.AspNetCore.BlockingMiddleware+", "lineNumber": 0 @@ -796,18 +793,6 @@ "message": "recursion exception depth 20", "type": "System.Exception", "stacktrace": [ - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 0 - }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 0 - }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 0 - }, { "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 0 @@ -860,7 +845,7 @@ }, "currentDepth": { "type": "Int32", - "value": "3" + "value": "0" }, "this": { "type": "ExceptionReplayController", @@ -968,6 +953,21 @@ "fileName": "/app/ExceptionReplayController.cs", "lineNumber": 38 }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "fileName": "/app/ExceptionReplayController.cs", + "lineNumber": 38 + }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "fileName": "/app/ExceptionReplayController.cs", + "lineNumber": 38 + }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "fileName": "/app/ExceptionReplayController.cs", + "lineNumber": 38 + }, { "function": "Datadog.Trace.ClrProfiler.AutoInstrumentation.AspNetCore.BlockingMiddleware+", "lineNumber": 0 diff --git a/tests/debugger/approvals/exception_replay_recursion_20_java_snapshots_expected.json b/tests/debugger/approvals/exception_replay_recursion_20_java_snapshots_expected.json index e8db921aa4..c755e82e96 100644 --- a/tests/debugger/approvals/exception_replay_recursion_20_java_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_recursion_20_java_snapshots_expected.json @@ -158,13 +158,17 @@ }, "return": { "arguments": { - "depth": { + "currentDepth": { "type": "java.lang.Integer", "value": "20" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", "fields": {} + }, + "originalDepth": { + "type": "java.lang.Integer", + "value": "20" } }, "locals": {}, @@ -280,11 +284,15 @@ "version": 0, "location": { "lines": [], - "method": "exceptionReplayRecursion", + "method": "exceptionReplayRecursionHelper", "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" } }, "stack": [ + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 25 + }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -310,7 +318,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "0" + "value": "19" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -447,82 +455,6 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -548,7 +480,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "1" + "value": "18" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -689,74 +621,6 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -782,7 +646,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "2" + "value": "17" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -927,66 +791,6 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -1012,7 +816,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "3" + "value": "16" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -1162,83 +966,31 @@ "lineNumber": 23 }, { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", + "lineNumber": 18 }, { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 + "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", + "lineNumber": 50 }, { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} + "": "" + } + ], + "timestamp": "" + }, + { + "captures": { + "entry": { + "arguments": {}, + "locals": {}, + "staticFields": {} }, "return": { "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "4" + "value": "15" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -1391,50 +1143,6 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -1460,7 +1168,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "5" + "value": "14" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -1617,42 +1325,6 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -1678,7 +1350,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "6" + "value": "13" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -1839,34 +1511,6 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -1892,7 +1536,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "7" + "value": "12" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -2057,26 +1701,6 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -2102,7 +1726,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "8" + "value": "11" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -2271,18 +1895,6 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -2308,7 +1920,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "9" + "value": "10" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -2481,10 +2093,6 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -2510,7 +2118,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "10" + "value": "9" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -2683,6 +2291,10 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -2708,7 +2320,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "11" + "value": "8" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -2877,6 +2489,18 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -2902,7 +2526,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "12" + "value": "7" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -3067,6 +2691,26 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -3092,7 +2736,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "13" + "value": "6" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -3254,12 +2898,40 @@ "lineNumber": 23 }, { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 }, { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", + "lineNumber": 18 + }, + { + "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", + "lineNumber": 50 }, { "": "" @@ -3278,7 +2950,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "14" + "value": "5" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -3435,6 +3107,42 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -3460,7 +3168,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "15" + "value": "4" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -3613,6 +3321,50 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -3638,7 +3390,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "16" + "value": "3" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -3787,6 +3539,58 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -3812,7 +3616,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "17" + "value": "2" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -3957,6 +3761,66 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -3982,7 +3846,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "18" + "value": "1" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -4124,3988 +3988,16 @@ "lineNumber": 23 }, { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 }, { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 }, { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "19" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "20" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "0" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "1" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "2" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "3" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "4" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "5" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "6" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "7" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "8" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "9" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "10" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "11" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "12" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "13" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "14" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "15" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "16" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "17" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", @@ -8115,163 +4007,9 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "18" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 + "lineNumber": 23 }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", @@ -8282,162 +4020,36 @@ "lineNumber": 23 }, { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 }, { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 }, { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "19" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "20" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 20\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", @@ -8468,7 +4080,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "20" + "value": "0" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -8601,6 +4213,86 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 25 }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 diff --git a/tests/debugger/approvals/exception_replay_recursion_20_python_snapshots_expected.json b/tests/debugger/approvals/exception_replay_recursion_20_python_snapshots_expected.json index dc59194fcc..5597b51cb5 100644 --- a/tests/debugger/approvals/exception_replay_recursion_20_python_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_recursion_20_python_snapshots_expected.json @@ -162,7 +162,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -337,7 +337,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -517,7 +517,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -702,7 +702,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -892,7 +892,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -1087,7 +1087,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -1287,7 +1287,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -1492,7 +1492,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -1702,7 +1702,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -1917,7 +1917,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -2137,7 +2137,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -2362,7 +2362,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -2592,7 +2592,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -2827,7 +2827,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -3067,7 +3067,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -3312,7 +3312,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -3562,7 +3562,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -3817,7 +3817,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -4077,7 +4077,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -4342,7 +4342,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -4612,7 +4612,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -4887,6 +4887,6 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" } ] \ No newline at end of file diff --git a/tests/debugger/approvals/exception_replay_recursion_3_dotnet_snapshots_expected.json b/tests/debugger/approvals/exception_replay_recursion_3_dotnet_snapshots_expected.json index b6e260789d..78531a637b 100644 --- a/tests/debugger/approvals/exception_replay_recursion_3_dotnet_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_recursion_3_dotnet_snapshots_expected.json @@ -124,6 +124,18 @@ "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 0 }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 0 + }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 0 + }, + { + "function": "Datadog.Trace.ClrProfiler.AutoInstrumentation.AspNetCore.BlockingMiddleware+", + "lineNumber": 0 + }, { "": "" } @@ -168,7 +180,7 @@ }, "currentDepth": { "type": "Int32", - "value": "0" + "value": "3" }, "this": { "type": "ExceptionReplayController", @@ -186,34 +198,6 @@ } }, "stack": [ - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "fileName": "/app/ExceptionReplayController.cs", - "lineNumber": 38 - }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "fileName": "/app/ExceptionReplayController.cs", - "lineNumber": 38 - }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "fileName": "/app/ExceptionReplayController.cs", - "lineNumber": 38 - }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "fileName": "/app/ExceptionReplayController.cs", - "lineNumber": 38 - }, - { - "function": "Datadog.Trace.ClrProfiler.AutoInstrumentation.AspNetCore.BlockingMiddleware+", - "lineNumber": 0 - }, - { - "function": "Datadog.Trace.ClrProfiler.AutoInstrumentation.AspNetCore.BlockingMiddleware.Invoke", - "lineNumber": 0 - }, { "": "" } @@ -363,18 +347,6 @@ "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 0 }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 0 - }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 0 - }, - { - "function": "Datadog.Trace.ClrProfiler.AutoInstrumentation.AspNetCore.BlockingMiddleware+", - "lineNumber": 0 - }, { "": "" } @@ -419,7 +391,7 @@ }, "currentDepth": { "type": "Int32", - "value": "3" + "value": "0" }, "this": { "type": "ExceptionReplayController", @@ -437,6 +409,34 @@ } }, "stack": [ + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "fileName": "/app/ExceptionReplayController.cs", + "lineNumber": 38 + }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "fileName": "/app/ExceptionReplayController.cs", + "lineNumber": 38 + }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "fileName": "/app/ExceptionReplayController.cs", + "lineNumber": 38 + }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "fileName": "/app/ExceptionReplayController.cs", + "lineNumber": 38 + }, + { + "function": "Datadog.Trace.ClrProfiler.AutoInstrumentation.AspNetCore.BlockingMiddleware+", + "lineNumber": 0 + }, + { + "function": "Datadog.Trace.ClrProfiler.AutoInstrumentation.AspNetCore.BlockingMiddleware.Invoke", + "lineNumber": 0 + }, { "": "" } diff --git a/tests/debugger/approvals/exception_replay_recursion_3_java_snapshots_expected.json b/tests/debugger/approvals/exception_replay_recursion_3_java_snapshots_expected.json index f2cd0ca9e3..ab14e06b8c 100644 --- a/tests/debugger/approvals/exception_replay_recursion_3_java_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_recursion_3_java_snapshots_expected.json @@ -8,17 +8,13 @@ }, "return": { "arguments": { - "currentDepth": { + "depth": { "type": "java.lang.Integer", - "value": "0" + "value": "3" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "3" } }, "locals": {}, @@ -66,27 +62,11 @@ "version": 0, "location": { "lines": [], - "method": "exceptionReplayRecursionHelper", + "method": "exceptionReplayRecursion", "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" } }, "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -112,7 +92,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "1" + "value": "3" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -177,14 +157,6 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 25 }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -304,97 +276,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "3" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "3" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 3\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "0" + "value": "1" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -467,10 +349,6 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -496,7 +374,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "1" + "value": "0" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -569,96 +447,6 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "2" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "3" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 3\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 @@ -676,259 +464,5 @@ } ], "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "3" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "3" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 3\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "depth": { - "type": "java.lang.Integer", - "value": "3" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 3\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursion", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "depth": { - "type": "java.lang.Integer", - "value": "3" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 3\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursion", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" } ] \ No newline at end of file diff --git a/tests/debugger/approvals/exception_replay_recursion_3_python_snapshots_expected.json b/tests/debugger/approvals/exception_replay_recursion_3_python_snapshots_expected.json index d6ce4688e2..d944eab22c 100644 --- a/tests/debugger/approvals/exception_replay_recursion_3_python_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_recursion_3_python_snapshots_expected.json @@ -77,7 +77,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -167,7 +167,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -262,7 +262,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -362,7 +362,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -467,6 +467,6 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" } ] \ No newline at end of file diff --git a/tests/debugger/approvals/exception_replay_recursion_5_dotnet_snapshots_expected.json b/tests/debugger/approvals/exception_replay_recursion_5_dotnet_snapshots_expected.json index e7cdb8021b..ba30ffe502 100644 --- a/tests/debugger/approvals/exception_replay_recursion_5_dotnet_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_recursion_5_dotnet_snapshots_expected.json @@ -132,6 +132,26 @@ "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 0 }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 0 + }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 0 + }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 0 + }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 0 + }, + { + "function": "Datadog.Trace.ClrProfiler.AutoInstrumentation.AspNetCore.BlockingMiddleware+", + "lineNumber": 0 + }, { "": "" } @@ -176,7 +196,7 @@ }, "currentDepth": { "type": "Int32", - "value": "0" + "value": "5" }, "this": { "type": "ExceptionReplayController", @@ -194,44 +214,6 @@ } }, "stack": [ - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "fileName": "/app/ExceptionReplayController.cs", - "lineNumber": 38 - }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "fileName": "/app/ExceptionReplayController.cs", - "lineNumber": 38 - }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "fileName": "/app/ExceptionReplayController.cs", - "lineNumber": 38 - }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "fileName": "/app/ExceptionReplayController.cs", - "lineNumber": 38 - }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "fileName": "/app/ExceptionReplayController.cs", - "lineNumber": 38 - }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "fileName": "/app/ExceptionReplayController.cs", - "lineNumber": 38 - }, - { - "function": "Datadog.Trace.ClrProfiler.AutoInstrumentation.AspNetCore.BlockingMiddleware+", - "lineNumber": 0 - }, - { - "function": "Datadog.Trace.ClrProfiler.AutoInstrumentation.AspNetCore.BlockingMiddleware.Invoke", - "lineNumber": 0 - }, { "": "" } @@ -266,6 +248,10 @@ "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 0 }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 0 + }, { "": "" } @@ -310,7 +296,7 @@ }, "currentDepth": { "type": "Int32", - "value": "1" + "value": "2" }, "this": { "type": "ExceptionReplayController", @@ -348,11 +334,6 @@ "fileName": "/app/ExceptionReplayController.cs", "lineNumber": 38 }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "fileName": "/app/ExceptionReplayController.cs", - "lineNumber": 38 - }, { "function": "Datadog.Trace.ClrProfiler.AutoInstrumentation.AspNetCore.BlockingMiddleware+", "lineNumber": 0 @@ -395,10 +376,6 @@ "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 0 }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 0 - }, { "": "" } @@ -443,7 +420,7 @@ }, "currentDepth": { "type": "Int32", - "value": "2" + "value": "1" }, "this": { "type": "ExceptionReplayController", @@ -481,6 +458,11 @@ "fileName": "/app/ExceptionReplayController.cs", "lineNumber": 38 }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "fileName": "/app/ExceptionReplayController.cs", + "lineNumber": 38 + }, { "function": "Datadog.Trace.ClrProfiler.AutoInstrumentation.AspNetCore.BlockingMiddleware+", "lineNumber": 0 @@ -519,26 +501,6 @@ "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 0 }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 0 - }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 0 - }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 0 - }, - { - "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 0 - }, - { - "function": "Datadog.Trace.ClrProfiler.AutoInstrumentation.AspNetCore.BlockingMiddleware+", - "lineNumber": 0 - }, { "": "" } @@ -583,7 +545,7 @@ }, "currentDepth": { "type": "Int32", - "value": "5" + "value": "0" }, "this": { "type": "ExceptionReplayController", @@ -601,6 +563,44 @@ } }, "stack": [ + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "fileName": "/app/ExceptionReplayController.cs", + "lineNumber": 38 + }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "fileName": "/app/ExceptionReplayController.cs", + "lineNumber": 38 + }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "fileName": "/app/ExceptionReplayController.cs", + "lineNumber": 38 + }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "fileName": "/app/ExceptionReplayController.cs", + "lineNumber": 38 + }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "fileName": "/app/ExceptionReplayController.cs", + "lineNumber": 38 + }, + { + "function": "weblog.ExceptionReplayController.exceptionReplayRecursionHelper", + "fileName": "/app/ExceptionReplayController.cs", + "lineNumber": 38 + }, + { + "function": "Datadog.Trace.ClrProfiler.AutoInstrumentation.AspNetCore.BlockingMiddleware+", + "lineNumber": 0 + }, + { + "function": "Datadog.Trace.ClrProfiler.AutoInstrumentation.AspNetCore.BlockingMiddleware.Invoke", + "lineNumber": 0 + }, { "": "" } diff --git a/tests/debugger/approvals/exception_replay_recursion_5_java_snapshots_expected.json b/tests/debugger/approvals/exception_replay_recursion_5_java_snapshots_expected.json index 80c40908fa..ba38834553 100644 --- a/tests/debugger/approvals/exception_replay_recursion_5_java_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_recursion_5_java_snapshots_expected.json @@ -89,96 +89,6 @@ ], "timestamp": "" }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "depth": { - "type": "java.lang.Integer", - "value": "5" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 5\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursion", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, { "captures": { "entry": { @@ -190,7 +100,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "0" + "value": "5" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -263,26 +173,6 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 25 }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -308,7 +198,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "1" + "value": "4" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -385,18 +275,6 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -422,7 +300,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "2" + "value": "3" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -503,10 +381,6 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -532,7 +406,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "3" + "value": "2" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -613,6 +487,10 @@ "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", "lineNumber": 23 }, + { + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 + }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", "lineNumber": 18 @@ -638,7 +516,7 @@ "arguments": { "currentDepth": { "type": "java.lang.Integer", - "value": "4" + "value": "1" }, "this": { "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", @@ -716,102 +594,16 @@ "lineNumber": 23 }, { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 }, { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} + "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", + "lineNumber": 23 }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "5" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "5" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 5\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 + "lineNumber": 23 }, { "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", @@ -944,535 +736,5 @@ } ], "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "1" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "5" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 5\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "2" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "5" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 5\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "3" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "5" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 5\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "4" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "5" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 5\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "currentDepth": { - "type": "java.lang.Integer", - "value": "5" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - }, - "originalDepth": { - "type": "java.lang.Integer", - "value": "5" - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"recursion exception depth 5\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 23 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRecursionHelper", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursionHelper", - "lineNumber": 25 - }, - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRecursion", - "lineNumber": 18 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" } ] \ No newline at end of file diff --git a/tests/debugger/approvals/exception_replay_recursion_5_python_snapshots_expected.json b/tests/debugger/approvals/exception_replay_recursion_5_python_snapshots_expected.json index 581064c960..449a5682a7 100644 --- a/tests/debugger/approvals/exception_replay_recursion_5_python_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_recursion_5_python_snapshots_expected.json @@ -87,7 +87,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -187,7 +187,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -292,7 +292,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -402,7 +402,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -517,7 +517,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -637,7 +637,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -762,6 +762,6 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" } ] \ No newline at end of file diff --git a/tests/debugger/approvals/exception_replay_rockpaperscissors_java_snapshots_expected.json b/tests/debugger/approvals/exception_replay_rockpaperscissors_java_snapshots_expected.json index ecc0b710f4..139955b7d8 100644 --- a/tests/debugger/approvals/exception_replay_rockpaperscissors_java_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_rockpaperscissors_java_snapshots_expected.json @@ -65,204 +65,6 @@ ], "timestamp": "" }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "shape": { - "type": "java.lang.String", - "value": "paper" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "Paper exception", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRockPaperScissors", - "lineNumber": 45 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayPaper" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRockPaperScissors", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRockPaperScissors", - "lineNumber": 52 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "shape": { - "type": "java.lang.String", - "value": "paper" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "Paper exception", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRockPaperScissors", - "lineNumber": 45 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayPaper" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRockPaperScissors", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRockPaperScissors", - "lineNumber": 52 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "shape": { - "type": "java.lang.String", - "value": "rock" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "Rock exception", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRockPaperScissors", - "lineNumber": 41 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayRock" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRockPaperScissors", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRockPaperScissors", - "lineNumber": 52 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, { "captures": { "entry": { @@ -329,204 +131,6 @@ ], "timestamp": "" }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "shape": { - "type": "java.lang.String", - "value": "rock" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "Rock exception", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRockPaperScissors", - "lineNumber": 41 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayRock" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRockPaperScissors", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRockPaperScissors", - "lineNumber": 52 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "shape": { - "type": "java.lang.String", - "value": "scissors" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "Scissors exception", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRockPaperScissors", - "lineNumber": 49 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayScissors" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRockPaperScissors", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRockPaperScissors", - "lineNumber": 52 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "shape": { - "type": "java.lang.String", - "value": "scissors" - }, - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "Scissors exception", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRockPaperScissors", - "lineNumber": 49 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayScissors" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplayRockPaperScissors", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplayRockPaperScissors", - "lineNumber": 52 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, { "captures": { "entry": { diff --git a/tests/debugger/approvals/exception_replay_rockpaperscissors_python_snapshots_expected.json b/tests/debugger/approvals/exception_replay_rockpaperscissors_python_snapshots_expected.json index 97bc32671f..56ecd17f71 100644 --- a/tests/debugger/approvals/exception_replay_rockpaperscissors_python_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_rockpaperscissors_python_snapshots_expected.json @@ -57,7 +57,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -117,7 +117,7 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" }, { "id": "", @@ -177,6 +177,6 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" } ] \ No newline at end of file diff --git a/tests/debugger/approvals/exception_replay_simple_java_snapshots_expected.json b/tests/debugger/approvals/exception_replay_simple_java_snapshots_expected.json index 49e8448980..db07e7b371 100644 --- a/tests/debugger/approvals/exception_replay_simple_java_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_simple_java_snapshots_expected.json @@ -1,66 +1,4 @@ [ - { - "captures": { - "entry": { - "arguments": {}, - "locals": {}, - "staticFields": {} - }, - "return": { - "arguments": { - "this": { - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController", - "fields": {} - } - }, - "locals": {}, - "staticFields": {}, - "throwable": { - "message": "500 INTERNAL_SERVER_ERROR \"Simple exception\"", - "stacktrace": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplaySimple", - "lineNumber": 13 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "type": "org.springframework.web.server.ResponseStatusException" - } - } - }, - "exceptionId": "", - "id": "", - "language": "java", - "probe": { - "id": "", - "version": 0, - "location": { - "lines": [], - "method": "exceptionReplaySimple", - "type": "com.datadoghq.system_tests.springboot.ExceptionReplayController" - } - }, - "stack": [ - { - "function": "com.datadoghq.system_tests.springboot.ExceptionReplayController.exceptionReplaySimple", - "lineNumber": 13 - }, - { - "function": "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter.doFilterInternal", - "lineNumber": 50 - }, - { - "": "" - } - ], - "timestamp": "" - }, { "captures": { "entry": { diff --git a/tests/debugger/approvals/exception_replay_simple_python_snapshots_expected.json b/tests/debugger/approvals/exception_replay_simple_python_snapshots_expected.json index 029a3321f0..bdb0b56f08 100644 --- a/tests/debugger/approvals/exception_replay_simple_python_snapshots_expected.json +++ b/tests/debugger/approvals/exception_replay_simple_python_snapshots_expected.json @@ -53,6 +53,6 @@ } }, "duration": "", - "exception-id": "" + "exceptionId": "" } ] \ No newline at end of file diff --git a/tests/debugger/test_debugger_exception_replay.py b/tests/debugger/test_debugger_exception_replay.py index 5e30aaa374..7a1d2b44e4 100644 --- a/tests/debugger/test_debugger_exception_replay.py +++ b/tests/debugger/test_debugger_exception_replay.py @@ -57,8 +57,18 @@ def __filter_snapshots_by_message(): if expected_exception_message in self.get_exception_message(content["debugger"]["snapshot"]): filtered_snapshots.append((exception_message, content["debugger"]["snapshot"])) - # Sort by exception message - filtered_snapshots.sort(key=lambda x: x[0]) + # Sort by multiple criteria for consistent ordering + def get_sort_key(snapshot_tuple): + message, snapshot = snapshot_tuple + # Get method name from probe location if available (for Java) + method_name = snapshot.get("probe", {}).get("location", {}).get("method", "") + # Get line number from probe location + line_number = snapshot.get("probe", {}).get("location", {}).get("line", 0) + # Get stack depth as additional sorting criteria + stack_depth = len(snapshot.get("stack", [])) + return (message, method_name, line_number, stack_depth) + + filtered_snapshots.sort(key=get_sort_key) # Return only the snapshots return [snapshot for _, snapshot in filtered_snapshots] @@ -291,19 +301,23 @@ def __approve(spans): self.spans = spans __approve(spans) - def _validate_recursion_snapshots(self, snapshots, depth): - # Extract depth from test name and validate snapshot count + def _validate_recursion_snapshots(self, snapshots, limit): assert ( - len(snapshots) == depth + 1 - ), f"Expected {depth + 1} snapshots for recursion depth {depth}, got {len(snapshots)}" + len(snapshots) == limit + 1 + ), f"Expected {limit + 1} snapshots for recursion limit {limit}, got {len(snapshots)}" entry_method = "exceptionReplayRecursion" helper_method = "exceptionReplayRecursionHelper" - is_dotnet = self.get_tracer()["language"] == "dotnet" def get_frames(snapshot): - if is_dotnet: + if self.get_tracer()["language"] == "dotnet": return snapshot.get("captures", {}).get("return", {}).get("throwable", {}).get("stacktrace", []) + + if self.get_tracer()["language"] == "java": + method = snapshot.get("probe", {}).get("location", {}).get("method", "") + if method: + return [{"function": method}] + return snapshot.get("stack", []) found_top = False @@ -336,7 +350,7 @@ def setup_exception_replay_simple(self): @bug(context.library == "dotnet", reason="DEBUG-2799") @bug(context.library == "python", reason="DEBUG-3257") - @bug(context.library == "java", reason="DEBUG-3285") + @bug(context.library < "java@1.46.0", reason="DEBUG-3285") def test_exception_replay_simple(self): self._assert("exception_replay_simple", ["simple exception"]) @@ -346,27 +360,28 @@ def setup_exception_replay_recursion_3(self): @bug(context.library == "dotnet", reason="DEBUG-2799, DEBUG-3283") @bug(context.library == "python", reason="DEBUG-3257, DEBUG-3282") - @bug(context.library == "java", reason="DEBUG-3284, DEBUG-3285") + @bug(context.library < "java@1.46.0", reason="DEBUG-3285") def test_exception_replay_recursion_3(self): self._assert("exception_replay_recursion_3", ["recursion exception depth 3"]) - self._validate_recursion_snapshots(self.snapshots, 3) + self._validate_recursion_snapshots(self.snapshots, 4) def setup_exception_replay_recursion_5(self): self._setup("/exceptionreplay/recursion?depth=5", "recursion exception depth 5") @bug(context.library == "dotnet", reason="DEBUG-2799, DEBUG-3283") @bug(context.library == "python", reason="DEBUG-3257, DEBUG-3282") - @bug(context.library == "java", reason="DEBUG-3284, DEBUG-3285") + @bug(context.library < "java@1.46.0", reason="DEBUG-3285") def test_exception_replay_recursion_5(self): self._assert("exception_replay_recursion_5", ["recursion exception depth 5"]) - self._validate_recursion_snapshots(self.snapshots, 5) + self._validate_recursion_snapshots(self.snapshots, 6) def setup_exception_replay_recursion_20(self): self._setup("/exceptionreplay/recursion?depth=20", "recursion exception depth 20") @bug(context.library == "dotnet", reason="DEBUG-2799, DEBUG-3283") @bug(context.library == "python", reason="DEBUG-3257, DEBUG-3282") - @bug(context.library == "java", reason="DEBUG-3284, DEBUG-3285") + @bug(context.library < "java@1.46.0", reason="DEBUG-3285") + @bug(context.library == "java", reason="DEBUG-3390") def test_exception_replay_recursion_20(self): self._assert("exception_replay_recursion_20", ["recursion exception depth 20"]) self._validate_recursion_snapshots(self.snapshots, 10) @@ -377,7 +392,7 @@ def setup_exception_replay_inner(self): @bug(context.library == "dotnet", reason="DEBUG-2799") @bug(context.library == "python", reason="DEBUG-3256, DEBUG-3257") - @bug(context.library == "java", reason="DEBUG-3304, DEBUG-3285") + @bug(context.library < "java@1.46.0", reason="DEBUG-3285") def test_exception_replay_inner(self): self._assert("exception_replay_inner", ["outer exception"]) @@ -408,7 +423,7 @@ def setup_exception_replay_rockpaperscissors(self): @bug(context.library == "dotnet", reason="DEBUG-2799") @bug(context.library == "python", reason="DEBUG-3257") - @bug(context.library == "java", reason="DEBUG-3285") + @bug(context.library < "java@1.46.0", reason="DEBUG-3285") def test_exception_replay_rockpaperscissors(self): self._assert("exception_replay_rockpaperscissors", ["rock", "paper", "scissors"]) @@ -418,7 +433,7 @@ def setup_exception_replay_multiframe(self): @bug(context.library == "dotnet", reason="DEBUG-2799") @bug(context.library == "python", reason="DEBUG-3257") - @bug(context.library == "java", reason="DEBUG-3285") + @bug(context.library < "java@1.46.0", reason="DEBUG-3285") def test_exception_replay_multiframe(self): self._assert("exception_replay_multiframe", ["multiple stack frames exception"]) @@ -429,6 +444,6 @@ def setup_exception_replay_async(self): @bug(context.library == "dotnet", reason="DEBUG-2799") @flaky(context.library == "dotnet", reason="DEBUG-3281") @bug(context.library == "python", reason="DEBUG-3257") - @bug(context.library == "java", reason="DEBUG-3285") + @bug(context.library < "java@1.46.0", reason="DEBUG-3285") def test_exception_replay_async(self): self._assert("exception_replay_async", ["async exception"]) From 6d87a66498018f6dc178e28ac6ed90dfc120c508 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Tue, 28 Jan 2025 13:42:44 -0500 Subject: [PATCH 05/23] [python] remove deprecated imports (#3907) --- utils/build/docker/python/django/app/urls.py | 3 ++- utils/build/docker/python/fastapi/main.py | 4 ++-- utils/build/docker/python/flask/app.py | 4 ++-- .../docker/python/flask/integrations/messaging/rabbitmq.py | 2 +- .../build/docker/python/parametric/apm_test_client/server.py | 2 +- utils/build/docker/python/pylons/app/app/config/middleware.py | 2 +- .../docker/python/pylons/app/app/controllers/identify.py | 2 +- utils/build/docker/python/pylons/app/app/controllers/waf.py | 2 +- 8 files changed, 11 insertions(+), 10 deletions(-) diff --git a/utils/build/docker/python/django/app/urls.py b/utils/build/docker/python/django/app/urls.py index 6facd8d08d..9659aedaae 100644 --- a/utils/build/docker/python/django/app/urls.py +++ b/utils/build/docker/python/django/app/urls.py @@ -28,7 +28,8 @@ ) import ddtrace -from ddtrace import Pin, tracer, patch_all +from ddtrace import patch_all +from ddtrace.trace import Pin, tracer from ddtrace.appsec import trace_utils as appsec_trace_utils patch_all(urllib3=True) diff --git a/utils/build/docker/python/fastapi/main.py b/utils/build/docker/python/fastapi/main.py index 4d61319ee5..1823c210f2 100644 --- a/utils/build/docker/python/fastapi/main.py +++ b/utils/build/docker/python/fastapi/main.py @@ -28,9 +28,9 @@ import xmltodict import ddtrace -from ddtrace import Pin +from ddtrace.trace import Pin from ddtrace import patch_all -from ddtrace import tracer +from ddtrace.trace import tracer from ddtrace.appsec import trace_utils as appsec_trace_utils diff --git a/utils/build/docker/python/flask/app.py b/utils/build/docker/python/flask/app.py index 4c45b2f02e..16fdcd823e 100644 --- a/utils/build/docker/python/flask/app.py +++ b/utils/build/docker/python/flask/app.py @@ -64,8 +64,8 @@ from integrations.messaging.rabbitmq import rabbitmq_produce import ddtrace -from ddtrace import Pin -from ddtrace import tracer +from ddtrace.trace import Pin +from ddtrace.trace import tracer from ddtrace.appsec import trace_utils as appsec_trace_utils from ddtrace.internal.datastreams import data_streams_processor from ddtrace.internal.datastreams.processor import DsmPathwayCodec diff --git a/utils/build/docker/python/flask/integrations/messaging/rabbitmq.py b/utils/build/docker/python/flask/integrations/messaging/rabbitmq.py index 295157e723..6a2c45815b 100644 --- a/utils/build/docker/python/flask/integrations/messaging/rabbitmq.py +++ b/utils/build/docker/python/flask/integrations/messaging/rabbitmq.py @@ -1,6 +1,6 @@ import kombu -from ddtrace import tracer, Pin +from ddtrace.trace import tracer, Pin def rabbitmq_produce(queue, exchange, routing_key, message): diff --git a/utils/build/docker/python/parametric/apm_test_client/server.py b/utils/build/docker/python/parametric/apm_test_client/server.py index 8dd080663a..1eb193577a 100644 --- a/utils/build/docker/python/parametric/apm_test_client/server.py +++ b/utils/build/docker/python/parametric/apm_test_client/server.py @@ -26,7 +26,7 @@ from opentelemetry.baggage import get_baggage import ddtrace -from ddtrace import Span +from ddtrace.trace import Span from ddtrace import config from ddtrace.contrib.trace_utils import set_http_meta from ddtrace.context import Context diff --git a/utils/build/docker/python/pylons/app/app/config/middleware.py b/utils/build/docker/python/pylons/app/app/config/middleware.py index 4f23c76be6..e1a0a1ea50 100644 --- a/utils/build/docker/python/pylons/app/app/config/middleware.py +++ b/utils/build/docker/python/pylons/app/app/config/middleware.py @@ -1,6 +1,6 @@ """Pylons middleware initialization""" -from ddtrace import tracer +from ddtrace.trace import tracer from ddtrace.contrib.pylons import PylonsTraceMiddleware from beaker.middleware import SessionMiddleware diff --git a/utils/build/docker/python/pylons/app/app/controllers/identify.py b/utils/build/docker/python/pylons/app/app/controllers/identify.py index 9717803aa5..feff441dad 100644 --- a/utils/build/docker/python/pylons/app/app/controllers/identify.py +++ b/utils/build/docker/python/pylons/app/app/controllers/identify.py @@ -1,7 +1,7 @@ from app.lib.base import BaseController from pylons import response from pylons import tmpl_context as c -from ddtrace import tracer +from ddtrace.trace import tracer try: from ddtrace.contrib.trace_utils import set_user diff --git a/utils/build/docker/python/pylons/app/app/controllers/waf.py b/utils/build/docker/python/pylons/app/app/controllers/waf.py index cba4619ae0..d072e755e0 100644 --- a/utils/build/docker/python/pylons/app/app/controllers/waf.py +++ b/utils/build/docker/python/pylons/app/app/controllers/waf.py @@ -1,6 +1,6 @@ import logging -from ddtrace import tracer +from ddtrace.trace import tracer from pylons import request, response, session, tmpl_context as c, url from pylons.controllers.util import abort, redirect From b995a032f39ebcb43ef865f2b3978dab7452ad5d Mon Sep 17 00:00:00 2001 From: Mark Spicer Date: Tue, 28 Jan 2025 13:52:26 -0500 Subject: [PATCH 06/23] bug(ssi): update trace url (#3908) --- utils/onboarding/backend_interface.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/onboarding/backend_interface.py b/utils/onboarding/backend_interface.py index 2ab6063c29..701ae85d95 100644 --- a/utils/onboarding/backend_interface.py +++ b/utils/onboarding/backend_interface.py @@ -23,7 +23,7 @@ def _headers(): def _query_for_trace_id(trace_id, validator=None): - url = f"{API_HOST}/api/v1/trace/{trace_id}" + url = f"{API_HOST}/api/ui/trace/{trace_id}" trace_data = _make_request(url, headers=_headers()) if validator: @@ -52,7 +52,7 @@ def _make_request( request_timeout=10, retry_delay=1, backoff_factor=2, - max_retries=8, + max_retries=30, validator=None, ): """Make a request to the backend with retries and backoff. With the defaults, this will retry for approximately 5 minutes.""" From dd2b384ae92c469ad47ffdd766a255f246fecc3c Mon Sep 17 00:00:00 2001 From: William Conti <58711692+wconti27@users.noreply.github.com> Date: Tue, 28 Jan 2025 15:12:25 -0500 Subject: [PATCH 07/23] update config rules (#3911) --- .../static/config_aggregation_list.json | 2 +- .../static/config_norm_rules.json | 170 +++++++++++++++++- .../static/config_prefix_block_list.json | 6 +- .../static/dotnet_config_rules.json | 2 +- .../static/go_config_rules.json | 2 +- .../static/jvm_config_rules.json | 35 +++- .../static/nodejs_config_rules.json | 2 +- .../static/php_config_rules.json | 2 +- .../static/python_config_rules.json | 2 +- .../static/redapl_config_norm_rules.json | 2 +- .../redapl_config_prefix_block_list.json | 2 +- .../static/ruby_config_rules.json | 2 +- 12 files changed, 211 insertions(+), 18 deletions(-) diff --git a/tests/telemetry_intake/static/config_aggregation_list.json b/tests/telemetry_intake/static/config_aggregation_list.json index 118b09f7fd..792280e01d 100644 --- a/tests/telemetry_intake/static/config_aggregation_list.json +++ b/tests/telemetry_intake/static/config_aggregation_list.json @@ -21,4 +21,4 @@ "trace_request_header_tags_comma_allowed": "trace_request_header_tags", "trace_response_header_tags": "trace_response_header_tags", "trace_span_tags": "trace_span_tags" -} \ No newline at end of file +} diff --git a/tests/telemetry_intake/static/config_norm_rules.json b/tests/telemetry_intake/static/config_norm_rules.json index 4e2c9199de..2ce4b994bd 100644 --- a/tests/telemetry_intake/static/config_norm_rules.json +++ b/tests/telemetry_intake/static/config_norm_rules.json @@ -57,6 +57,7 @@ "DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS": "ci_visibility_rum_flush_wait_millis", "DD_CIVISIBILITY_TESTSSKIPPING_ENABLED": "ci_visibility_test_skipping_enabled", "DD_CIVISIBILITY_TOTAL_FLAKY_RETRY_COUNT": "ci_visibility_total_flaky_retry_count", + "DD_CIVISIBILITY_IMPACTED_TESTS_DETECTION_ENABLED": "dd_civisibility_impacted_tests_detection_enabled", "DD_CODE_ORIGIN_FOR_SPANS_ENABLED": "code_origin_for_spans_enabled", "DD_CODE_ORIGIN_FOR_SPANS_MAX_USER_FRAMES": "code_origin_for_spans_max_user_frames", "DD_DATA_STREAMS_ENABLED": "data_streams_enabled", @@ -124,8 +125,9 @@ "DD_IAST_REGEXP_TIMEOUT": "iast_regexp_timeout", "DD_IAST_REQUEST_SAMPLING": "iast_request_sampling_percentage", "DD_IAST_SECURITY_CONTROLS_CONFIGURATION": "iast_security_controls_configuration", - "DD_IAST_STACK_TRACE_ENABLED": "iast_stack_trace_enabled", "DD_IAST_STACKTRACE_ENABLED": "iast_stack_trace_enabled", + "DD_IAST_STACK_TRACE_ENABLED": "iast_stack_trace_enabled", + "DD_IAST_STACK_TRACE_LEAK_SUPPRESS": "iast_stack_trace_leak_suppress", "DD_IAST_TELEMETRY_VERBOSITY": "iast_telemetry_verbosity", "DD_IAST_TRUNCATION_MAX_VALUE_LENGTH": "iast_truncation_max_value_length", "DD_IAST_VULNERABILITIES_PER_REQUEST": "iast_vulnerability_per_request", @@ -191,9 +193,9 @@ "DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED": "trace_128_bits_id_enabled", "DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED": "trace_128_bits_id_logging_enabled", "DD_TRACE_ACTIVITY_LISTENER_ENABLED": "trace_activity_listener_enabled", - "DD_TRACE_AGENT_ARGS": "agent_trace_agent_excecutable_args", + "DD_TRACE_AGENT_ARGS": "agent_trace_agent_executable_args", "DD_TRACE_AGENT_HOSTNAME": "agent_host", - "DD_TRACE_AGENT_PATH": "agent_trace_agent_excecutable_path", + "DD_TRACE_AGENT_PATH": "agent_trace_agent_executable_path", "DD_TRACE_AGENT_PORT": "trace_agent_port", "DD_TRACE_AGENT_URL": "trace_agent_url", "DD_TRACE_ANALYTICS_ENABLED": "trace_analytics_enabled", @@ -216,6 +218,7 @@ "DD_TRACE_EXPAND_ROUTE_TEMPLATES_ENABLED": "trace_route_template_expansion_enabled", "DD_TRACE_GIT_METADATA_ENABLED": "git_metadata_enabled", "DD_TRACE_GLOBAL_TAGS": "trace_tags", + "DD_TRACE_GRAPHQL_ERROR_EXTENSIONS": "trace_graphql_error_extensions", "DD_TRACE_HEADER_TAGS": "trace_header_tags", "DD_TRACE_HEADER_TAG_NORMALIZATION_FIX_ENABLED": "trace_header_tag_normalization_fix_enabled", "DD_TRACE_HEALTH_METRICS_ENABLED": "dd_trace_health_metrics_enabled", @@ -223,6 +226,7 @@ "DD_TRACE_HTTP_CLIENT_EXCLUDED_URL_SUBSTRINGS": "trace_http_client_excluded_urls", "DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING": "trace_http_client_tag_query_string", "DD_TRACE_HTTP_SERVER_ERROR_STATUSES": "trace_http_server_error_statuses", + "DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED": "inferred_proxy_services_enabled", "DD_TRACE_KAFKA_CREATE_CONSUMER_SCOPE_ENABLED": "trace_kafka_create_consumer_scope_enabled", "DD_TRACE_LOGFILE_RETENTION_DAYS": "trace_log_file_retention_days", "DD_TRACE_LOGGING_RATE": "trace_log_rate", @@ -325,15 +329,79 @@ "appsec.trace.rate.limit": "appsec_trace_rate_limit", "appsec.waf.timeout": "appsec_waf_timeout", "appsec.wafTimeout": "appsec_waf_timeout", + "appsec_auto-user-instrumentation-mode": "appsec_auto_user_instrumentation_mode", + "appsec_automated-user-events-tracking": "appsec_auto_user_events_tracking", + "appsec_http_blocked_template_html": "appsec_blocked_template_html", + "appsec_http_blocked_template_json": "appsec_blocked_template_json", + "appsec_ipheader": "appsec_ip_header", + "appsec_max_stacktrace_depth": "appsec_max_stack_trace_depth", + "appsec_max_stacktraces": "appsec_max_stack_traces", + "appsec_report_timeout": "appsec_report_timeout", + "appsec_reporting_inband": "appsec_reporting_inband", + "appsec_stacktrace_enabled": "appsec_stack_trace_enabled", + "appsec_waf_metrics": "appsec_waf_metrics", "autofinish_spans": "trace_auto_finish_spans_enabled", "autoload_no_compile": "autoload_no_compile", "aws.dynamoDb.tablePrimaryKeys": "aws_dynamodb_table_primary_keys", + "azure_app_services": "aas_enabled", "baggageMaxBytes": "trace_baggage_max_bytes", "baggageMaxItems": "trace_baggage_max_items", "ciVisAgentlessLogSubmissionEnabled": "ci_visibility_agentless_enabled", "ciVisibilityTestSessionName": "test_session_name", "civisibility.agentless.enabled": "ci_visibility_agentless_enabled", "civisibility.enabled": "ci_visibility_enabled", + "civisibility_additional_child_process_jvm_args": "ci_visibility_additional_child_process_jvm_args", + "civisibility_agent_jar_uri": "ci_visibility_agent_jar_uri", + "civisibility_agentless_enabled": "ci_visibility_agentless_enabled", + "civisibility_agentless_url": "ci_visibility_agentless_url", + "civisibility_auto_configuration_enabled": "ci_visibility_auto_configuration_enabled", + "civisibility_auto_instrumentation_provider": "ci_visibility_auto_instrumentation_provider", + "civisibility_backend_api_timeout_millis": "ci_visibility_backend_api_timeout_millis", + "civisibility_build_instrumentation_enabled": "ci_visibility_build_instrumentation_enabled", + "civisibility_ciprovider_integration_enabled": "ci_visibility_ciprovider_integration_enabled", + "civisibility_code_coverage_enabled": "ci_visibility_code_coverage_enabled", + "civisibility_code_coverage_excludes": "ci_visibility_code_coverage_excludes", + "civisibility_code_coverage_includes": "ci_visibility_code_coverage_includes", + "civisibility_code_coverage_lines_enabled": "ci_visibility_code_coverage_lines_enabled", + "civisibility_code_coverage_report_dump_dir": "ci_visibility_code_coverage_report_dump_dir", + "civisibility_code_coverage_root_packages_limit": "ci_visibility_code_coverage_root_packages_limit", + "civisibility_compiler_plugin_auto_configuration_enabled": "ci_visibility_compiler_plugin_auto_configuration_enabled", + "civisibility_compiler_plugin_version": "ci_visibility_compiler_plugin_version", + "civisibility_debug_port": "ci_visibility_debug_port", + "civisibility_early_flake_detection_enabled": "ci_visibility_early_flake_detection_enabled", + "civisibility_early_flake_detection_lower_limit": "ci_visibility_early_flake_detection_lower_limit", + "civisibility_enabled": "ci_visibility_enabled", + "civisibility_execution_settings_cache_size": "ci_visibility_execution_settings_cache_size", + "civisibility_flaky_retry_count": "ci_visibility_flaky_retry_count", + "civisibility_flaky_retry_enabled": "ci_visibility_flaky_retry_enabled", + "civisibility_flaky_retry_only_known_flakes": "ci_visibility_flaky_retry_only_known_flakes", + "civisibility_git_command_timeout_millis": "ci_visibility_git_command_timeout_millis", + "civisibility_git_remote_name": "ci_visibility_git_remote_name", + "civisibility_git_unshallow_defer": "ci_visibility_git_unshallow_defer", + "civisibility_git_unshallow_enabled": "ci_visibility_git_unshallow_enabled", + "civisibility_git_upload_enabled": "ci_visibility_git_upload_enabled", + "civisibility_git_upload_timeout_millis": "ci_visibility_git_upload_timeout_millis", + "civisibility_gradle_sourcesets": "ci_visibility_gradle_sourcesets", + "civisibility_injected_tracer_version": "ci_visibility_injected_tracer_version", + "civisibility_itr_enabled": "ci_visibility_intelligent_test_runner_enabled", + "civisibility_jacoco_plugin_version": "ci_visibility_jacoco_plugin_version", + "civisibility_jvm_info_cache_size": "ci_visibility_jvm_info_cache_size", + "civisibility_module_name": "ci_visibility_module_name", + "civisibility_remote_env_vars_provider_key": "ci_visibility_remote_env_vars_provider_key", + "civisibility_remote_env_vars_provider_url": "ci_visibility_remote_env_vars_provider_url", + "civisibility_repo_index_duplicate_key_check_enabled": "ci_visibility_repo_index_duplicate_key_check_enabled", + "civisibility_resource_folder_names": "ci_visibility_resource_folder_names", + "civisibility_rum_flush_wait_millis": "ci_visibility_rum_flush_wait_millis", + "civisibility_signal_client_timeout_millis": "ci_visibility_signal_client_timeout_millis", + "civisibility_signal_server_host": "ci_visibility_signal_server_host", + "civisibility_signal_server_port": "ci_visibility_signal_server_port", + "civisibility_source_data_enabled": "ci_visibility_source_data_enabled", + "civisibility_telemetry_enabled": "ci_visibility_telemetry_enabled", + "civisibility_test_command": "ci_visibility_test_command", + "civisibility_test_order": "ci_visibility_test_order", + "civisibility_test_skipping_enabled": "ci_visibility_test_skipping_enabled", + "civisibility_total_flaky_retry_count": "ci_visibility_total_flaky_retry_count", + "civisibility_trace_sanitation_enabled": "ci_visibility_trace_sanitation_enabled", "clientIpEnabled": "trace_client_ip_enabled", "clientIpHeader": "trace_client_ip_header", "clientIpHeaderDisabled": "client_ip_header_disabled", @@ -356,10 +424,30 @@ "cloudPayloadTagging.rules.aws.sqs.request": "cloud_payload_tagging_rules_aws_sqs_request", "cloudPayloadTagging.rules.aws.sqs.response": "cloud_payload_tagging_rules_aws_sqs_response", "cloud_hosting": "cloud_hosting_provider", + "cloud_payload_tagging_max_depth": "cloud_payload_tagging_max_depth", + "cloud_payload_tagging_requests_enabled": "cloud_payload_tagging_requests_enabled", + "cloud_payload_tagging_responses_enabled": "cloud_payload_tagging_responses_enabled", + "cloud_payload_tagging_rules_aws_eventbridge_expand": "cloud_payload_tagging_rules_aws_eventbridge_expand", + "cloud_payload_tagging_rules_aws_eventbridge_request": "cloud_payload_tagging_rules_aws_eventbridge_request", + "cloud_payload_tagging_rules_aws_eventbridge_response": "cloud_payload_tagging_rules_aws_eventbridge_response", + "cloud_payload_tagging_rules_aws_kinesis_expand": "cloud_payload_tagging_rules_aws_kinesis_expand", + "cloud_payload_tagging_rules_aws_kinesis_request": "cloud_payload_tagging_rules_aws_kinesis_request", + "cloud_payload_tagging_rules_aws_kinesis_response": "cloud_payload_tagging_rules_aws_kinesis_response", + "cloud_payload_tagging_rules_aws_s3_expand": "cloud_payload_tagging_rules_aws_s3_expand", + "cloud_payload_tagging_rules_aws_s3_request": "cloud_payload_tagging_rules_aws_s3_request", + "cloud_payload_tagging_rules_aws_s3_response": "cloud_payload_tagging_rules_aws_s3_response", + "cloud_payload_tagging_rules_aws_sns_expand": "cloud_payload_tagging_rules_aws_sns_expand", + "cloud_payload_tagging_rules_aws_sns_request": "cloud_payload_tagging_rules_aws_sns_request", + "cloud_payload_tagging_rules_aws_sns_response": "cloud_payload_tagging_rules_aws_sns_response", + "cloud_payload_tagging_rules_aws_sqs_expand": "cloud_payload_tagging_rules_aws_sqs_expand", + "cloud_payload_tagging_rules_aws_sqs_request": "cloud_payload_tagging_rules_aws_sqs_request", + "cloud_payload_tagging_rules_aws_sqs_response": "cloud_payload_tagging_rules_aws_sqs_response", "codeOriginForSpans.enabled": "code_origin_for_spans_enabled", "code_hotspots_enabled": "code_hotspots_enabled", + "code_origin_max_user_frames": "code_origin_for_spans_max_user_frames", "commitSHA": "commit_sha", "crashtracking.enabled": "crashtracking_enabled", + "crashtracking_agentless": "crashtracking_agentless", "crashtracking_alt_stack": "crashtracking_alt_stack", "crashtracking_available": "crashtracking_available", "crashtracking_debug_url": "crashtracking_debug_url", @@ -451,6 +539,10 @@ "dogstatsd.port": "dogstatsd_port", "dogstatsd.start-delay": "dogstatsd_start_delay", "dogstatsd_addr": "dogstatsd_url", + "dogstatsd_args": "agent_dogstatsd_executable_args", + "dogstatsd_path": "agent_dogstatsd_executable_path", + "dogstatsd_pipe_name": "dogstatsd_named_pipe", + "dogstatsd_start-delay": "dogstatsd_start_delay", "dogstatsd_url": "dogstatsd_url", "dsmEnabled": "data_streams_enabled", "dynamic.instrumentation.classfile.dump.enabled": "dynamic_instrumentation_classfile_dump_enabled", @@ -458,16 +550,23 @@ "dynamic.instrumentation.metrics.enabled": "dynamic_instrumentation_metrics_enabled", "dynamicInstrumentation.enabled": "dynamic_instrumentation_enabled", "dynamicInstrumentation.redactedIdentifiers": "dynamic_instrumentation_redacted_identifiers", - "dynamicInstrumentation.redactionExcludedIdentifiers": "dynamic_instrumentation_redaction_excluded_indentifiers", + "dynamicInstrumentation.redactionExcludedIdentifiers": "dynamic_instrumentation_redaction_excluded_identifiers", + "dynamicInstrumentationEnabled": "dynamic_instrumentation_enabled", + "dynamicInstrumentationRedactedIdentifiers": "dynamic_instrumentation_redacted_identifiers", + "dynamicInstrumentationRedactionExcludedIdentifiers": "dynamic_instrumentation_redaction_excluded_identifiers", "dynamic_instrumentation.enabled": "dynamic_instrumentation_enabled", "dynamic_instrumentation.redacted_identifiers": "dynamic_instrumentation_redacted_identifiers", "dynamic_instrumentation.redacted_types": "dynamic_instrumentation_redacted_types", "enabled": "trace_enabled", "env": "env", "environment_fulltrust_appdomain": "environment_fulltrust_appdomain_enabled", + "exception_replay_capture_intermediate_spans_enabled": "dd_exception_replay_capture_intermediate_spans_enabled", + "exception_debugging_enabled": "exception_replay_enabled", "exception_replay_capture_interval_seconds": "dd_exception_replay_capture_interval_seconds", "exception_replay_capture_max_frames": "dd_exception_replay_capture_max_frames", "exception_replay_enabled": "dd_exception_replay_enabled", + "exception_replay_max_exception_analysis_limit": "dd_exception_debugging_max_exception_analysis_limit", + "exception_replay_max_frames_to_capture": "dd_exception_replay_capture_max_frames", "experimental.b3": "experimental_b3", "experimental.enableGetRumData": "experimental_enable_get_rum_data", "experimental.exporter": "experimental_exporter", @@ -482,8 +581,11 @@ "git_commit_sha": "commit_sha", "git_repository_url": "repository_url", "global_tag_version": "version", + "graphqlErrorExtensions": "trace_graphql_error_extensions", "grpc.client.error.statuses": "trace_grpc_client_error_statuses", "grpc.server.error.statuses": "trace_grpc_server_error_statuses", + "grpc_client_error_statuses": "trace_grpc_client_error_statuses", + "grpc_server_error_statuses": "trace_grpc_server_error_statuses", "headerTags": "trace_header_tags", "hostname": "agent_hostname", "http.client.tag.query-string": "trace_http_client_tag_query_string", @@ -509,10 +611,25 @@ "iast.requestSampling": "iast_request_sampling", "iast.security-controls.configuration": "iast_security_controls_configuration", "iast.securityControlsConfiguration": "iast_security_controls_configuration", + "iast.stackTrace.enabled": "iast_stack_trace_enabled", "iast.telemetryVerbosity": "iast_telemetry_verbosity", "iast.vulnerabilities-per-request": "iast_vulnerability_per_request", - "iast.stackTrace.enabled": "iast_stack_trace_enabled", + "iast_anonymous-classes_enabled": "iast_anonymous_classes_enabled", + "iast_context_mode": "iast_context_mode", + "iast_detection_mode": "iast_detection_mode", + "iast_hardcoded-secret_enabled": "iast_hardcoded_secret_enabled", + "iast_max-concurrent-requests": "iast_max_concurrent_requests", + "iast_max-range-count": "iast_max_range_count", + "iast_request-sampling": "iast_request_sampling", + "iast_security-controls_configuration": "iast_security_controls_configuration", + "iast_source-mapping_enabled": "iast_source_mapping_enabled", + "iast_source-mapping_max-size": "iast_source_mapping_max_size", + "iast_stacktrace_enabled": "iast_stack_trace_enabled", + "iast_vulnerabilities-per-request": "iast_vulnerability_per_request", + "iast_weak-cipher_algorithms": "iast_weak_cipher_algorithms", + "iast_weak-hash_algorithms": "iast_weak_hash_algorithms", "ignite.cache.include_keys": "ignite_cache_include_keys_enabled", + "ignite_cache_include_keys": "ignite_cache_include_keys_enabled", "inferredProxyServicesEnabled": "inferred_proxy_services_enabled", "inject_force": "ssi_forced_injection_enabled", "injectionEnabled": "ssi_injection_enabled", @@ -521,6 +638,7 @@ "integration_metrics_enabled": "integration_metrics_enabled", "integrations.enabled": "trace_integrations_enabled", "integrations_disabled": "trace_disabled_integrations", + "integrations_enabled": "trace_integrations_enabled", "isAzureFunction": "azure_function", "isCiVisibility": "ci_visibility_enabled", "isEarlyFlakeDetectionEnabled": "ci_visibility_early_flake_detection_enabled", @@ -549,13 +667,15 @@ "logInjection_enabled": "logs_injection_enabled", "logLevel": "trace_log_level", "log_backtrace": "trace_log_backtrace_enabled", + "log_level": "trace_log_level", "logger": "logger", "logs.injection": "logs_injection_enabled", "logs.mdc.tags.injection": "logs_mdc_tags_injection_enabled", "lookup": "lookup", "managed_tracer_framework": "managed_tracer_framework", - "memcachedCommandEnabled": "memchached_command_enabled", + "memcachedCommandEnabled": "memcached_command_enabled", "message.broker.split-by-destination": "message_broker_split_by_destination", + "message_broker_split-by-destination": "message_broker_split_by_destination", "middleware": "trace_middleware_enabled", "native_tracer_version": "native_tracer_version", "openAiLogsEnabled": "open_ai_logs_enabled", @@ -604,7 +724,13 @@ "profiling.start-delay": "profiling_start_delay", "profiling.start-force-first": "profiling_start_force_first", "profiling.upload.period": "profiling_upload_period", + "profiling_direct_allocation_sample_limit": "profiling_direct_allocation_sample_limit", + "profiling_directallocation_enabled": "profiling_direct_allocation_enabled", "profiling_endpoints_enabled": "profiling_endpoints_enabled", + "profiling_start-delay": "profiling_start_delay", + "profiling_start-force-first": "profiling_start_force_first", + "propagation_style_extract": "trace_propagation_style_extract", + "propagation_style_inject": "trace_propagation_style_inject", "protocolVersion": "trace_agent_protocol_version", "queryStringObfuscation": "trace_obfuscation_query_string_regexp", "rcPollingInterval": "rc_polling_interval", @@ -648,6 +774,8 @@ "startupLogs": "trace_startup_logs_enabled", "stats.enabled": "stats_enabled", "stats_computation_enabled": "trace_stats_computation_enabled", + "symbol_database_compressed": "symbol_database_compression_enabled", + "symbol_database_flush_threshold": "symbol_database_flush_threshold", "tagsHeaderMaxLength": "trace_header_tags_max_length", "telemetry.debug": "instrumentation_telemetry_debug_enabled", "telemetry.dependencyCollection": "instrumentation_telemetry_dependency_collection_enabled", @@ -658,7 +786,14 @@ "telemetry.metrics": "instrumentation_telemetry_metrics_enabled", "telemetry.metricsInterval": "instrumentation_telemetry_metrics_interval", "telemetryEnabled": "instrumentation_telemetry_enabled", + "telemetry_dependency-collection_enabled": "instrumentation_telemetry_dependency_collection_enabled", + "telemetry_dependency-resolution_queue_size": "instrumentation_telemetry_heartbeat_interval", "telemetry_heartbeat_interval": "instrumentation_telemetry_heartbeat_interval", + "telemetry_log-collection_enabled": "instrumentation_telemetry_log_collection_enabled", + "telemetry_metrics_enabled": "instrumentation_telemetry_metrics_enabled", + "telemetry_metrics_interval": "instrumentation_telemetry_metrics_interval", + "third_party_excludes": "third_party_detection_excludes", + "third_party_includes": "third_party_detection_includes", "trace.128_bit_traceid_generation_enabled": "trace_128_bits_id_enabled", "trace.128_bit_traceid_logging_enabled": "trace_128_bits_id_logging_enabled", "trace.agent.port": "trace_agent_port", @@ -801,7 +936,30 @@ "tracePropagationStyle.extract": "trace_propagation_style_extract", "tracePropagationStyle.inject": "trace_propagation_style_inject", "tracePropagationStyle.otelPropagators": "trace_propagation_style_otel_propagators", + "trace_128_bit_traceid_generation_enabled": "trace_128_bits_id_enabled", + "trace_128_bit_traceid_logging_enabled": "trace_128_bits_id_logging_enabled", + "trace_agent_args": "agent_trace_agent_executable_args", + "trace_agent_path": "agent_trace_agent_executable_path", + "trace_agent_v0_5_enabled": "trace_agent_v0.5_enabled", + "trace_flush_interval": "flush_interval", + "trace_git_metadata_enabled": "git_metadata_enabled", + "trace_http_client_split-by-domain": "trace_http_client_split_by_domain", + "trace_http_client_tag_query-string": "trace_http_client_tag_query_string_enabled", + "trace_cloud_payload_tagging_max-depth": "cloud_payload_tagging_max_depth", + "trace_cloud_payload_tagging_max-tags": "cloud_payload_tagging_max_tags", + "trace_cloud_payload_tagging_services": "cloud_payload_tagging_services", + "trace_cloud_request_payload_tagging": "cloud_payload_tagging_requests_enabled", + "trace_cloud_response_payload_tagging": "cloud_payload_tagging_responses_enabled", "trace_methods": "trace_methods", + "trace_peer_service_component_overrides": "trace_peer_service_component_overrides", + "trace_peerservicetaginterceptor_enabled": "trace_peer_service_tag_interceptor_enabled", + "trace_pipe_name": "trace_agent_named_pipe", + "trace_remove_integration-service-names_enabled": "trace_remove_integration_service_names_enabled", + "trace_report-hostname": "trace_report_hostname", + "trace_sampling_rules": "trace_sample_rules", + "trace_status404decorator_enabled": "trace_status_404_decorator_enabled", + "trace_status404rule_enabled": "trace_status_404_rule_enabled", + "trace_x-datadog-tags_max_length": "trace_x_datadog_tags_max_length", "tracer_instance_count": "trace_instance_count", "tracing": "trace_enabled", "tracing.auto_instrument.enabled": "trace_auto_instrument_enabled", diff --git a/tests/telemetry_intake/static/config_prefix_block_list.json b/tests/telemetry_intake/static/config_prefix_block_list.json index 23a45445eb..566f59bc5a 100644 --- a/tests/telemetry_intake/static/config_prefix_block_list.json +++ b/tests/telemetry_intake/static/config_prefix_block_list.json @@ -118,12 +118,16 @@ "DD_WinHttpHandler_", "DD_XUnit_", "N/A", + "api-key", "apiKey", "api_key", + "application-key", "appsec.eventTracking.enabled", "dd_profiling_apikey", "dependencies_available", "global_tag_runtime-id", + "profiling_api-key-file", + "profiling_apikey_file", "trace.amqp_analytics_enabled", "trace.amqp_analytics_sample_rate", "trace.amqp_enabled", @@ -161,9 +165,9 @@ "trace.guzzle_analytics_sample_rate", "trace.guzzle_enabled", "trace.integration.", - "trace.kafka_enabled", "trace.kafka_analytics_enabled", "trace.kafka_analytics_sample_rate", + "trace.kafka_enabled", "trace.laminas_analytics_enabled", "trace.laminas_analytics_sample_rate", "trace.laminas_enabled", diff --git a/tests/telemetry_intake/static/dotnet_config_rules.json b/tests/telemetry_intake/static/dotnet_config_rules.json index 6e109c1834..72a64edebb 100644 --- a/tests/telemetry_intake/static/dotnet_config_rules.json +++ b/tests/telemetry_intake/static/dotnet_config_rules.json @@ -299,4 +299,4 @@ "prefix_block_list": [], "redaction_list": [], "reduce_rules": {} -} \ No newline at end of file +} diff --git a/tests/telemetry_intake/static/go_config_rules.json b/tests/telemetry_intake/static/go_config_rules.json index a44ab641d8..be0ca09ed5 100644 --- a/tests/telemetry_intake/static/go_config_rules.json +++ b/tests/telemetry_intake/static/go_config_rules.json @@ -92,4 +92,4 @@ ], "redaction_list": [], "reduce_rules": {} -} \ No newline at end of file +} diff --git a/tests/telemetry_intake/static/jvm_config_rules.json b/tests/telemetry_intake/static/jvm_config_rules.json index d77c0d6c6d..15eaa8644a 100644 --- a/tests/telemetry_intake/static/jvm_config_rules.json +++ b/tests/telemetry_intake/static/jvm_config_rules.json @@ -200,7 +200,38 @@ "trace.x_datadog_tags_max_length": "trace_x_datadog_tags_max_length", "tracing": "trace_enabled" }, - "prefix_block_list": [], + "prefix_block_list": [ + "trace_aerospike", + "trace_akka", + "trace_amqp", + "trace_apache", + "trace_armeria", + "trace_auth0", + "trace_avro", + "trace_axis", + "trace_axway", + "trace_caffeine", + "trace_cassandra", + "trace_couchbase", + "trace_cucumber", + "trace_cxf", + "trace_datanucleus", + "trace_db2", + "trace_dropwizard", + "trace_elasticsearch", + "trace_emr-aws-sdk", + "trace_eventbridge", + "trace_finatra", + "trace_freemarker", + "trace_glassfish", + "trace_google-http-client", + "trace_google-pubsub", + "trace_gradle", + "trace_graphql-java", + "trace_grizzly", + "trace_gson", + "trace_guava" + ], "redaction_list": [], "reduce_rules": {} -} \ No newline at end of file +} diff --git a/tests/telemetry_intake/static/nodejs_config_rules.json b/tests/telemetry_intake/static/nodejs_config_rules.json index b27bf5e580..3cd2775b71 100644 --- a/tests/telemetry_intake/static/nodejs_config_rules.json +++ b/tests/telemetry_intake/static/nodejs_config_rules.json @@ -164,4 +164,4 @@ "prefix_block_list": [], "redaction_list": [], "reduce_rules": {} -} \ No newline at end of file +} diff --git a/tests/telemetry_intake/static/php_config_rules.json b/tests/telemetry_intake/static/php_config_rules.json index a8baabeff1..03df4a5016 100644 --- a/tests/telemetry_intake/static/php_config_rules.json +++ b/tests/telemetry_intake/static/php_config_rules.json @@ -168,4 +168,4 @@ "prefix_block_list": [], "redaction_list": [], "reduce_rules": {} -} \ No newline at end of file +} diff --git a/tests/telemetry_intake/static/python_config_rules.json b/tests/telemetry_intake/static/python_config_rules.json index fef499bc94..27a9566999 100644 --- a/tests/telemetry_intake/static/python_config_rules.json +++ b/tests/telemetry_intake/static/python_config_rules.json @@ -138,4 +138,4 @@ "prefix_block_list": [], "redaction_list": [], "reduce_rules": {} -} \ No newline at end of file +} diff --git a/tests/telemetry_intake/static/redapl_config_norm_rules.json b/tests/telemetry_intake/static/redapl_config_norm_rules.json index 8019c1bba9..cb0e71d5d7 100644 --- a/tests/telemetry_intake/static/redapl_config_norm_rules.json +++ b/tests/telemetry_intake/static/redapl_config_norm_rules.json @@ -2,4 +2,4 @@ "DD_INSTRUMENTATION_CONFIG_ID": "instrumentation_config_id", "DD_TAGS": "agent_tags", "DD_TRACE_HEADER_TAGS": "trace_header_tags" -} \ No newline at end of file +} diff --git a/tests/telemetry_intake/static/redapl_config_prefix_block_list.json b/tests/telemetry_intake/static/redapl_config_prefix_block_list.json index 7989910e8e..0f5409f805 100644 --- a/tests/telemetry_intake/static/redapl_config_prefix_block_list.json +++ b/tests/telemetry_intake/static/redapl_config_prefix_block_list.json @@ -1,3 +1,3 @@ [ "appsec.rules" -] \ No newline at end of file +] diff --git a/tests/telemetry_intake/static/ruby_config_rules.json b/tests/telemetry_intake/static/ruby_config_rules.json index 07ac52a22f..94401f1e29 100644 --- a/tests/telemetry_intake/static/ruby_config_rules.json +++ b/tests/telemetry_intake/static/ruby_config_rules.json @@ -23,4 +23,4 @@ "prefix_block_list": [], "redaction_list": [], "reduce_rules": {} -} \ No newline at end of file +} From ddb6d260394afe8831e1a3d996ceaddb0bd05ce8 Mon Sep 17 00:00:00 2001 From: Roberto Montero <108007532+robertomonteromiguel@users.noreply.github.com> Date: Wed, 29 Jan 2025 09:23:16 +0100 Subject: [PATCH 08/23] K8s Lib Injection: Profiling fixes and bugs (#3913) --- tests/k8s_lib_injection/test_k8s_lib_injection.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/k8s_lib_injection/test_k8s_lib_injection.py b/tests/k8s_lib_injection/test_k8s_lib_injection.py index 79e987d1d9..10f845fea7 100644 --- a/tests/k8s_lib_injection/test_k8s_lib_injection.py +++ b/tests/k8s_lib_injection/test_k8s_lib_injection.py @@ -14,7 +14,7 @@ class TestK8sLibInjection: """Test K8s lib injection""" - @bug(context.library > "python@2.21.0-dev", reason="APMSP-1750") + @bug(context.library >= "python@2.20.0" and context.k8s_cluster_agent_version == "7.56.2", reason="APMSP-1750") def test_k8s_lib_injection(self): traces_json = get_dev_agent_traces(context.scenario.k8s_cluster_provider.get_cluster_info()) assert len(traces_json) > 0, "No traces found" @@ -35,4 +35,4 @@ def test_k8s_lib_injection(self): warmup_weblog(context_url) request_uuid = make_get_request(context_url) logger.info(f"Http request done with uuid: [{request_uuid}] for ip [{cluster_info.cluster_host_name}]") - wait_backend_trace_id(request_uuid, 120.0) + wait_backend_trace_id(request_uuid) From a226e6a5e7af31053c83cd55d13ae4c40c3feaf6 Mon Sep 17 00:00:00 2001 From: Christophe Papazian <114495376+christophe-papazian@users.noreply.github.com> Date: Wed, 29 Jan 2025 11:00:54 +0100 Subject: [PATCH 09/23] [python] enable easy wins (#3914) --- manifests/python.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/python.yml b/manifests/python.yml index 1c69328ba4..c0a0bdfb5c 100644 --- a/manifests/python.yml +++ b/manifests/python.yml @@ -51,7 +51,7 @@ tests/: sink/: test_code_injection.py: TestCodeInjection: v2.20.0 - TestCodeInjection_StackTrace: missing_feature + TestCodeInjection_StackTrace: v2.20.0 test_command_injection.py: TestCommandInjection: '*': v2.10.0 From 86ba7d4ebc9d7cda59c3397f3079add57d18779b Mon Sep 17 00:00:00 2001 From: Charles de Beauchesne Date: Wed, 29 Jan 2025 14:34:55 +0100 Subject: [PATCH 10/23] Activate ANN201 ruff rule (#3917) --- conftest.py | 32 +++++----- manifests/parser/core.py | 6 +- pyproject.toml | 12 +++- utils/_context/_scenarios/docker_ssi.py | 21 ++++++- utils/cgroup_info.py | 2 +- utils/otel_validators/validator_log.py | 2 +- utils/otel_validators/validator_metric.py | 6 +- utils/otel_validators/validator_trace.py | 20 +++--- utils/parametric/spec/trace.py | 18 ++++-- utils/parametric/spec/tracecontext.py | 64 ++++++++++---------- utils/properties_serialization.py | 8 +-- utils/proxy/core.py | 3 +- utils/scripts/compute-workflow-parameters.py | 10 +-- utils/scripts/compute_impacted_scenario.py | 10 +-- utils/scripts/decode-rc.py | 8 +-- utils/scripts/extract_appsec_waf_rules.py | 2 +- utils/scripts/get-image-list.py | 2 +- utils/scripts/get-nightly-logs.py | 11 ++-- utils/scripts/get-scenarios-from-group.py | 2 +- utils/scripts/get-workflow-summary.py | 2 +- utils/scripts/grep-nightly-logs.py | 7 ++- utils/scripts/junit_report.py | 2 +- utils/scripts/markdown_logs.py | 4 +- utils/scripts/merge_gitlab_aws_pipelines.py | 2 +- utils/scripts/push-metrics.py | 2 +- utils/tools.py | 40 ++++-------- 26 files changed, 158 insertions(+), 140 deletions(-) diff --git a/conftest.py b/conftest.py index 411f5a7d85..02374b3d44 100644 --- a/conftest.py +++ b/conftest.py @@ -30,7 +30,7 @@ setup_properties = SetupProperties() -def pytest_addoption(parser): +def pytest_addoption(parser) -> None: parser.addoption( "--scenario", "-S", type=str, action="store", default="DEFAULT", help="Unique identifier of scenario" ) @@ -129,7 +129,7 @@ def pytest_addoption(parser): ) -def pytest_configure(config): +def pytest_configure(config) -> None: if not config.option.force_dd_trace_debug and os.environ.get("SYSTEM_TESTS_FORCE_DD_TRACE_DEBUG") == "true": config.option.force_dd_trace_debug = True @@ -168,7 +168,7 @@ def pytest_configure(config): # Called at the very begening -def pytest_sessionstart(session): +def pytest_sessionstart(session) -> None: # get the terminal to allow logging directly in stdout logger.terminal = session.config.pluginmanager.get_plugin("terminalreporter") @@ -236,7 +236,7 @@ def _get_skip_reason_from_marker(marker): return None -def pytest_pycollect_makemodule(module_path, parent): +def pytest_pycollect_makemodule(module_path, parent) -> None: # As now, declaration only works for tracers at module level library = context.scenario.library.library @@ -265,7 +265,7 @@ def pytest_pycollect_makemodule(module_path, parent): @pytest.hookimpl(tryfirst=True) -def pytest_pycollect_makeitem(collector, name, obj): +def pytest_pycollect_makeitem(collector, name, obj) -> None: if collector.istestclass(obj, name): if obj is None: message = f"""{collector.nodeid} is not properly collected. @@ -286,7 +286,7 @@ def pytest_pycollect_makeitem(collector, name, obj): raise ValueError(f"Unexpected error for {nodeid}.") from e -def pytest_collection_modifyitems(session, config, items: list[pytest.Item]): +def pytest_collection_modifyitems(session, config, items: list[pytest.Item]) -> None: """Unselect items that are not included in the current scenario""" logger.debug("pytest_collection_modifyitems") @@ -349,7 +349,7 @@ def iter_markers(self, name=None): json.dump(all_declared_scenarios, f, indent=2) -def pytest_deselected(items): +def pytest_deselected(items) -> None: _deselected_items.extend(items) @@ -373,7 +373,7 @@ def _item_is_skipped(item): return any(item.iter_markers("skip")) -def pytest_collection_finish(session: pytest.Session): +def pytest_collection_finish(session: pytest.Session) -> None: if session.config.option.collectonly: return @@ -437,20 +437,20 @@ def pytest_collection_finish(session: pytest.Session): context.scenario.post_setup(session) -def pytest_runtest_call(item): +def pytest_runtest_call(item) -> None: # add a log line for each request made by the setup, to help debugging setup_properties.log_requests(item) @pytest.hookimpl(optionalhook=True) -def pytest_json_runtest_metadata(item, call): +def pytest_json_runtest_metadata(item, call) -> None: if call.when != "setup": return {} return _collect_item_metadata(item) -def pytest_json_modifyreport(json_report): +def pytest_json_modifyreport(json_report) -> None: try: # add usefull data for reporting json_report["context"] = context.serialize() @@ -461,7 +461,7 @@ def pytest_json_modifyreport(json_report): logger.error("Fail to modify json report", exc_info=True) -def pytest_sessionfinish(session, exitstatus): +def pytest_sessionfinish(session, exitstatus) -> None: logger.info("Executing pytest_sessionfinish") if session.config.option.skip_empty_scenario and exitstatus == pytest.ExitCode.NO_TESTS_COLLECTED: @@ -499,7 +499,7 @@ def pytest_sessionfinish(session, exitstatus): session.exitstatus = SUCCESS -def export_feature_parity_dashboard(session, data): +def export_feature_parity_dashboard(session, data) -> None: tests = [convert_test_to_feature_parity_model(test) for test in data["tests"]] result = { @@ -521,7 +521,7 @@ def export_feature_parity_dashboard(session, data): json.dump(result, f, indent=2) -def convert_test_to_feature_parity_model(test): +def convert_test_to_feature_parity_model(test) -> dict: result = { "path": test["nodeid"], "lineNumber": test["lineno"], @@ -537,10 +537,10 @@ def convert_test_to_feature_parity_model(test): ## Fixtures corners @pytest.fixture(scope="session", name="session") -def fixture_session(request): +def fixture_session(request) -> pytest.Session: return request.session @pytest.fixture(scope="session", name="deselected_items") -def fixture_deselected_items(): +def fixture_deselected_items() -> list[pytest.Item]: return _deselected_items diff --git a/manifests/parser/core.py b/manifests/parser/core.py index ee2e257586..cfe84f1b22 100644 --- a/manifests/parser/core.py +++ b/manifests/parser/core.py @@ -35,7 +35,7 @@ def _load_file(file): @lru_cache -def load(base_dir="manifests/"): +def load(base_dir="manifests/") -> dict: """Returns a dict of nodeid, value are another dict where the key is the component and the value the declaration. It is meant to sent directly the value of a nodeid to @released. @@ -74,7 +74,7 @@ def load(base_dir="manifests/"): return result -def assert_key_order(obj: dict, path=""): +def assert_key_order(obj: dict, path="") -> None: last_key = "/" for key, value in obj.items(): @@ -91,7 +91,7 @@ def assert_key_order(obj: dict, path=""): last_key = key -def validate_manifest_files(): +def validate_manifest_files() -> None: with open("manifests/parser/schema.json", encoding="utf-8") as f: schema = json.load(f) diff --git a/pyproject.toml b/pyproject.toml index b23181790d..7f36c250f6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -81,7 +81,6 @@ ignore = [ # missing-type-annotation, the ONE to remove !! "ANN001", "ANN003", - "ANN201", "ANN202", "ANN205", "BLE001", # Do not catch blind exception: `Exception`, big project to enable this @@ -159,13 +158,17 @@ ignore = [ "INP001", # this is not a package "T201" # allow print statements in scripts folder ] -"utils/interfaces/schemas/serve_doc.py" = ["INP001"] # this is not a package +"utils/interfaces/schemas/serve_doc.py" = [ + "INP001", # this is not a package + "ANN201" +] "utils/waf_rules.py" = ["N801"] # generated file # TODO : remove those ignores "tests/*" = ["ALL"] "utils/build/*" = ["ALL"] "lib-injection/*" = ["ALL"] "utils/{k8s_lib_injection/*,_context/_scenarios/k8s_lib_injection.py}" = [ + "ANN201", "TRY201", "TRY002", "D207", @@ -200,6 +203,7 @@ ignore = [ ] "utils/onboarding/*" = [ + "ANN201", "DTZ006", "DTZ005", "E501", # line too long @@ -213,7 +217,11 @@ ignore = [ "N803", "RET505", ] +"utils/docker_ssi/*" = [ + "ANN201", +] "utils/{_context/_scenarios/docker_ssi.py,docker_ssi/docker_ssi_matrix_builder.py,docker_ssi/docker_ssi_matrix_utils.py}" = [ + "ANN201", "PLR2004", "E501", # line too long "SIM210", diff --git a/utils/_context/_scenarios/docker_ssi.py b/utils/_context/_scenarios/docker_ssi.py index 4d9f74b8e7..c666fd6943 100644 --- a/utils/_context/_scenarios/docker_ssi.py +++ b/utils/_context/_scenarios/docker_ssi.py @@ -1,12 +1,13 @@ import json -import time import os +import random +import socket +import time import docker from docker.errors import BuildError from docker.models.networks import Network -import utils.tools from utils import context, interfaces from utils._context.library_version import LibraryVersion, Version from utils._context.containers import ( @@ -34,7 +35,7 @@ def __init__(self, name, doc, scenario_groups=None) -> None: self._weblog_injection = DockerSSIContainer(host_log_folder=self.host_log_folder) - self.agent_port = utils.tools.get_free_port() + self.agent_port = _get_free_port() self.agent_host = "localhost" self._agent_container = APMTestAgentContainer(host_log_folder=self.host_log_folder, agent_port=self.agent_port) @@ -458,3 +459,17 @@ def print_docker_push_logs(self, image_tag, push_logs): vm_logger(scenario_name, "docker_push").info(f" Push docker image with tag: {image_tag} ") vm_logger(scenario_name, "docker_push").info("***************************************************************") vm_logger(scenario_name, "docker_push").info(push_logs) + + +def _get_free_port(): + last_allowed_port = 32000 + port = random.randint(1100, last_allowed_port - 600) + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + while port <= last_allowed_port: + try: + sock.bind(("", port)) + sock.close() + return port + except OSError: + port += 1 + raise OSError("no free ports") diff --git a/utils/cgroup_info.py b/utils/cgroup_info.py index 0966dc3a4a..42522f5adb 100644 --- a/utils/cgroup_info.py +++ b/utils/cgroup_info.py @@ -6,7 +6,7 @@ import attr -def get_container_id(infos): +def get_container_id(infos) -> str | None: for line in infos: info = _CGroupInfo.from_line(line) if info: diff --git a/utils/otel_validators/validator_log.py b/utils/otel_validators/validator_log.py index d039ced018..95e3fb002f 100644 --- a/utils/otel_validators/validator_log.py +++ b/utils/otel_validators/validator_log.py @@ -21,7 +21,7 @@ def validate_log(log: dict, rid: str, otel_source: str) -> dict: return log["attributes"]["attributes"]["otel"] -def validate_log_trace_correlation(otel_log_trace_attrs: dict, trace: dict): +def validate_log_trace_correlation(otel_log_trace_attrs: dict, trace: dict) -> None: assert len(trace["spans"]) == 1 span = None for item in trace["spans"].items(): diff --git a/utils/otel_validators/validator_metric.py b/utils/otel_validators/validator_metric.py index 76f544029e..beb9b1e04b 100644 --- a/utils/otel_validators/validator_metric.py +++ b/utils/otel_validators/validator_metric.py @@ -4,7 +4,7 @@ # Validates the JSON logs from backend and returns the OTel log trace attributes -def validate_metrics(metrics_1: list[dict], metrics_2: list[dict], metrics_source1: str, metrics_source2: str): +def validate_metrics(metrics_1: list[dict], metrics_2: list[dict], metrics_source1: str, metrics_source2: str) -> None: diff = list(dictdiffer.diff(metrics_1[0], metrics_2[0])) assert len(diff) == 0, f"Diff between count metrics from {metrics_source1} vs. from {metrics_source2}: {diff}" validate_example_counter(metrics_1[0]) @@ -18,7 +18,7 @@ def validate_metrics(metrics_1: list[dict], metrics_2: list[dict], metrics_sourc idx += 1 -def validate_example_counter(counter_metric: dict): +def validate_example_counter(counter_metric: dict) -> None: assert len(counter_metric["series"]) == 1 counter_series = counter_metric["series"][0] assert counter_series["metric"] == "example.counter" @@ -27,7 +27,7 @@ def validate_example_counter(counter_metric: dict): assert counter_series["pointlist"][0][1] == 11.0 -def validate_example_histogram(histogram_metric: dict, histogram_suffix: str): +def validate_example_histogram(histogram_metric: dict, histogram_suffix: str) -> None: assert len(histogram_metric["series"]) == 1 histogram_series = histogram_metric["series"][0] assert histogram_series["metric"] == "example.histogram" + histogram_suffix diff --git a/utils/otel_validators/validator_trace.py b/utils/otel_validators/validator_trace.py index 6d485bad9e..5da2d13bf0 100644 --- a/utils/otel_validators/validator_trace.py +++ b/utils/otel_validators/validator_trace.py @@ -8,7 +8,7 @@ # Validates traces from Agent, Collector and Backend intake OTLP ingestion paths are consistent def validate_all_traces( traces_agent: list[dict], traces_intake: list[dict], traces_collector: list[dict], *, use_128_bits_trace_id: bool -): +) -> None: spans_agent = validate_trace(traces_agent, use_128_bits_trace_id=use_128_bits_trace_id) spans_intake = validate_trace(traces_intake, use_128_bits_trace_id=use_128_bits_trace_id) spans_collector = validate_trace(traces_collector, use_128_bits_trace_id=use_128_bits_trace_id) @@ -37,7 +37,7 @@ def validate_trace(traces: list[dict], *, use_128_bits_trace_id: bool) -> tuple: return (server_span, message_span) -def validate_common_tags(span: dict, *, use_128_bits_trace_id: bool): +def validate_common_tags(span: dict, *, use_128_bits_trace_id: bool) -> None: assert span["parent_id"] == "0" assert span["service"] == "otel-system-tests-spring-boot" expected_meta = { @@ -49,7 +49,7 @@ def validate_common_tags(span: dict, *, use_128_bits_trace_id: bool): validate_trace_id(span, use_128_bits_trace_id=use_128_bits_trace_id) -def validate_trace_id(span: dict, *, use_128_bits_trace_id: bool): +def validate_trace_id(span: dict, *, use_128_bits_trace_id: bool) -> None: dd_trace_id = int(span["trace_id"], base=10) otel_trace_id = int(span["meta"]["otel.trace_id"], base=16) if use_128_bits_trace_id: @@ -59,21 +59,21 @@ def validate_trace_id(span: dict, *, use_128_bits_trace_id: bool): assert dd_trace_id == int.from_bytes(trace_id_bytes[8:], "big") -def validate_server_span(span: dict): +def validate_server_span(span: dict) -> None: expected_tags = {"name": "WebController.basic", "resource": "GET /"} expected_meta = {"http.route": "/", "http.method": "GET"} assert expected_tags.items() <= span.items() assert expected_meta.items() <= span["meta"].items() -def validate_message_span(span: dict): +def validate_message_span(span: dict) -> None: expected_tags = {"name": "WebController.basic.publish", "resource": "publish"} expected_meta = {"messaging.operation": "publish", "messaging.system": "rabbitmq"} assert expected_tags.items() <= span.items() assert expected_meta.items() <= span["meta"].items() -def validate_span_link(server_span: dict, message_span: dict): +def validate_span_link(server_span: dict, message_span: dict) -> None: # TODO: enable check on span links once newer version of Agent is used in system tests if "_dd.span_links" not in server_span["meta"]: return @@ -87,14 +87,14 @@ def validate_span_link(server_span: dict, message_span: dict): # Validates fields that we don't know the values upfront for all 3 ingestion paths -def validate_spans_from_all_paths(spans_agent: tuple, spans_intake: tuple, spans_collector: tuple): +def validate_spans_from_all_paths(spans_agent: tuple, spans_intake: tuple, spans_collector: tuple) -> None: validate_span_fields(spans_agent[0], spans_intake[0], "Agent server span", "Intake server span") validate_span_fields(spans_agent[0], spans_collector[0], "Agent server span", "Collector server span") validate_span_fields(spans_agent[1], spans_intake[1], "Agent message span", "Intake message span") validate_span_fields(spans_agent[1], spans_collector[1], "Agent message span", "Collector message span") -def validate_span_fields(span1: dict, span2: dict, name1: str, name2: str): +def validate_span_fields(span1: dict, span2: dict, name1: str, name2: str) -> None: logger.debug(f"Validate span fields. [{name1}]:[{span1}]") logger.debug(f"Validate span fields. [{name2}]:[{span2}]") assert span1["start"] == span2["start"] @@ -132,7 +132,9 @@ def validate_span_fields(span1: dict, span2: dict, name1: str, name2: str): ] -def validate_span_metas_metrics(meta1: dict, meta2: dict, metrics1: dict, metrics2: dict, name1: str, name2: str): +def validate_span_metas_metrics( + meta1: dict, meta2: dict, metrics1: dict, metrics2: dict, name1: str, name2: str +) -> None: # Exclude fields that are expected to have different values for different ingestion paths for known_unmatched_meta in KNOWN_UNMATCHED_METAS: meta1.pop(known_unmatched_meta, None) diff --git a/utils/parametric/spec/trace.py b/utils/parametric/spec/trace.py index 010215d2d0..3b89726712 100644 --- a/utils/parametric/spec/trace.py +++ b/utils/parametric/spec/trace.py @@ -205,25 +205,31 @@ def span_has_no_parent(span: Span) -> bool: return "parent_id" not in span or span.get("parent_id") == 0 or span.get("parent_id") is None -def assert_span_has_tags(span: Span, tags: dict[str, int | str | float | bool]): +def assert_span_has_tags(span: Span, tags: dict[str, int | str | float | bool]) -> None: """Assert that the span has the given tags.""" for key, value in tags.items(): assert key in span.get("meta", {}), f"Span missing expected tag {key}={value}" assert span.get("meta", {}).get(key) == value, f"Span incorrect tag value for {key}={value}" -def assert_trace_has_tags(trace: Trace, tags: dict[str, int | str | float | bool]): +def assert_trace_has_tags(trace: Trace, tags: dict[str, int | str | float | bool]) -> None: """Assert that the trace has the given tags.""" for span in trace: assert_span_has_tags(span, tags) -def retrieve_span_links(span): +def retrieve_span_links(span) -> list: + """Retrieves span links from a span. + raise an exception if the span links are not found, or if it's not a list + """ if span.get("span_links") is not None: - return span["span_links"] + result = span["span_links"] + if not isinstance(result, list): + raise TypeError(f"Span links must be a list, found {result}") + return result if span["meta"].get("_dd.span_links") is None: - return None + raise ValueError("Span links not found in span") # Convert span_links tags into msgpack v0.4 format json_links = json.loads(span["meta"].get("_dd.span_links")) @@ -248,7 +254,7 @@ def retrieve_span_links(span): return links -def retrieve_span_events(span): +def retrieve_span_events(span) -> list | None: if span.get("span_events") is not None: return span["span_events"] diff --git a/utils/parametric/spec/tracecontext.py b/utils/parametric/spec/tracecontext.py index 94f6b9d516..cb507ffe8c 100644 --- a/utils/parametric/spec/tracecontext.py +++ b/utils/parametric/spec/tracecontext.py @@ -28,33 +28,7 @@ tracestate_name_re = re.compile(r"^tracestate$", re.IGNORECASE) -def get_traceparent(headers): - retval = [] - for key, value in headers.items(): - if traceparent_name_re.match(key): - retval.append((key, value)) - - assert len(retval) == 1 - version, trace_id, span_id, trace_flags = retval[0][1].split("-") - - if len(version) != 2 or len(trace_id) != 32 or len(span_id) != 16 or len(trace_flags) != 2: - return None - - if int(trace_id, 16) == 0 or int(span_id, 16) == 0: - return None - - return Traceparent(version, trace_id, span_id, trace_flags) - - -def get_tracestate(headers): - tracestate = Tracestate() - for key, value in headers.items(): - if tracestate_name_re.match(key): - tracestate.from_string(value) - return tracestate - - -def get_tracecontext(headers): +def get_tracecontext(headers) -> tuple: return get_traceparent(headers), get_tracestate(headers) @@ -121,7 +95,7 @@ def __setitem__(self, key, value): def __str__(self): return self.to_string() - def from_string(self, string): + def from_string(self, string) -> "Tracestate": for member in re.split(self._DELIMITER_FORMAT_RE, string): if member: match = self._MEMBER_FORMAT_RE.match(member) @@ -135,17 +109,17 @@ def from_string(self, string): # it. We opt for dropping it. return self - def to_string(self): + def to_string(self) -> str: return ",".join(key + "=" + self[key] for key in self._traits) - def split(self, char=","): + def split(self, char=",") -> list[str]: ts = self.to_string() return ts.split(char) # make this an optional choice instead of enforcement during put/update # if the tracestate value size is bigger than 512 characters, the tracer # CAN decide to forward the tracestate - def is_valid(self): + def is_valid(self) -> bool: if len(self) == 0: return False # combined header length MUST be less than or equal to 512 bytes @@ -154,5 +128,31 @@ def is_valid(self): # there can be a maximum of 32 list-members in a list return not len(self) > 32 - def pop(self): + def pop(self) -> tuple[str, str]: return self._traits.popitem() + + +def get_traceparent(headers) -> Traceparent | None: + retval = [] + for key, value in headers.items(): + if traceparent_name_re.match(key): + retval.append((key, value)) + + assert len(retval) == 1 + version, trace_id, span_id, trace_flags = retval[0][1].split("-") + + if len(version) != 2 or len(trace_id) != 32 or len(span_id) != 16 or len(trace_flags) != 2: + return None + + if int(trace_id, 16) == 0 or int(span_id, 16) == 0: + return None + + return Traceparent(version, trace_id, span_id, trace_flags) + + +def get_tracestate(headers) -> Tracestate: + tracestate = Tracestate() + for key, value in headers.items(): + if tracestate_name_re.match(key): + tracestate.from_string(value) + return tracestate diff --git a/utils/properties_serialization.py b/utils/properties_serialization.py index 836b895e56..068cb9a7e0 100644 --- a/utils/properties_serialization.py +++ b/utils/properties_serialization.py @@ -51,11 +51,11 @@ class SetupProperties: def __init__(self): self._store = {} - def store_properties(self, item: pytest.Item): + def store_properties(self, item: pytest.Item) -> None: if properties := self._get_properties(item.instance): self._store[item.nodeid] = properties - def restore_properties(self, item: pytest.Item): + def restore_properties(self, item: pytest.Item) -> None: if properties := self._store.get(item.nodeid): for name, value in properties.items(): logger.debug(f"Restoring {name} for {item.nodeid}") @@ -80,11 +80,11 @@ def _get_properties(instance) -> dict: and not isinstance(value, (_Weblog, InterfaceValidator)) # values that do not carry any tested data } - def dump(self, host_log_folder: str): + def dump(self, host_log_folder: str) -> None: with open(f"{host_log_folder}/setup_properties.json", "w", encoding="utf-8") as f: json.dump(self._store, f, indent=2, cls=_PropertiesEncoder) - def load(self, host_log_folder: str): + def load(self, host_log_folder: str) -> None: filename = f"{host_log_folder}/setup_properties.json" try: with open(filename, encoding="utf-8") as f: diff --git a/utils/proxy/core.py b/utils/proxy/core.py index be91a6fdff..ae9db5a92f 100644 --- a/utils/proxy/core.py +++ b/utils/proxy/core.py @@ -6,6 +6,7 @@ import json import logging import os +from typing import Any from datetime import datetime, UTC from mitmproxy import master, options, http @@ -26,7 +27,7 @@ class ObjectDumpEncoder(json.JSONEncoder): - def default(self, o): + def default(self, o) -> Any: # noqa: ANN401 if isinstance(o, bytes): return str(o) return json.JSONEncoder.default(self, o) diff --git a/utils/scripts/compute-workflow-parameters.py b/utils/scripts/compute-workflow-parameters.py index 81f4c738d7..19a5ae5cc2 100644 --- a/utils/scripts/compute-workflow-parameters.py +++ b/utils/scripts/compute-workflow-parameters.py @@ -4,7 +4,7 @@ from utils._context._scenarios import get_all_scenarios, ScenarioGroup -def get_github_workflow_map(scenarios, scenarios_groups): +def get_github_workflow_map(scenarios, scenarios_groups) -> dict: result = {} scenarios_groups = [group.strip() for group in scenarios_groups if group.strip()] @@ -40,7 +40,7 @@ def get_github_workflow_map(scenarios, scenarios_groups): return result -def get_graphql_weblogs(library): +def get_graphql_weblogs(library) -> list[str]: weblogs = { "cpp": [], "dotnet": [], @@ -55,7 +55,7 @@ def get_graphql_weblogs(library): return weblogs[library] -def get_endtoend_weblogs(library, ci_environment: str): +def get_endtoend_weblogs(library, ci_environment: str) -> list[str]: weblogs = { "cpp": ["nginx"], "dotnet": ["poc", "uds"], @@ -99,7 +99,7 @@ def get_endtoend_weblogs(library, ci_environment: str): return weblogs[library] -def get_opentelemetry_weblogs(library): +def get_opentelemetry_weblogs(library) -> list[str]: weblogs = { "cpp": [], "dotnet": [], @@ -114,7 +114,7 @@ def get_opentelemetry_weblogs(library): return weblogs[library] -def main(language: str, scenarios: str, groups: str, ci_environment: str): +def main(language: str, scenarios: str, groups: str, ci_environment: str) -> None: scenario_map = get_github_workflow_map(scenarios.split(","), groups.split(",")) for github_workflow, scenario_list in scenario_map.items(): diff --git a/utils/scripts/compute_impacted_scenario.py b/utils/scripts/compute_impacted_scenario.py index 2635ee3609..2ce3c7015e 100644 --- a/utils/scripts/compute_impacted_scenario.py +++ b/utils/scripts/compute_impacted_scenario.py @@ -11,20 +11,20 @@ def __init__(self) -> None: self.scenarios = {"DEFAULT"} # always run the default scenario self.scenarios_groups = set() - def add_scenario(self, scenario: str): + def add_scenario(self, scenario: str) -> None: if scenario == "EndToEndScenario": self.add_scenario_group(ScenarioGroup.END_TO_END.value) else: self.scenarios.add(scenario) - def add_scenario_group(self, scenario_group: str): + def add_scenario_group(self, scenario_group: str) -> None: self.scenarios_groups.add(scenario_group) - def add_scenarios(self, scenarios: set[str]): + def add_scenarios(self, scenarios: set[str]) -> None: for scenario in scenarios: self.add_scenario(scenario) - def handle_labels(self, labels: list[str]): + def handle_labels(self, labels: list[str]) -> None: if "run-all-scenarios" in labels: self.add_scenario_group(ScenarioGroup.ALL.value) else: @@ -50,7 +50,7 @@ def handle_labels(self, labels: list[str]): self.add_scenario_group(ScenarioGroup.EXTERNAL_PROCESSING.value) -def main(): +def main() -> None: result = Result() event_name = os.environ["GITHUB_EVENT_NAME"] diff --git a/utils/scripts/decode-rc.py b/utils/scripts/decode-rc.py index 97729275e1..53f50e1b6e 100644 --- a/utils/scripts/decode-rc.py +++ b/utils/scripts/decode-rc.py @@ -1,10 +1,10 @@ import base64 import json -from black import format_str, FileMode +from black import format_str, FileMode, FileContent from utils._remote_config import RemoteConfigCommand -def from_payload(payload): +def from_payload(payload) -> RemoteConfigCommand: targets = json.loads(base64.b64decode(payload["targets"]).decode("utf-8")) result = RemoteConfigCommand(version=targets["signed"]["version"], expires=targets["signed"]["expires"]) @@ -37,7 +37,7 @@ def from_payload(payload): return result -def get_python_code(command: RemoteConfigCommand): +def get_python_code(command: RemoteConfigCommand) -> FileContent: kwargs = {"version": command.version} if command.expires != RemoteConfigCommand.expires: kwargs["expires"] = command.expires @@ -52,7 +52,7 @@ def get_python_code(command: RemoteConfigCommand): return format_str(result, mode=FileMode(line_length=120)) -def main(filename): +def main(filename) -> None: with open(filename, encoding="utf-8") as f: data = json.load(f) diff --git a/utils/scripts/extract_appsec_waf_rules.py b/utils/scripts/extract_appsec_waf_rules.py index 51369435d2..5703437b3a 100644 --- a/utils/scripts/extract_appsec_waf_rules.py +++ b/utils/scripts/extract_appsec_waf_rules.py @@ -6,7 +6,7 @@ import requests -def to_camel_case(str_input): +def to_camel_case(str_input) -> str: return "".join(ele.title() for ele in str_input.split("_")) diff --git a/utils/scripts/get-image-list.py b/utils/scripts/get-image-list.py index 07a93b8798..39f471bdbd 100644 --- a/utils/scripts/get-image-list.py +++ b/utils/scripts/get-image-list.py @@ -7,7 +7,7 @@ from utils._context.containers import _get_client -def main(scenarios: list[str], library: str | None = None, weblog: str | None = None): +def main(scenarios: list[str], library: str | None = None, weblog: str | None = None) -> None: images = set("") existing_tags = [] diff --git a/utils/scripts/get-nightly-logs.py b/utils/scripts/get-nightly-logs.py index cc4838a41b..a239b0ea8d 100644 --- a/utils/scripts/get-nightly-logs.py +++ b/utils/scripts/get-nightly-logs.py @@ -4,6 +4,7 @@ import os import sys import tarfile +from typing import Any import zipfile import requests @@ -14,7 +15,7 @@ logging.getLogger("urllib3").setLevel(logging.WARNING) -def get_environ(): +def get_environ() -> dict[str, str]: environ = {**os.environ} try: @@ -27,7 +28,7 @@ def get_environ(): return environ -def get_json(session: requests.Session, url: str, params=None, timeout: int = 30): +def get_json(session: requests.Session, url: str, params=None, timeout: int = 30) -> Any: # noqa: ANN401 response = session.get(url, params=params, timeout=timeout) response.raise_for_status() return response.json() @@ -37,7 +38,7 @@ def is_included(params: list[str], artifact_name: str) -> bool: return all(param in artifact_name for param in params) -def get_artifacts(session: requests.Session, repo_slug: str, workflow_file: str, run_id: int | None): +def get_artifacts(session: requests.Session, repo_slug: str, workflow_file: str, run_id: int | None) -> list: if run_id is None: data = get_json( session, @@ -63,7 +64,7 @@ def get_artifacts(session: requests.Session, repo_slug: str, workflow_file: str, return artifacts -def download_artifact(session: requests.Session, artifact: dict, output_dir: str | None = None): +def download_artifact(session: requests.Session, artifact: dict, output_dir: str | None = None) -> None: logging.info("Downloading artifact: %s", artifact["name"]) response = session.get(artifact["archive_download_url"], timeout=60) response.raise_for_status() @@ -83,7 +84,7 @@ def main( params: list[str], repo_slug: str = "DataDog/system-tests-dashboard", workflow_file: str = "nightly.yml", -): +) -> None: environ = get_environ() with requests.Session() as session: diff --git a/utils/scripts/get-scenarios-from-group.py b/utils/scripts/get-scenarios-from-group.py index e47a7a9408..9f4e024771 100644 --- a/utils/scripts/get-scenarios-from-group.py +++ b/utils/scripts/get-scenarios-from-group.py @@ -3,7 +3,7 @@ from utils._context._scenarios import get_all_scenarios, ScenarioGroup -def main(group_name: str): +def main(group_name: str) -> None: if group_name == "TRACER_ESSENTIAL_SCENARIOS": # legacy group_name = "essentials" diff --git a/utils/scripts/get-workflow-summary.py b/utils/scripts/get-workflow-summary.py index 49d31e64e7..1ca05c0471 100644 --- a/utils/scripts/get-workflow-summary.py +++ b/utils/scripts/get-workflow-summary.py @@ -5,7 +5,7 @@ import requests -def get_environ(): +def get_environ() -> dict[str, str]: environ = {**os.environ} try: diff --git a/utils/scripts/grep-nightly-logs.py b/utils/scripts/grep-nightly-logs.py index b97a5264d1..590822cef1 100644 --- a/utils/scripts/grep-nightly-logs.py +++ b/utils/scripts/grep-nightly-logs.py @@ -2,6 +2,7 @@ import logging import os import re +from typing import Any import requests @@ -11,7 +12,7 @@ logging.getLogger("urllib3").setLevel(logging.WARNING) -def get_environ(): +def get_environ() -> None: environ = {**os.environ} try: @@ -24,7 +25,7 @@ def get_environ(): return environ -def get_json(url, headers=None, params=None): +def get_json(url, headers=None, params=None) -> Any: # noqa: ANN401 response = requests.get(url, headers=headers, params=params, timeout=30) response.raise_for_status() return response.json() @@ -36,7 +37,7 @@ def main( repo_slug: str = "DataDog/system-tests-dashboard", workflow_file: str = "nightly.yml", branch: str = "main", -): +) -> None: environ = get_environ() gh_token = environ["GH_TOKEN"] headers = {"Authorization": f"token {gh_token}"} diff --git a/utils/scripts/junit_report.py b/utils/scripts/junit_report.py index c2cf51bcd5..00188facd7 100644 --- a/utils/scripts/junit_report.py +++ b/utils/scripts/junit_report.py @@ -8,7 +8,7 @@ from utils.tools import logger -def junit_modifyreport(json_report, junit_report_path, junit_properties): +def junit_modifyreport(json_report, junit_report_path, junit_properties) -> None: """Add extra information to auto generated JUnit xml file""" # Open XML Junit report diff --git a/utils/scripts/markdown_logs.py b/utils/scripts/markdown_logs.py index 8dbe3152cc..ce40afec9d 100644 --- a/utils/scripts/markdown_logs.py +++ b/utils/scripts/markdown_logs.py @@ -3,11 +3,11 @@ import collections -def table_row(*args: list[str]): +def table_row(*args: list[str]) -> None: print(f"| {' | '.join(args)} |") -def main(): +def main() -> None: result = {} all_outcomes = {"passed": "βœ…", "xpassed": "πŸ‡", "skipped": "⏸️", "failed": "❌"} diff --git a/utils/scripts/merge_gitlab_aws_pipelines.py b/utils/scripts/merge_gitlab_aws_pipelines.py index 87342c37b9..0b1411bf0e 100644 --- a/utils/scripts/merge_gitlab_aws_pipelines.py +++ b/utils/scripts/merge_gitlab_aws_pipelines.py @@ -3,7 +3,7 @@ import os.path -def main(): +def main() -> None: parser = argparse.ArgumentParser() parser.add_argument("--input", required=True, type=str, help="gitlab pipeline to merge") parser.add_argument("--output", required=True, type=str, help="final gitlab pipeline") diff --git a/utils/scripts/push-metrics.py b/utils/scripts/push-metrics.py index 441c54a5ee..4170222651 100644 --- a/utils/scripts/push-metrics.py +++ b/utils/scripts/push-metrics.py @@ -24,7 +24,7 @@ def flatten(obj, parent_key="", sep=".") -> list: return result -def main(): +def main() -> None: data = requests.get("https://dd-feature-parity.azurewebsites.net/statistics", timeout=10) values = flatten(data.json()) diff --git a/utils/tools.py b/utils/tools.py index 1c4c893014..d6fa964cc2 100644 --- a/utils/tools.py +++ b/utils/tools.py @@ -7,8 +7,6 @@ import os import re import sys -import socket -import random class ShColors(StrEnum): @@ -25,11 +23,11 @@ class ShColors(StrEnum): UNDERLINE = "\033[4m" -def get_log_formatter(): +def get_log_formatter() -> logging.Formatter: return logging.Formatter("%(asctime)s.%(msecs)03d %(levelname)-8s %(message)s", "%H:%M:%S") -def update_environ_with_local_env(): +def update_environ_with_local_env() -> None: # dynamically load .env file in environ if exists, it allow users to keep their conf via env vars try: with open(".env", encoding="utf-8") as f: @@ -52,7 +50,7 @@ def update_environ_with_local_env(): logging.addLevelName(DEBUG_LEVEL_STDOUT, "STDOUT") -def stdout(self, message, *args, **kws): # noqa: ANN002 +def stdout(self, message, *args, **kws) -> None: # noqa: ANN002 if self.isEnabledFor(DEBUG_LEVEL_STDOUT): # Yes, logger takes its '*args' as 'args'. self._log(DEBUG_LEVEL_STDOUT, message, args, **kws) # pylint: disable=protected-access @@ -69,7 +67,7 @@ def stdout(self, message, *args, **kws): # noqa: ANN002 logging.Logger.stdout = stdout -def get_logger(name="tests", *, use_stdout=False): +def get_logger(name="tests", *, use_stdout=False) -> logging.Logger: result = logging.getLogger(name) logging.getLogger("requests").setLevel(logging.WARNING) @@ -86,26 +84,26 @@ def get_logger(name="tests", *, use_stdout=False): return result -def o(message): +def o(message: str) -> str: return f"{ShColors.OKGREEN}{message}{ShColors.ENDC}" -def w(message): +def w(message: str) -> str: return f"{ShColors.YELLOW}{message}{ShColors.ENDC}" -def m(message): +def m(message: str) -> str: return f"{ShColors.BLUE}{message}{ShColors.ENDC}" -def e(message): +def e(message: str) -> str: return f"{ShColors.RED}{message}{ShColors.ENDC}" logger = get_logger() -def get_rid_from_request(request): +def get_rid_from_request(request) -> str: if request is None: return None @@ -113,7 +111,7 @@ def get_rid_from_request(request): return user_agent[-36:] -def get_rid_from_span(span): +def get_rid_from_span(span) -> str: if not isinstance(span, dict): logger.error(f"Span should be an object, not {type(span)}") return None @@ -150,7 +148,7 @@ def get_rid_from_span(span): return get_rid_from_user_agent(user_agent) -def get_rid_from_user_agent(user_agent): +def get_rid_from_user_agent(user_agent: str) -> str: if not user_agent: return None @@ -162,7 +160,7 @@ def get_rid_from_user_agent(user_agent): return match.group(1) -def nested_lookup(needle: str, heystack, *, look_in_keys=False, exact_match=False): +def nested_lookup(needle: str, heystack, *, look_in_keys=False, exact_match=False) -> bool: """Look for needle in heystack, heystack can be a dict or an array""" if isinstance(heystack, str): @@ -189,17 +187,3 @@ def nested_lookup(needle: str, heystack, *, look_in_keys=False, exact_match=Fals return False raise TypeError(f"Can't handle type {type(heystack)}") - - -def get_free_port(): - last_allowed_port = 32000 - port = random.randint(1100, last_allowed_port - 600) - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - while port <= last_allowed_port: - try: - sock.bind(("", port)) - sock.close() - return port - except OSError: - port += 1 - raise OSError("no free ports") From c10508c3b3efb82f0f488dae5c78605be8277c7b Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Wed, 29 Jan 2025 08:36:58 -0500 Subject: [PATCH 11/23] [python] remove deprecated module from parametric app (#3912) --- utils/build/docker/python/parametric/apm_test_client/server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/build/docker/python/parametric/apm_test_client/server.py b/utils/build/docker/python/parametric/apm_test_client/server.py index 1eb193577a..d79d8ec27d 100644 --- a/utils/build/docker/python/parametric/apm_test_client/server.py +++ b/utils/build/docker/python/parametric/apm_test_client/server.py @@ -29,7 +29,7 @@ from ddtrace.trace import Span from ddtrace import config from ddtrace.contrib.trace_utils import set_http_meta -from ddtrace.context import Context +from ddtrace.trace import Context from ddtrace.constants import ERROR_MSG from ddtrace.constants import ERROR_STACK from ddtrace.constants import ERROR_TYPE From 85e0541e7d4a6fb5156b66bdcb7d9630db95a121 Mon Sep 17 00:00:00 2001 From: Charles de Beauchesne Date: Wed, 29 Jan 2025 14:44:06 +0100 Subject: [PATCH 12/23] Fix job name (#3919) --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 73bcbc5acd..3d682f6baa 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -102,7 +102,7 @@ jobs: exit 1 system_tests: - name: System Tests ${{ needs.get_dev_artifacts.outputs.target-branch != '' && format('({0} branch)', needs.get_dev_artifacts.outputs.target-branch) || '' }} + name: System Tests needs: - lint - test_the_test From a566cae892e1ccb0f6f5ee64a520b73ea2a25f09 Mon Sep 17 00:00:00 2001 From: Attila Szegedi Date: Wed, 29 Jan 2025 16:05:20 +0100 Subject: [PATCH 13/23] Fix query time interval for validating profiler tests (#3915) --- utils/onboarding/backend_interface.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/utils/onboarding/backend_interface.py b/utils/onboarding/backend_interface.py index 701ae85d95..15fff7605b 100644 --- a/utils/onboarding/backend_interface.py +++ b/utils/onboarding/backend_interface.py @@ -117,8 +117,9 @@ def _query_for_profile(runtime_id): headers = _headers() headers["Content-Type"] = "application/json" - time_to = datetime.now(timezone.utc) - time_from = time_to - timedelta(minutes=2) + now = datetime.now(timezone.utc) + time_to = now + timedelta(minutes=6) + time_from = now - timedelta(minutes=6) queryJson = { "track": "profile", "filter": { From 6485341056570706a68ed7f196c3ed5437d99673 Mon Sep 17 00:00:00 2001 From: Charles de Beauchesne Date: Wed, 29 Jan 2025 16:52:46 +0100 Subject: [PATCH 14/23] Activate ANN205 (#3921) --- pyproject.toml | 5 ++++- utils/_features.py | 2 -- utils/interfaces/_backend.py | 2 +- utils/interfaces/_library/appsec.py | 2 +- utils/properties_serialization.py | 3 ++- utils/proxy/core.py | 4 ++-- utils/telemetry_utils.py | 4 ++-- 7 files changed, 12 insertions(+), 10 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 7f36c250f6..0a01e3280a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -82,7 +82,6 @@ ignore = [ "ANN001", "ANN003", "ANN202", - "ANN205", "BLE001", # Do not catch blind exception: `Exception`, big project to enable this "C901", # code complexity, TBD "E722", # bare except, big project to enable this @@ -219,6 +218,7 @@ ignore = [ ] "utils/docker_ssi/*" = [ "ANN201", + "ANN205", ] "utils/{_context/_scenarios/docker_ssi.py,docker_ssi/docker_ssi_matrix_builder.py,docker_ssi/docker_ssi_matrix_utils.py}" = [ "ANN201", @@ -295,4 +295,7 @@ ignore = [ "SIM115", "SLF001", "TRY002", +] +"utils/_features.py" = [ + "ANN205" #obvious decorators ] \ No newline at end of file diff --git a/utils/_features.py b/utils/_features.py index bf2266c16b..c165472189 100644 --- a/utils/_features.py +++ b/utils/_features.py @@ -1,5 +1,3 @@ -# pylint: disable=too-many-lines - import pytest diff --git a/utils/interfaces/_backend.py b/utils/interfaces/_backend.py index b46cf191fb..7edbf6dd3b 100644 --- a/utils/interfaces/_backend.py +++ b/utils/interfaces/_backend.py @@ -28,7 +28,7 @@ def __init__(self, library_interface): self.library_interface = library_interface @staticmethod - def _get_dd_site_api_host(): + def _get_dd_site_api_host() -> str: # https://docs.datadoghq.com/getting_started/site/#access-the-datadog-site # DD_SITE => API HOST # datad0g.com => dd.datad0g.com diff --git a/utils/interfaces/_library/appsec.py b/utils/interfaces/_library/appsec.py index ad6dd78dec..630653a260 100644 --- a/utils/interfaces/_library/appsec.py +++ b/utils/interfaces/_library/appsec.py @@ -36,7 +36,7 @@ def __init__( self.span_validator = span_validator @staticmethod - def _get_parameters(event): + def _get_parameters(event) -> list: result = [] for parameter in event.get("rule_match", {}).get("parameters", []): diff --git a/utils/properties_serialization.py b/utils/properties_serialization.py index 068cb9a7e0..7d55700624 100644 --- a/utils/properties_serialization.py +++ b/utils/properties_serialization.py @@ -1,5 +1,6 @@ import inspect import json +from typing import Any import pytest from requests.structures import CaseInsensitiveDict @@ -29,7 +30,7 @@ def __init__(self): json.JSONDecoder.__init__(self, object_hook=_PropertiesDecoder.from_dict) @staticmethod - def from_dict(d): + def from_dict(d) -> Any: # noqa: ANN401 if klass := d.get("__class__"): if klass == "set": return set(d["values"]) diff --git a/utils/proxy/core.py b/utils/proxy/core.py index ae9db5a92f..e6531d7e79 100644 --- a/utils/proxy/core.py +++ b/utils/proxy/core.py @@ -57,7 +57,7 @@ def __init__(self) -> None: self.rc_api_runtime_ids_request_count = None @staticmethod - def get_error_response(message): + def get_error_response(message) -> http.Response: logger.error(message) return http.Response.make(400, message) @@ -126,7 +126,7 @@ def request(self, flow: Flow): logger.info(f" => reverse proxy to {flow.request.pretty_url}") @staticmethod - def request_is_from_tracer(request): + def request_is_from_tracer(request) -> bool: return request.host == "agent" def response(self, flow): diff --git a/utils/telemetry_utils.py b/utils/telemetry_utils.py index 3912b85292..599e14f882 100644 --- a/utils/telemetry_utils.py +++ b/utils/telemetry_utils.py @@ -8,11 +8,11 @@ class TelemetryUtils: } @staticmethod - def get_loaded_dependency(library): + def get_loaded_dependency(library) -> dict[str, bool]: return TelemetryUtils.test_loaded_dependencies[library] @staticmethod - def get_dd_appsec_sca_enabled_str(library): + def get_dd_appsec_sca_enabled_str(library) -> str: result = "DD_APPSEC_SCA_ENABLED" if library == "java": result = "appsec_sca_enabled" From f0412ab14015f1f985ceaa493cfa78a00965fc3f Mon Sep 17 00:00:00 2001 From: Brian Marks Date: Wed, 29 Jan 2025 11:03:50 -0500 Subject: [PATCH 15/23] Update runbook to reflect updated team ownership (#3924) --- docs/edit/runbook.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/edit/runbook.md b/docs/edit/runbook.md index 481e27fe0b..7ea84aa454 100644 --- a/docs/edit/runbook.md +++ b/docs/edit/runbook.md @@ -18,7 +18,7 @@ The impact is that these **configs are not visible** in Metabase, REDAPL, or any 1. Check the test failure to see exactly which configs are missing 2. Add config normalization rules [here](https://github.com/DataDog/dd-go/tree/prod/trace/apps/tracer-telemetry-intake/telemetry-payload/static/) following the existing pattern - 1. This can be merged with any review from [@apm-ecosystems](https://github.com/orgs/DataDog/teams/apm-ecosystems) + 1. This can be merged with any review from [@apm-sdk](https://github.com/orgs/DataDog/teams/apm-sdk) 2. Bonus Points: Run the auto-formatter [_format.py](https://github.com/DataDog/dd-go/blob/prod/trace/apps/tracer-telemetry-intake/telemetry-payload/static/_format.py) from the `dd-go` root via `python ./trace/apps/tracer-telemetry-intake/telemetry-payload/static/_format.py` 3. After merging, update system-tests by running [update.sh](/tests/telemetry_intake/update.sh) 1. This can be run from the root by running `./tests/telemetry_intake/update.sh` From 9bed9501f3f385dac6a4f1f44370b128a1c3cdc2 Mon Sep 17 00:00:00 2001 From: lievan <42917263+lievan@users.noreply.github.com> Date: Wed, 29 Jan 2025 08:29:22 -0800 Subject: [PATCH 16/23] [MLOB] fix ragas telemetry test (#3926) Co-authored-by: lievan --- tests/telemetry_intake/static/python_config_rules.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/telemetry_intake/static/python_config_rules.json b/tests/telemetry_intake/static/python_config_rules.json index 27a9566999..fe58cb47a2 100644 --- a/tests/telemetry_intake/static/python_config_rules.json +++ b/tests/telemetry_intake/static/python_config_rules.json @@ -43,6 +43,7 @@ "DD_TRACE_SAMPLING_RULES": "trace_sample_rules", "DD_TRACE_SPAN_ATTRIBUTE_SCHEMA": "trace_span_attribute_schema", "DD_TRACE_STARTUP_LOGS": "trace_startup_logs_enabled", + "DD_LLMOBS_EVALUATOR_SAMPLING_RULES": "dd_llmobs_evaluator_sampling_rules", "_dd_trace_writer_log_error_payloads": "trace_writer_log_error_payloads", "agent_url": "trace_agent_url", "appsec.enabled": "appsec_enabled", From 98bd83a3eddd504df3a40886fed167971fdf7f39 Mon Sep 17 00:00:00 2001 From: Romain Marcadier Date: Wed, 29 Jan 2025 19:28:41 +0100 Subject: [PATCH 17/23] [golang] standalone appsec propagation (v1) was released in v1.71.0 (#3928) --- manifests/golang.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/golang.yml b/manifests/golang.yml index 2ee5667d62..93560674bd 100644 --- a/manifests/golang.yml +++ b/manifests/golang.yml @@ -308,7 +308,7 @@ tests/: echo: v1.36.0 gin: v1.37.0 test_asm_standalone.py: - Test_AppSecStandalone_UpstreamPropagation: v1.72.0-dev + Test_AppSecStandalone_UpstreamPropagation: v1.71.0 Test_AppSecStandalone_UpstreamPropagation_V2: missing_feature Test_IastStandalone_UpstreamPropagation: missing_feature Test_IastStandalone_UpstreamPropagation_V2: missing_feature From 564ea43827109fe6efdf1b950653fdad0f832b34 Mon Sep 17 00:00:00 2001 From: Bryan English Date: Wed, 29 Jan 2025 15:44:34 -0500 Subject: [PATCH 18/23] add nodejs middleware tracing config option (#3930) --- tests/telemetry_intake/static/nodejs_config_rules.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/telemetry_intake/static/nodejs_config_rules.json b/tests/telemetry_intake/static/nodejs_config_rules.json index 3cd2775b71..ef91cf90ea 100644 --- a/tests/telemetry_intake/static/nodejs_config_rules.json +++ b/tests/telemetry_intake/static/nodejs_config_rules.json @@ -36,6 +36,7 @@ "DD_TRACE_CLIENT_IP_HEADER": "trace_client_ip_header", "DD_TRACE_DEBUG": "trace_debug_enabled", "DD_TRACE_ENABLED": "trace_enabled", + "DD_TRACE_MIDDLEWARE_ENABLED": "trace_middleware_enabled", "DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP": "trace_obfuscation_query_string_regexp", "DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED": "trace_peer_service_defaults_enabled", "DD_TRACE_PEER_SERVICE_MAPPING": "trace_peer_service_mapping", @@ -98,6 +99,7 @@ "logger": "logger", "logs.injection": "logs_injection_enabled", "lookup": "lookup", + "middlewareTracingEnabled": "trace_middleware_enabled", "peerServiceMapping": "trace_peer_service_mapping", "plugins": "plugins", "port": "trace_agent_port", From 374e30b2fdb1791a5e80f08a01acd6f4417ea7c8 Mon Sep 17 00:00:00 2001 From: William Conti <58711692+wconti27@users.noreply.github.com> Date: Wed, 29 Jan 2025 17:15:51 -0500 Subject: [PATCH 19/23] graphql nodejs error testing (#3909) Adds weblog endpoint for nodejs for graphql error testing --- manifests/nodejs.yml | 8 ++++- utils/build/docker/nodejs/express/graphql.js | 34 ++++++++++++++++++-- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/manifests/nodejs.yml b/manifests/nodejs.yml index d10e4b9666..322fc67948 100644 --- a/manifests/nodejs.yml +++ b/manifests/nodejs.yml @@ -44,6 +44,7 @@ refs: - &ref_5_30_0 '>=5.30.0 || ^4.54.0' - &ref_5_32_0 '>=5.32.0' - &ref_5_33_0 '>=5.33.0' + - &ref_5_34_0 '>=5.34.0' tests/: apm_tracing_e2e/: @@ -912,7 +913,12 @@ tests/: Test_Synthetics_APM_Datadog: '*': *ref_5_25_0 nextjs: bug (APMAPI-939) # the nextjs weblog application changes the sampling priority from 1.0 to 2.0 - test_graphql.py: missing_feature + test_graphql.py: + Test_GraphQLQueryErrorReporting: + '*': *ref_5_34_0 + express4-typescript: incomplete_test_app (endpoint not implemented) + express5: missing_feature + nextjs: missing_feature test_identify.py: Test_Basic: v2.4.0 Test_Propagate: *ref_3_2_0 diff --git a/utils/build/docker/nodejs/express/graphql.js b/utils/build/docker/nodejs/express/graphql.js index c26f1454bb..6c39dc0d07 100644 --- a/utils/build/docker/nodejs/express/graphql.js +++ b/utils/build/docker/nodejs/express/graphql.js @@ -25,11 +25,22 @@ const typeDefs = gql` user(id: Int!): User userByName(name: String): [User] testInjection(path: String): [User] + withError: ID } type User { id: Int name: String + } + + type Error { + message: String + extensions: [Extension] + } + + type Extension { + key: String + value: String }` function getUser (parent, args) { @@ -49,16 +60,35 @@ function testInjection (parent, args) { return users } +function withError (parent, args) { + throw new Error('test error') +} + const resolvers = { Query: { user: getUser, userByName: getUserByName, - testInjection + testInjection, + withError + } +} + +// Custom error formatting +const formatError = (error) => { + return { + message: error.message, + extensions: [ + { key: 'int-1', value: '1' }, + { key: 'str-1', value: '1' }, + { key: 'array-1-2', value: [1, '2'] }, + { key: 'empty', value: 'empty string' }, + { key: 'comma', value: 'comma' } + ] } } module.exports = async function (app) { - const server = new ApolloServer({ typeDefs, resolvers }) + const server = new ApolloServer({ typeDefs, resolvers, formatError }) await server.start() server.applyMiddleware({ app }) } From be0a69d114d33df2fad6a94246ea23baf53ba3ee Mon Sep 17 00:00:00 2001 From: Charles de Beauchesne Date: Thu, 30 Jan 2025 09:29:54 +0100 Subject: [PATCH 20/23] Instrument pathlib.Path.open in scrubber (#3927) --- tests/test_the_test/test_scrubber.py | 58 +++++++++++++++++++++++++++- utils/proxy/scrubber.py | 40 ++++++++++++++++++- 2 files changed, 95 insertions(+), 3 deletions(-) diff --git a/tests/test_the_test/test_scrubber.py b/tests/test_the_test/test_scrubber.py index f2b13e9a60..29da1a3260 100644 --- a/tests/test_the_test/test_scrubber.py +++ b/tests/test_the_test/test_scrubber.py @@ -1,8 +1,10 @@ +import io import json import os +from pathlib import Path import subprocess import pytest -from utils import scenarios +from utils import scenarios, missing_feature from utils.tools import logger @@ -96,3 +98,57 @@ def test_jsonweird(): data = f.read() assert f"{secret}" not in data + + +@scenarios.test_the_test +def test_pathlib(): + secret = 123456789 + os.environ["KEY_SCRUBBED"] = f"{secret}" + + log_file = "logs_test_the_test/pathlib.txt" + with Path(log_file).open("w") as f: + json.dump({"int": secret, "str": f"{secret}"}, f) + f.writelines([f"{secret}"]) + + del os.environ["KEY_SCRUBBED"] + + with open(log_file, "r") as f: + data = f.read() + + assert f"{secret}" not in data + + +@scenarios.test_the_test +@missing_feature(True, reason="Not supported") +def test_os_open(): + secret = 123456789 + os.environ["KEY_SCRUBBED"] = f"{secret}" + + log_file = "logs_test_the_test/os_open.txt" + fd = os.open(log_file, os.O_WRONLY | os.O_CREAT) + os.write(fd, f"{secret}".encode()) + os.close(fd) + + del os.environ["KEY_SCRUBBED"] + + with open(log_file, "r") as f: + data = f.read() + + assert f"{secret}" not in data + + +@scenarios.test_the_test +def test_io_file(): + secret = 123456789 + os.environ["KEY_SCRUBBED"] = f"{secret}" + + log_file = "logs_test_the_test/io_fileio.txt" + with io.FileIO(log_file, "w") as f: + f.write(f"{secret}".encode()) + + del os.environ["KEY_SCRUBBED"] + + with open(log_file, "r") as f: + data = f.read() + + assert f"{secret}" not in data diff --git a/utils/proxy/scrubber.py b/utils/proxy/scrubber.py index 29fed5a390..c12fd750b6 100644 --- a/utils/proxy/scrubber.py +++ b/utils/proxy/scrubber.py @@ -1,5 +1,7 @@ import builtins +import io import os +from pathlib import Path import re _not_secrets = { @@ -35,8 +37,9 @@ def _instrument_write_methods_bytes(f, secrets: list[str]) -> None: original_write = f.write def write(data): - for secret in secrets: - data = data.replace(secret.encode(), b"") + if hasattr(data, "replace"): + for secret in secrets: + data = data.replace(secret.encode(), b"") original_write(data) @@ -58,5 +61,38 @@ def _instrumented_open(file, mode="r", *args, **kwargs): # noqa: ANN002 return f +def _instrumented_path_open(self, mode="r", *args, **kwargs): # noqa: ANN002 + f = _original_pathlib_open(self, mode, *args, **kwargs) + + # get list of secrets at each call, because environ may be updated + secrets = _get_secrets() + + if ("w" in mode or "a" in mode) and len(secrets) > 0: + if "b" in mode: + _instrument_write_methods_bytes(f, secrets) + else: + _instrument_write_methods_str(f, secrets) + + return f + + +def _instrumented_file_io(file, mode="r", *args, **kwargs): # noqa: ANN002 + f = _original_file_io(file, mode, *args, **kwargs) + + # get list of secrets at each call, because environ may be updated + secrets = _get_secrets() + + if ("w" in mode or "a" in mode) and len(secrets) > 0: + _instrument_write_methods_bytes(f, secrets) + + return f + + _original_open = builtins.open builtins.open = _instrumented_open + +_original_pathlib_open = Path.open +Path.open = _instrumented_path_open + +_original_file_io = io.FileIO +io.FileIO = _instrumented_file_io From 60a1b5748c8a620cff51d73b2f5e7180727eac41 Mon Sep 17 00:00:00 2001 From: Eliott Bouhana <47679741+eliottness@users.noreply.github.com> Date: Thu, 30 Jan 2025 10:34:18 +0000 Subject: [PATCH 21/23] [golang] new orchestrion go weblog (#3555) Signed-off-by: Eliott Bouhana Co-authored-by: Romain Marcadier --- .github/workflows/ci.yml | 2 +- docs/execute/binaries.md | 6 + manifests/golang.yml | 26 +- tests/test_semantic_conventions.py | 1 + tests/test_standard_tags.py | 2 +- .../internal/common/http_client_default.go | 18 + .../common/http_client_orchestrion.go | 16 + .../app/internal/common/standalone_asm.go | 4 +- .../golang/app/net-http-orchestrion/main.go | 649 ++++++++++++++++++ utils/build/docker/golang/install_ddtrace.sh | 13 +- .../docker/golang/install_orchestrion.sh | 23 + .../golang/net-http-orchestrion.Dockerfile | 42 ++ utils/scripts/compute-workflow-parameters.py | 2 +- utils/scripts/load-binary.sh | 3 + 14 files changed, 794 insertions(+), 13 deletions(-) create mode 100644 utils/build/docker/golang/app/internal/common/http_client_default.go create mode 100644 utils/build/docker/golang/app/internal/common/http_client_orchestrion.go create mode 100644 utils/build/docker/golang/app/net-http-orchestrion/main.go create mode 100755 utils/build/docker/golang/install_orchestrion.sh create mode 100644 utils/build/docker/golang/net-http-orchestrion.Dockerfile diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3d682f6baa..3ae0eefeee 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -157,7 +157,7 @@ jobs: runs-on: ubuntu-latest needs: - system_tests - if: always() + if: '!cancelled()' steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 diff --git a/docs/execute/binaries.md b/docs/execute/binaries.md index a38003046d..bb54ea33ae 100644 --- a/docs/execute/binaries.md +++ b/docs/execute/binaries.md @@ -34,6 +34,12 @@ Create a file `golang-load-from-go-get` under the `binaries` directory that spec * `gopkg.in/DataDog/dd-trace-go.v1@v1.67.0` Test the 1.67.0 release * `gopkg.in/DataDog/dd-trace-go.v1@` Test un-merged changes +To change Orchestrion version, create a file `orchestrion-load-from-go-get` under the `binaries` directory that specifies the target build. The content of this file will be installed by the weblog or parametric app via `go get` when the test image is built. +* Content example: + * `github.com/DataDog/orchestrion@main` Test the main branch + * `github.com/DataDog/orchestrion@v1.1.0` Test the 1.1.0 release + * `github.com/DataDog/orchestrion@` Test un-merged changes + ## Java library Follow these steps to run Parametric tests with a custom Java Tracer version: diff --git a/manifests/golang.yml b/manifests/golang.yml index 93560674bd..1e118d62a7 100644 --- a/manifests/golang.yml +++ b/manifests/golang.yml @@ -22,6 +22,7 @@ tests/: Test_API_Security_Sampling_Rate: '*': v1.60.0 net-http: irrelevant (net-http doesn't handle path params) + net-http-orchestrion: irrelevant (net-http doesn't handle path params) Test_API_Security_Sampling_With_Delay: missing_feature test_schemas.py: Test_Scanners: missing_feature @@ -32,6 +33,7 @@ tests/: Test_Schema_Request_Path_Parameters: '*': v1.60.0 net-http: irrelevant (net-http cannot list path params) + net-http-orchestrion: irrelevant (net-http cannot list path params) Test_Schema_Request_Query_Parameters: v1.60.0 Test_Schema_Response_Body: missing_feature Test_Schema_Response_Body_env_var: missing_feature @@ -217,6 +219,7 @@ tests/: '*': v1.36.0 gin: v1.37.0 net-http: irrelevant (net-http doesn't handle path params) + net-http-orchestrion: irrelevant (net-http doesn't handle path params) Test_ResponseStatus: '*': v1.36.0 gin: v1.37.0 @@ -337,21 +340,27 @@ tests/: Test_Blocking_request_cookies: '*': v1.51.0 net-http: irrelevant + net-http-orchestrion: irrelevant Test_Blocking_request_headers: '*': v1.51.0 net-http: irrelevant + net-http-orchestrion: irrelevant Test_Blocking_request_method: '*': v1.51.0 net-http: irrelevant + net-http-orchestrion: irrelevant Test_Blocking_request_path_params: '*': v1.51.0 net-http: irrelevant + net-http-orchestrion: irrelevant Test_Blocking_request_query: '*': v1.51.0 net-http: irrelevant + net-http-orchestrion: irrelevant Test_Blocking_request_uri: '*': v1.51.0 net-http: irrelevant + net-http-orchestrion: irrelevant Test_Blocking_response_headers: missing_feature Test_Blocking_response_status: missing_feature Test_Blocking_user_id: v1.51.0 @@ -457,21 +466,26 @@ tests/: Test_Kinesis_PROPAGATION_VIA_MESSAGE_ATTRIBUTES: "*": irrelevant net-http: missing_feature (Endpoint not implemented) + net-http-orchestrion: missing_feature (Endpoint not implemented) test_rabbitmq.py: Test_RabbitMQ_Trace_Context_Propagation: "*": irrelevant net-http: missing_feature (Endpoint not implemented) + net-http-orchestrion: missing_feature (Endpoint not implemented) test_sns_to_sqs.py: Test_SNS_Propagation: "*": irrelevant net-http: missing_feature + net-http-orchestrion: missing_feature (Endpoint not implemented) test_sqs.py: Test_SQS_PROPAGATION_VIA_AWS_XRAY_HEADERS: "*": irrelevant net-http: missing_feature (Endpoint not implemented) + net-http-orchestrion: missing_feature (Endpoint not implemented) Test_SQS_PROPAGATION_VIA_MESSAGE_ATTRIBUTES: "*": irrelevant net-http: missing_feature (Endpoint not implemented) + net-http-orchestrion: missing_feature (Endpoint not implemented) test_db_integrations_sql.py: Test_MsSql: missing_feature Test_MySql: missing_feature @@ -492,27 +506,35 @@ tests/: Test_DsmKinesis: "*": irrelevant net-http: missing_feature (Endpoint not implemented) + net-http-orchestrion: missing_feature (Endpoint not implemented) Test_DsmRabbitmq: "*": irrelevant net-http: missing_feature (Endpoint not implemented) + net-http-orchestrion: missing_feature (Endpoint not implemented) Test_DsmRabbitmq_FanoutExchange: "*": irrelevant net-http: missing_feature (Endpoint not implemented) + net-http-orchestrion: missing_feature (Endpoint not implemented) Test_DsmRabbitmq_TopicExchange: "*": irrelevant net-http: missing_feature (Endpoint not implemented) + net-http-orchestrion: missing_feature (Endpoint not implemented) Test_DsmSNS: "*": irrelevant net-http: missing_feature (Endpoint not implemented) + net-http-orchestrion: missing_feature (Endpoint not implemented) Test_DsmSQS: "*": irrelevant net-http: missing_feature (Endpoint not implemented) + net-http-orchestrion: missing_feature (Endpoint not implemented) Test_Dsm_Manual_Checkpoint_Inter_Process: "*": irrelevant net-http: missing_feature (Endpoint not implemented) + net-http-orchestrion: missing_feature (Endpoint not implemented) Test_Dsm_Manual_Checkpoint_Intra_Process: "*": irrelevant net-http: missing_feature (Endpoint not implemented) + net-http-orchestrion: missing_feature (Endpoint not implemented) test_inferred_proxy.py: Test_AWS_API_Gateway_Inferred_Span_Creation: missing_feature test_otel_drop_in.py: @@ -592,7 +614,9 @@ tests/: Test_Config_ClientTagQueryString_Configured: v1.72.0-dev Test_Config_ClientTagQueryString_Empty: v1.72.0-dev Test_Config_HttpClientErrorStatuses_Default: v1.69.0 - Test_Config_HttpClientErrorStatuses_FeatureFlagCustom: v1.69.0 + Test_Config_HttpClientErrorStatuses_FeatureFlagCustom: + '*': v1.69.0 + net-http-orchestrion: v1.72.0-dev Test_Config_HttpServerErrorStatuses_Default: v1.67.0 Test_Config_HttpServerErrorStatuses_FeatureFlagCustom: "*": v1.69.0 diff --git a/tests/test_semantic_conventions.py b/tests/test_semantic_conventions.py index b18aad50ba..f296bb5936 100644 --- a/tests/test_semantic_conventions.py +++ b/tests/test_semantic_conventions.py @@ -36,6 +36,7 @@ "graphql-go": "graphql-go/graphql", "jersey-grizzly2": {"jakarta-rs.request": "jakarta-rs-controller", "grizzly.request": ["grizzly", "jakarta-rs"]}, "net-http": "net/http", + "net-http-orchestrion": "net/http", "sinatra": {"rack.request": "rack"}, "spring-boot": { "servlet.request": "tomcat-server", diff --git a/tests/test_standard_tags.py b/tests/test_standard_tags.py index b085a147ac..6b286a72b5 100644 --- a/tests/test_standard_tags.py +++ b/tests/test_standard_tags.py @@ -209,7 +209,7 @@ def test_route(self): if context.library == "nodejs": tags["http.route"] = "/sample_rate_route/:i" if context.library == "golang": - if context.weblog_variant == "net-http": + if "net-http" in context.weblog_variant: # net/http doesn't support parametrized routes but a path catches anything down the tree. tags["http.route"] = "/sample_rate_route/" if context.weblog_variant in ("gin", "echo", "uds-echo"): diff --git a/utils/build/docker/golang/app/internal/common/http_client_default.go b/utils/build/docker/golang/app/internal/common/http_client_default.go new file mode 100644 index 0000000000..62b7c98cff --- /dev/null +++ b/utils/build/docker/golang/app/internal/common/http_client_default.go @@ -0,0 +1,18 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2024 Datadog, Inc. + +//go:build !orchestrion + +package common + +import ( + "net/http" + + httptrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http" +) + +func httpClient() *http.Client { + return httptrace.WrapClient(http.DefaultClient, httptrace.RTWithPropagation(true)) +} diff --git a/utils/build/docker/golang/app/internal/common/http_client_orchestrion.go b/utils/build/docker/golang/app/internal/common/http_client_orchestrion.go new file mode 100644 index 0000000000..a079523784 --- /dev/null +++ b/utils/build/docker/golang/app/internal/common/http_client_orchestrion.go @@ -0,0 +1,16 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2024 Datadog, Inc. + +//go:build orchestrion + +package common + +import ( + "net/http" +) + +func httpClient() *http.Client { + return http.DefaultClient +} diff --git a/utils/build/docker/golang/app/internal/common/standalone_asm.go b/utils/build/docker/golang/app/internal/common/standalone_asm.go index 28bed3c060..a0c4fb8e9e 100644 --- a/utils/build/docker/golang/app/internal/common/standalone_asm.go +++ b/utils/build/docker/golang/app/internal/common/standalone_asm.go @@ -11,12 +11,10 @@ import ( "log" "net/http" "strings" - - httptrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http" ) func Requestdownstream(w http.ResponseWriter, r *http.Request) { - client := httptrace.WrapClient(http.DefaultClient, httptrace.RTWithPropagation(true)) + client := httpClient() req, _ := http.NewRequest(http.MethodGet, "http://127.0.0.1:7777/returnheaders", nil) req = req.WithContext(r.Context()) res, err := client.Do(req) diff --git a/utils/build/docker/golang/app/net-http-orchestrion/main.go b/utils/build/docker/golang/app/net-http-orchestrion/main.go new file mode 100644 index 0000000000..5e1147becb --- /dev/null +++ b/utils/build/docker/golang/app/net-http-orchestrion/main.go @@ -0,0 +1,649 @@ +package main + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "io" + "log" + "math/rand" + "net/http" + "net/http/httptest" + "os" + "os/signal" + "strconv" + "strings" + "syscall" + "time" + + "weblog/internal/common" + "weblog/internal/grpc" + "weblog/internal/rasp" + + "github.com/Shopify/sarama" + "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/propagation" + "go.opentelemetry.io/otel/trace" + "gopkg.in/DataDog/dd-trace-go.v1/appsec" + "gopkg.in/DataDog/dd-trace-go.v1/datastreams" + "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentelemetry" + "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" +) + +func main() { + mux := http.NewServeMux() + + mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + // "/" is the default route when the others don't match + // cf. documentation at https://pkg.go.dev/net/http#ServeMux + // Therefore, we need to check the URL path to only handle the `/` case + if r.URL.Path != "/" { + w.WriteHeader(http.StatusNotFound) + return + } + w.WriteHeader(http.StatusOK) + }) + + mux.HandleFunc("/stats-unique", func(w http.ResponseWriter, r *http.Request) { + if c := r.URL.Query().Get("code"); c != "" { + if code, err := strconv.Atoi(c); err == nil { + w.WriteHeader(code) + return + } + } + w.WriteHeader(http.StatusOK) + }) + + mux.HandleFunc("/healthcheck", func(w http.ResponseWriter, r *http.Request) { + + healthCheck, err := common.GetHealtchCheck() + if err != nil { + http.Error(w, "Can't get JSON data", http.StatusInternalServerError) + } + + jsonData, err := json.Marshal(healthCheck) + if err != nil { + http.Error(w, "Can't build JSON data", http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") + w.Write(jsonData) + }) + + mux.HandleFunc("/waf", func(w http.ResponseWriter, r *http.Request) { + body, err := common.ParseBody(r) + if err == nil { + appsec.MonitorParsedHTTPBody(r.Context(), body) + } + w.Write([]byte("Hello, WAF!\n")) + }) + + mux.HandleFunc("/waf/", func(w http.ResponseWriter, r *http.Request) { + body, err := common.ParseBody(r) + if err == nil { + appsec.MonitorParsedHTTPBody(r.Context(), body) + } + write(w, r, []byte("Hello, WAF!")) + }) + + mux.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) { + userId := r.URL.Query().Get("user") + if err := appsec.SetUser(r.Context(), userId); err != nil { + return + } + w.Write([]byte("Hello, user!")) + }) + + mux.HandleFunc("/sample_rate_route/", func(w http.ResponseWriter, r *http.Request) { + // net/http mux doesn't support advanced patterns, but the given prefix will match any /sample_rate_route/{i} + w.Write([]byte("OK")) + }) + + mux.HandleFunc("/tag_value/{tag_value}/{status_code}", func(w http.ResponseWriter, r *http.Request) { + tag := r.PathValue("tag_value") + status, _ := strconv.Atoi(r.PathValue("status_code")) + span, _ := tracer.SpanFromContext(r.Context()) + span.SetTag("appsec.events.system_tests_appsec_event.value", tag) + for key, values := range r.URL.Query() { + for _, value := range values { + w.Header().Add(key, value) + } + } + w.WriteHeader(status) + w.Write([]byte("Value tagged")) + + switch { + case r.Header.Get("Content-Type") == "application/json": + body, _ := io.ReadAll(r.Body) + var bodyMap map[string]any + if err := json.Unmarshal(body, &bodyMap); err == nil { + appsec.MonitorParsedHTTPBody(r.Context(), bodyMap) + } + case r.ParseForm() == nil: + appsec.MonitorParsedHTTPBody(r.Context(), r.PostForm) + } + }) + + mux.HandleFunc("/status", func(w http.ResponseWriter, r *http.Request) { + if c := r.URL.Query().Get("code"); c != "" { + if code, err := strconv.Atoi(c); err == nil { + w.WriteHeader(code) + } + } + w.Write([]byte("OK")) + }) + + mux.HandleFunc("/make_distant_call", func(w http.ResponseWriter, r *http.Request) { + url := r.URL.Query().Get("url") + if url == "" { + w.Write([]byte("OK")) + return + } + + req, _ := http.NewRequestWithContext(r.Context(), http.MethodGet, url, nil) + res, err := http.DefaultClient.Do(req) + if err != nil { + log.Fatalln("client.Do", err) + } + + defer res.Body.Close() + + requestHeaders := make(map[string]string, len(req.Header)) + for key, values := range req.Header { + requestHeaders[key] = strings.Join(values, ",") + } + + responseHeaders := make(map[string]string, len(res.Header)) + for key, values := range res.Header { + responseHeaders[key] = strings.Join(values, ",") + } + + jsonResponse, err := json.Marshal(struct { + URL string `json:"url"` + StatusCode int `json:"status_code"` + RequestHeaders map[string]string `json:"request_headers"` + ResponseHeaders map[string]string `json:"response_headers"` + }{URL: url, StatusCode: res.StatusCode, RequestHeaders: requestHeaders, ResponseHeaders: responseHeaders}) + if err != nil { + log.Fatalln(err) + } + w.Header().Set("Content-Type", "application/json") + w.Write(jsonResponse) + }) + + mux.HandleFunc("/headers", headers) + mux.HandleFunc("/headers/", headers) + + identify := func(w http.ResponseWriter, r *http.Request) { + if span, ok := tracer.SpanFromContext(r.Context()); ok { + tracer.SetUser( + span, "usr.id", tracer.WithUserEmail("usr.email"), + tracer.WithUserName("usr.name"), tracer.WithUserSessionID("usr.session_id"), + tracer.WithUserRole("usr.role"), tracer.WithUserScope("usr.scope"), + ) + } + w.Write([]byte("Hello, identify!")) + } + mux.HandleFunc("/identify/", identify) + mux.HandleFunc("/identify", identify) + mux.HandleFunc("/identify-propagate", func(w http.ResponseWriter, r *http.Request) { + if span, ok := tracer.SpanFromContext(r.Context()); ok { + tracer.SetUser(span, "usr.id", tracer.WithPropagation()) + } + w.Write([]byte("Hello, identify-propagate!")) + }) + + mux.HandleFunc("/kafka/produce", func(w http.ResponseWriter, r *http.Request) { + var message = "Test" + + topic := r.URL.Query().Get("topic") + if len(topic) == 0 { + w.Write([]byte("missing param 'topic'")) + w.WriteHeader(422) + return + } + + _, _, err := kafkaProduce(topic, message) + if err != nil { + w.Write([]byte(err.Error())) + w.WriteHeader(500) + return + } + + w.Write([]byte("OK")) + w.WriteHeader(200) + }) + + mux.HandleFunc("/kafka/consume", func(w http.ResponseWriter, r *http.Request) { + topic := r.URL.Query().Get("topic") + if len(topic) == 0 { + w.Write([]byte("missing param 'topic'")) + w.WriteHeader(422) + return + } + + timeout, err := strconv.ParseInt(r.URL.Query().Get("timeout"), 10, 0) + if err != nil { + timeout = 20 + } + + message, status, err := kafkaConsume(topic, timeout) + if err != nil { + panic(err) + } + + w.Write([]byte(message)) + w.WriteHeader(status) + }) + + mux.HandleFunc("/user_login_success_event", func(w http.ResponseWriter, r *http.Request) { + uquery := r.URL.Query() + uid := "system_tests_user" + if q := uquery.Get("event_user_id"); q != "" { + uid = q + } + appsec.TrackUserLoginSuccessEvent(r.Context(), uid, map[string]string{"metadata0": "value0", "metadata1": "value1"}) + }) + + mux.HandleFunc("/user_login_failure_event", func(w http.ResponseWriter, r *http.Request) { + uquery := r.URL.Query() + uid := "system_tests_user" + if q := uquery.Get("event_user_id"); q != "" { + uid = q + } + exists := true + if q := uquery.Get("event_user_exists"); q != "" { + parsed, err := strconv.ParseBool(q) + if err != nil { + exists = parsed + } + } + appsec.TrackUserLoginFailureEvent(r.Context(), uid, exists, map[string]string{"metadata0": "value0", "metadata1": "value1"}) + }) + + mux.HandleFunc("/custom_event", func(w http.ResponseWriter, r *http.Request) { + uquery := r.URL.Query() + name := "system_tests_event" + if q := uquery.Get("event_name"); q != "" { + name = q + } + appsec.TrackCustomEvent(r.Context(), name, map[string]string{"metadata0": "value0", "metadata1": "value1"}) + }) + + //orchestrion:ignore + mux.HandleFunc("/e2e_otel_span", func(w http.ResponseWriter, r *http.Request) { + parentName := r.URL.Query().Get("parentName") + childName := r.URL.Query().Get("childName") + + tags := []attribute.KeyValue{} + // We need to propagate the user agent header to retain the mapping between the system-tests/weblog request id + // and the traces/spans that will be generated below, so that we can reference to them in our tests. + // See https://github.com/DataDog/system-tests/blob/2d6ae4d5bf87d55855afd36abf36ee710e7d8b3c/utils/interfaces/_core.py#L156 + userAgent := r.UserAgent() + tags = append(tags, attribute.String("http.useragent", userAgent)) + + if r.URL.Query().Get("shouldIndex") == "1" { + tags = append(tags, + attribute.Int("_dd.filter.kept", 1), + attribute.String("_dd.filter.id", "system_tests_e2e"), + ) + } + + p := opentelemetry.NewTracerProvider() + oteltracer := p.Tracer("") + otel.SetTracerProvider(p) + otel.SetTextMapPropagator(propagation.TraceContext{}) + defer p.ForceFlush(time.Second, func(ok bool) {}) + + // Parent span will have the following traits : + // - spanId of 10000 + // - tags {'attributes':'values'} + // - tags necessary to retain the mapping between the system-tests/weblog request id and the traces/spans + // - error tag with 'testing_end_span_options' message + parentCtx, parentSpan := oteltracer.Start(opentelemetry.ContextWithStartOptions(context.Background(), + tracer.WithSpanID(10000)), parentName, + trace.WithAttributes(tags...)) + parentSpan.SetAttributes(attribute.String("attributes", "values")) + opentelemetry.EndOptions(parentSpan, tracer.WithError(errors.New("testing_end_span_options"))) + + // Child span will have the following traits : + // - tags necessary to retain the mapping between the system-tests/weblog request id and the traces/spans + // - duration of one second + // - span kind of SpanKind - Internal + start := time.Now() + _, childSpan := oteltracer.Start(parentCtx, childName, trace.WithTimestamp(start), trace.WithAttributes(tags...), trace.WithSpanKind(trace.SpanKindInternal)) + childSpan.End(trace.WithTimestamp(start.Add(time.Second))) + parentSpan.End() + + w.Write([]byte("OK")) + }) + + //orchestrion:ignore + mux.HandleFunc("/e2e_otel_span/mixed_contrib", func(w http.ResponseWriter, r *http.Request) { + parentName := r.URL.Query().Get("parentName") + + tags := []attribute.KeyValue{} + // We need to propagate the user agent header to retain the mapping between the system-tests/weblog request id + // and the traces/spans that will be generated below, so that we can reference to them in our tests. + // See https://github.com/DataDog/system-tests/blob/2d6ae4d5bf87d55855afd36abf36ee710e7d8b3c/utils/interfaces/_core.py#L156 + userAgent := r.UserAgent() + tags = append(tags, attribute.String("http.useragent", userAgent)) + + if r.URL.Query().Get("shouldIndex") == "1" { + tags = append(tags, + attribute.Int("_dd.filter.kept", 1), + attribute.String("_dd.filter.id", "system_tests_e2e"), + ) + } + + p := opentelemetry.NewTracerProvider() + tracer := p.Tracer("") + otel.SetTracerProvider(p) + otel.SetTextMapPropagator(propagation.TraceContext{}) + defer p.ForceFlush(time.Second, func(ok bool) {}) + + parentCtx, parentSpan := tracer.Start(context.Background(), parentName, trace.WithAttributes(tags...)) + + h := otelhttp.NewHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + receivedSpan := trace.SpanFromContext(r.Context()) + // Need to propagate the user agent header to retain the mapping between + // the system-tests/weblog request id and the traces/spans + receivedSpan.SetAttributes(tags...) + if receivedSpan.SpanContext().TraceID() != parentSpan.SpanContext().TraceID() { + log.Fatalln("error in distributed tracing: Datadog OTel API and Otel net/http package span are not connected") + w.WriteHeader(500) + return + } + }), "testOperation") + testServer := httptest.NewServer(h) + defer testServer.Close() + + // Need to propagate the user agent header to retain the mapping between + // the system-tests/weblog request id and the traces/spans + c := http.Client{Transport: otelhttp.NewTransport(nil, otelhttp.WithSpanOptions(trace.WithAttributes(tags...)))} + req, err := http.NewRequestWithContext(parentCtx, http.MethodGet, testServer.URL, nil) + if err != nil { + log.Fatalln(err) + w.WriteHeader(500) + return + } + resp, err := c.Do(req) + _ = resp.Body.Close() // Need to close body to cause otel span to end + if err != nil { + log.Fatalln(err) + w.WriteHeader(500) + return + } + parentSpan.End() + + w.Write([]byte("OK")) + }) + + mux.HandleFunc("/read_file", func(w http.ResponseWriter, r *http.Request) { + path := r.URL.Query().Get("file") + content, err := os.ReadFile(path) + + if err != nil { + log.Fatalln(err) + w.WriteHeader(500) + return + } + w.Write([]byte(content)) + }) + + mux.HandleFunc("/dsm", func(w http.ResponseWriter, r *http.Request) { + var message = "Test DSM Context Propagation" + + integration := r.URL.Query().Get("integration") + if len(integration) == 0 { + w.WriteHeader(422) + w.Write([]byte("missing param 'integration'")) + return + } + + if integration == "kafka" { + queue := r.URL.Query().Get("queue") + if len(queue) == 0 { + w.WriteHeader(422) + w.Write([]byte("missing param 'queue' for kafka dsm")) + return + } + + _, _, err := kafkaProduce(queue, message) + if err != nil { + w.WriteHeader(500) + w.Write([]byte(err.Error())) + return + } + + timeout, err := strconv.ParseInt(r.URL.Query().Get("timeout"), 10, 0) + if err != nil { + timeout = 20 + } + + _, _, err = kafkaConsume(queue, timeout) + if err != nil { + w.WriteHeader(500) + w.Write([]byte(err.Error())) + return + } + } + + w.WriteHeader(200) + w.Write([]byte("ok")) + }) + + mux.HandleFunc("/dsm/inject", func(w http.ResponseWriter, r *http.Request) { + topic := r.URL.Query().Get("topic") + if len(topic) == 0 { + w.WriteHeader(422) + w.Write([]byte("missing param 'topic'")) + return + } + intType := r.URL.Query().Get("integration") + if len(intType) == 0 { + w.WriteHeader(422) + w.Write([]byte("missing param 'integration'")) + return + } + + edges := []string{"direction:out", "topic:" + topic, "type:" + intType} + carrier := make(carrier) + ctx := context.Background() + ctx, ok := tracer.SetDataStreamsCheckpoint(ctx, edges...) + if !ok { + w.WriteHeader(422) + w.Write([]byte("failed to create DSM checkpoint")) + return + } + datastreams.InjectToBase64Carrier(ctx, carrier) + + jsonData, err := json.Marshal(carrier) + if err != nil { + w.WriteHeader(422) + w.Write([]byte("failed to convert carrier to JSON")) + return + } + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + w.Write(jsonData) + }) + + mux.HandleFunc("/dsm/extract", func(w http.ResponseWriter, r *http.Request) { + topic := r.URL.Query().Get("topic") + if len(topic) == 0 { + w.WriteHeader(422) + w.Write([]byte("missing param 'topic'")) + return + } + intType := r.URL.Query().Get("integration") + if len(intType) == 0 { + w.WriteHeader(422) + w.Write([]byte("missing param 'integration'")) + return + } + rawCtx := r.URL.Query().Get("ctx") + if len(rawCtx) == 0 { + w.WriteHeader(422) + w.Write([]byte("missing param 'ctx'")) + return + } + carrier := make(carrier) + err := json.Unmarshal([]byte(rawCtx), &carrier) + if err != nil { + w.WriteHeader(422) + w.Write([]byte("failed to parse JSON")) + return + } + + edges := []string{"direction:in", "topic:" + topic, "type:" + intType} + ctx := datastreams.ExtractFromBase64Carrier(context.Background(), carrier) + _, ok := tracer.SetDataStreamsCheckpoint(ctx, edges...) + if !ok { + w.WriteHeader(422) + w.Write([]byte("failed to create DSM checkpoint")) + return + } + + w.WriteHeader(200) + w.Write([]byte("ok")) + }) + + mux.HandleFunc("/session/new", func(w http.ResponseWriter, r *http.Request) { + sessionID := strconv.Itoa(rand.Int()) + w.Header().Add("Set-Cookie", "session="+sessionID+"; Path=/; Max-Age=3600; Secure; HttpOnly") + }) + + mux.HandleFunc("/session/user", func(w http.ResponseWriter, r *http.Request) { + user := r.URL.Query().Get("sdk_user") + cookie, err := r.Cookie("session") + if err != nil { + w.WriteHeader(500) + w.Write([]byte("missing session cookie")) + } + appsec.TrackUserLoginSuccessEvent(r.Context(), user, map[string]string{}, tracer.WithUserSessionID(cookie.Value)) + }) + + mux.HandleFunc("/requestdownstream", common.Requestdownstream) + mux.HandleFunc("/returnheaders", common.Returnheaders) + + mux.HandleFunc("/rasp/lfi", rasp.LFI) + mux.HandleFunc("/rasp/ssrf", rasp.SSRF) + mux.HandleFunc("/rasp/sqli", rasp.SQLi) + + srv := &http.Server{ + Addr: ":7777", + Handler: mux, + } + + common.InitDatadog() + go grpc.ListenAndServe() + go func() { + if err := srv.ListenAndServe(); !errors.Is(err, http.ErrServerClosed) { + log.Fatal(err) + } + }() + + c := make(chan os.Signal, 1) + signal.Notify(c, syscall.SIGTERM) + <-c + + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + if err := srv.Shutdown(ctx); err != nil { + log.Fatalf("HTTP shutdown error: %v", err) + } +} + +type carrier map[string]string + +func (c carrier) Set(key, val string) { + c[key] = val +} + +func (c carrier) ForeachKey(handler func(key, val string) error) error { + for k, v := range c { + if err := handler(k, v); err != nil { + return err + } + } + return nil +} + +//dd:span span.name:child.span +func write(w http.ResponseWriter, _ *http.Request, d []byte) { + w.Write(d) +} + +func headers(w http.ResponseWriter, r *http.Request) { + //Data used for header content is irrelevant here, only header presence is checked + w.Header().Set("content-type", "text/plain") + w.Header().Set("content-length", "42") + w.Header().Set("content-language", "en-US") + w.Write([]byte("Hello, headers!")) +} + +func kafkaProduce(topic, message string) (int32, int64, error) { + var server = "kafka:9092" + + cfg := sarama.NewConfig() + cfg.Producer.Return.Successes = true + + producer, err := sarama.NewSyncProducer([]string{server}, cfg) + if err != nil { + return 0, 0, err + } + defer producer.Close() + + msg := &sarama.ProducerMessage{ + Topic: topic, + Partition: 0, + Value: sarama.StringEncoder(message), + } + + partition, offset, err := producer.SendMessage(msg) + if err != nil { + return 0, 0, err + } + + log.Printf("PRODUCER SENT MESSAGE TO (partition offset): %d %d", partition, offset) + return partition, offset, nil +} + +func kafkaConsume(topic string, timeout int64) (string, int, error) { + var server = "kafka:9092" + cfg := sarama.NewConfig() + + consumer, err := sarama.NewConsumer([]string{server}, cfg) + if err != nil { + return "", 0, err + } + defer consumer.Close() + + partitionConsumer, err := consumer.ConsumePartition(topic, 0, sarama.OffsetOldest) + if err != nil { + return "", 0, err + } + defer partitionConsumer.Close() + + timeOutTimer := time.NewTimer(time.Duration(timeout) * time.Second) + defer timeOutTimer.Stop() + log.Printf("CONSUMING MESSAGES from topic: %s", topic) + for { + select { + case receivedMsg := <-partitionConsumer.Messages(): + responseOutput := fmt.Sprintf("Consumed message.\n\tOffset: %s\n\tMessage: %s\n", fmt.Sprint(receivedMsg.Offset), string(receivedMsg.Value)) + log.Print(responseOutput) + return responseOutput, 200, nil + case <-timeOutTimer.C: + timedOutMessage := "TimeOut" + log.Print(timedOutMessage) + return timedOutMessage, 408, nil + } + } +} diff --git a/utils/build/docker/golang/install_ddtrace.sh b/utils/build/docker/golang/install_ddtrace.sh index ab12a42b72..7a254255eb 100755 --- a/utils/build/docker/golang/install_ddtrace.sh +++ b/utils/build/docker/golang/install_ddtrace.sh @@ -9,6 +9,8 @@ if [ -e "/binaries/dd-trace-go" ]; then elif [ -e "/binaries/golang-load-from-go-get" ]; then echo "Install from go get -d $(cat /binaries/golang-load-from-go-get)" go get -v -d "$(cat /binaries/golang-load-from-go-get)" + # Pin that version with a `replace` directive so nothing else can override it. + go mod edit -replace "gopkg.in/DataDog/dd-trace-go.v1=$(cat /binaries/golang-load-from-go-get)" else echo "Installing production dd-trace-version" @@ -20,10 +22,9 @@ go mod tidy # Read the library version out of the version.go file lib_mod_dir=$(go list -f '{{.Dir}}' -m gopkg.in/DataDog/dd-trace-go.v1) -version=$(sed -nrE 's#.*"v(.*)".*#\1#p' $lib_mod_dir/internal/version/version.go) # Parse the version string content "v.*" -echo $version > SYSTEM_TESTS_LIBRARY_VERSION +version=$(sed -nrE 's#.*"v(.*)".*#\1#p' "${lib_mod_dir}/internal/version/version.go") # Parse the version string content "v.*" +echo "${version}" > SYSTEM_TESTS_LIBRARY_VERSION -rules_mod_dir=$(go list -f '{{.Dir}}' -m github.com/DataDog/appsec-internal-go) - - -echo "dd-trace-go version: $(cat /app/SYSTEM_TESTS_LIBRARY_VERSION)" +# Output the version of dd-trace-go (per go.mod, as well as the built-in tag). +echo "dd-trace-go go.mod version: $(go list -f '{{ .Version }}' -m gopkg.in/DataDog/dd-trace-go.v1)" +echo "dd-trace-go tag: ${version}" diff --git a/utils/build/docker/golang/install_orchestrion.sh b/utils/build/docker/golang/install_orchestrion.sh new file mode 100755 index 0000000000..88d9f303c6 --- /dev/null +++ b/utils/build/docker/golang/install_orchestrion.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +set -euv + +if [ -e "/binaries/orchestrion" ]; then + echo "Install from folder /binaries/orchestrion" + go mod edit -replace github.com/DataDog/orchestrion=/binaries/orchestrion + go -C /binaries/orchestrion build -o "$(go env GOPATH)/bin/orchestrion" . +elif [ -e "/binaries/orchestrion-load-from-go-get" ]; then + echo "Install from go get -d $(cat /binaries/orchestrion-load-from-go-get)" + go install "$(cat /binaries/orchestrion-load-from-go-get)" +else + echo "Installing production orchestrion" + go install github.com/DataDog/orchestrion@latest +fi + +orchestrion pin + +output="$(orchestrion version)" +version="${output#"orchestrion "}" +echo "$version" > SYSTEM_TESTS_ORCHESTRION_VERSION + +echo "orchestrion version: $(cat /app/SYSTEM_TESTS_ORCHESTRION_VERSION)" diff --git a/utils/build/docker/golang/net-http-orchestrion.Dockerfile b/utils/build/docker/golang/net-http-orchestrion.Dockerfile new file mode 100644 index 0000000000..a1f32026b9 --- /dev/null +++ b/utils/build/docker/golang/net-http-orchestrion.Dockerfile @@ -0,0 +1,42 @@ +FROM golang:1.22 AS build + +# print important lib versions +RUN go version && curl --version + +# download go dependencies +RUN mkdir -p /app +COPY utils/build/docker/golang/app/go.mod utils/build/docker/golang/app/go.sum /app/ +WORKDIR /app +RUN go mod download && go mod verify + +# copy the app code +COPY utils/build/docker/golang/app /app + +# download the proper tracer version +COPY utils/build/docker/golang/install_*.sh binaries* /binaries/ +RUN /binaries/install_ddtrace.sh && /binaries/install_orchestrion.sh + +RUN orchestrion go build -v -tags appsec,orchestrion -o weblog ./net-http-orchestrion + +# ============================================================================== + +FROM golang:1.22 + +COPY --from=build /app/weblog /app/weblog +COPY --from=build /app/SYSTEM_TESTS_LIBRARY_VERSION /app/SYSTEM_TESTS_LIBRARY_VERSION + +WORKDIR /app + +RUN printf "#!/bin/bash\nexec ./weblog" > app.sh +RUN chmod +x app.sh +CMD ["./app.sh"] + +# Datadog setup +ENV DD_LOGGING_RATE="0" \ + DD_TRACE_HEADER_TAGS="user-agent" \ + DD_DATA_STREAMS_ENABLED="true" \ + # Set up the environment so the profiler starts appropriately... + DD_ENV="system-tests" \ + DD_SERVICE="weblog" \ + DD_VERSION="1.0" \ + DD_PROFILING_ENABLED="true" diff --git a/utils/scripts/compute-workflow-parameters.py b/utils/scripts/compute-workflow-parameters.py index 19a5ae5cc2..967d7c4dfe 100644 --- a/utils/scripts/compute-workflow-parameters.py +++ b/utils/scripts/compute-workflow-parameters.py @@ -59,7 +59,7 @@ def get_endtoend_weblogs(library, ci_environment: str) -> list[str]: weblogs = { "cpp": ["nginx"], "dotnet": ["poc", "uds"], - "golang": ["chi", "echo", "gin", "net-http", "uds-echo"], + "golang": ["chi", "echo", "gin", "net-http", "uds-echo", "net-http-orchestrion"], "java": [ "akka-http", "jersey-grizzly2", diff --git a/utils/scripts/load-binary.sh b/utils/scripts/load-binary.sh index cad0eb4f85..07555895b0 100755 --- a/utils/scripts/load-binary.sh +++ b/utils/scripts/load-binary.sh @@ -221,6 +221,9 @@ elif [ "$TARGET" = "golang" ]; then echo "Using ghcr.io/datadog/dd-trace-go/service-extensions-callout:dev" echo "ghcr.io/datadog/dd-trace-go/service-extensions-callout:dev" > golang-service-extensions-callout-image + echo "Using github.com/DataDog/orchestrion@main" + echo "github.com/DataDog/orchestrion@main" > orchestrion-load-from-go-get + elif [ "$TARGET" = "cpp" ]; then assert_version_is_dev # get_circleci_artifact "gh/DataDog/dd-opentracing-cpp" "build_test_deploy" "build" "TBD" From e08352241df2af2471b16106cecc85f6148b403a Mon Sep 17 00:00:00 2001 From: Charles de Beauchesne Date: Thu, 30 Jan 2025 12:34:57 +0100 Subject: [PATCH 22/23] Activate PTH ruff rules (#3925) --- .vscode/settings.json | 5 +++++ pyproject.toml | 6 ------ utils/_context/_scenarios/auto_injection.py | 9 +++++---- utils/_context/_scenarios/parametric.py | 4 ++-- utils/_context/containers.py | 4 ++-- utils/_context/virtual_machines.py | 6 +++--- utils/interfaces/_core.py | 4 ++-- utils/interfaces/_logs.py | 5 +++-- utils/interfaces/_schemas_validators.py | 4 ++-- utils/onboarding/debug_vm.py | 4 +++- utils/onboarding/weblog_interface.py | 7 ++++--- utils/scripts/get-nightly-logs.py | 3 ++- utils/scripts/markdown_logs.py | 7 ++++--- utils/scripts/merge_gitlab_aws_pipelines.py | 4 ++-- 14 files changed, 39 insertions(+), 33 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 750c534a07..7239911026 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,5 +8,10 @@ ], "python.testing.pytestEnabled": true, "ruff.enable": true, + "ruff.interpreter": [ + "${workspaceFolder}/venv/bin/python", + "-m", + "ruff" + ], "pylint.ignorePatterns": ["*"] } diff --git a/pyproject.toml b/pyproject.toml index 0a01e3280a..8756204c0a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -92,13 +92,7 @@ ignore = [ "PLR0915", # too many statements, may be replaced by a higher default value "PLR1714", "PLR2004", - "PTH100", - "PTH110", - "PTH113", - "PTH116", "PTH118", - "PTH120", - "PTH122", # os.path.splitext(), but not really easier to read ? "PTH123", # `open()` should be replaced by `Path.open()` "RUF012", "S202", diff --git a/utils/_context/_scenarios/auto_injection.py b/utils/_context/_scenarios/auto_injection.py index ed366cc085..843b681490 100644 --- a/utils/_context/_scenarios/auto_injection.py +++ b/utils/_context/_scenarios/auto_injection.py @@ -1,6 +1,7 @@ -import os -import json import copy +import json +import os +from pathlib import Path from utils._context.library_version import LibraryVersion from utils.tools import logger from utils.virtual_machine.utils import get_tested_apps_vms, generate_gitlab_pipeline @@ -275,10 +276,10 @@ def _check_test_environment(self): base_folder = "utils/build/virtual_machine" weblog_provision_file = f"{base_folder}/weblogs/{self._library.library}/provision_{self._weblog}.yml" - assert os.path.isfile(weblog_provision_file), f"Weblog Provision file not found: {weblog_provision_file}" + assert Path(weblog_provision_file).is_file(), f"Weblog Provision file not found: {weblog_provision_file}" provision_file = f"{base_folder}/provisions/{self.vm_provision_name}/provision.yml" - assert os.path.isfile(provision_file), f"Provision file not found: {provision_file}" + assert Path(provision_file).is_file(), f"Provision file not found: {provision_file}" assert os.getenv("DD_API_KEY_ONBOARDING") is not None, "DD_API_KEY_ONBOARDING is not set" assert os.getenv("DD_APP_KEY_ONBOARDING") is not None, "DD_APP_KEY_ONBOARDING is not set" diff --git a/utils/_context/_scenarios/parametric.py b/utils/_context/_scenarios/parametric.py index 1d780e3c65..beb6e48425 100644 --- a/utils/_context/_scenarios/parametric.py +++ b/utils/_context/_scenarios/parametric.py @@ -215,7 +215,7 @@ def _build_apm_test_server_image(self) -> str: apm_test_server_definition: APMLibraryTestServer = self.apm_test_server_definition log_path = f"{self.host_log_folder}/outputs/docker_build_log.log" - Path.mkdir(os.path.dirname(log_path), exist_ok=True, parents=True) + Path.mkdir(Path(log_path).parent, exist_ok=True, parents=True) # Write dockerfile to the build directory # Note that this needs to be done as the context cannot be @@ -378,7 +378,7 @@ def node_library_factory() -> APMLibraryTestServer: with open("./binaries/nodejs-load-from-local", encoding="utf-8") as f: path = f.read().strip(" \r\n") source = os.path.join(_get_base_directory(), path) - volumes[os.path.abspath(source)] = "/volumes/dd-trace-js" + volumes[Path(source).resolve()] = "/volumes/dd-trace-js" except FileNotFoundError: logger.info("No local dd-trace-js found, do not mount any volume") diff --git a/utils/_context/containers.py b/utils/_context/containers.py index 08316ecf7c..f463b1d1b3 100644 --- a/utils/_context/containers.py +++ b/utils/_context/containers.py @@ -826,7 +826,7 @@ def configure(self, replay): try: with open("./binaries/nodejs-load-from-local", encoding="utf-8") as f: path = f.read().strip(" \r\n") - self.kwargs["volumes"][os.path.abspath(path)] = { + self.kwargs["volumes"][Path(path).resolve()] = { "bind": "/volumes/dd-trace-js", "mode": "ro", } @@ -1073,7 +1073,7 @@ def start(self, network: Network) -> Container: # _otel_config_host_path is mounted in the container, and depending on umask, # it might have no read permissions for other users, which is required within # the container. So set them here. - prev_mode = os.stat(self._otel_config_host_path).st_mode + prev_mode = Path(self._otel_config_host_path).stat().st_mode new_mode = prev_mode | stat.S_IROTH if prev_mode != new_mode: Path(self._otel_config_host_path).chmod(new_mode) diff --git a/utils/_context/virtual_machines.py b/utils/_context/virtual_machines.py index d0d1c72c6f..35084db399 100644 --- a/utils/_context/virtual_machines.py +++ b/utils/_context/virtual_machines.py @@ -146,7 +146,7 @@ def get_ip(self): def _load_runtime_from_logs(self): """Load the runtime version from the test_components.log""" vms_tested_components_file = f"{context.scenario.host_log_folder}/tested_components.log" - if os.path.isfile(vms_tested_components_file): + if Path(vms_tested_components_file).is_file(): # Get the machine ip machine_ip = self.get_ip() # Read the file line by line looking for line with the ip @@ -168,7 +168,7 @@ def _load_ip_from_logs(self): """Load the ip address from the logs""" vms_desc_file = f"{context.scenario.host_log_folder}/vms_desc.log" logger.info(f"Loading ip for {self.name} from {vms_desc_file}") - if os.path.isfile(vms_desc_file): + if Path(vms_desc_file).is_file(): with open(vms_desc_file) as f: for line in f: if self.name in line: @@ -178,7 +178,7 @@ def _load_ip_from_logs(self): def get_log_folder(self): vm_folder = f"{context.scenario.host_log_folder}/{self.name}" - if not os.path.exists(vm_folder): + if not Path(vm_folder).exists(): Path.mkdir(vm_folder) return vm_folder diff --git a/utils/interfaces/_core.py b/utils/interfaces/_core.py index fdb47919fa..ae4e51841a 100644 --- a/utils/interfaces/_core.py +++ b/utils/interfaces/_core.py @@ -6,7 +6,7 @@ import json from os import listdir -from os.path import isfile, join +from os.path import join from pathlib import Path import re import shutil @@ -109,7 +109,7 @@ def check_deserialization_errors(self): def load_data_from_logs(self): for filename in sorted(listdir(self.log_folder)): file_path = join(self.log_folder, filename) - if isfile(file_path): + if Path(file_path).is_file(): with open(file_path, encoding="utf-8") as f: data = json.load(f) diff --git a/utils/interfaces/_logs.py b/utils/interfaces/_logs.py index cff94e38db..905f850443 100644 --- a/utils/interfaces/_logs.py +++ b/utils/interfaces/_logs.py @@ -5,8 +5,9 @@ """Check data that are sent to logs file on weblog""" import json -import re import os +from pathlib import Path +import re from utils._context.core import context from utils.tools import logger @@ -219,7 +220,7 @@ def _get_files(self): for f in files: filename = os.path.join(f"{context.scenario.host_log_folder}/docker/weblog/logs/", f) - if os.path.isfile(filename) and re.search(r"dotnet-tracer-managed-dotnet-\d+(_\d+)?.log", filename): + if Path(filename).is_file() and re.search(r"dotnet-tracer-managed-dotnet-\d+(_\d+)?.log", filename): result.append(filename) return result diff --git a/utils/interfaces/_schemas_validators.py b/utils/interfaces/_schemas_validators.py index 3f9055647f..d5b87f98a7 100644 --- a/utils/interfaces/_schemas_validators.py +++ b/utils/interfaces/_schemas_validators.py @@ -117,9 +117,9 @@ def _main(): for folder in folders: path = f"{folder}/interfaces/{interface}" - if not os.path.exists(path): + if not Path(path).exists(): continue - files = [file for file in os.listdir(path) if os.path.isfile(os.path.join(path, file))] + files = [file for file in os.listdir(path) if Path(os.path.join(path, file)).is_file()] for file in files: with open(os.path.join(path, file), encoding="utf-8") as f: data = json.load(f) diff --git a/utils/onboarding/debug_vm.py b/utils/onboarding/debug_vm.py index 6b794d6225..c913edd2f1 100644 --- a/utils/onboarding/debug_vm.py +++ b/utils/onboarding/debug_vm.py @@ -113,7 +113,9 @@ def _print_app_tracer_host_logs(sshClient, file_to_write): def _print_app_tracer_host_dotnet_logs(sshClient, file_to_write): """App tracer logs for dotnet (dotnet tracer doesn't write debug tracer in stdout)""" - file_to_write_dotnet = os.path.splitext(file_to_write)[0] + "_dotnet.log" + path = Path(file_to_write) + root = path.parent / path.stem + file_to_write_dotnet = f"{root}_dotnet.log" _, stdout_dotnet, _ = sshClient.exec_command("sudo find /var/log/datadog/dotnet/ -type f | xargs tail -n +1") _write_to_debug_file(stdout_dotnet, file_to_write_dotnet) diff --git a/utils/onboarding/weblog_interface.py b/utils/onboarding/weblog_interface.py index 84e4b0e1f8..ff137ed74f 100644 --- a/utils/onboarding/weblog_interface.py +++ b/utils/onboarding/weblog_interface.py @@ -1,6 +1,7 @@ import time from random import randint import os +from pathlib import Path import requests @@ -56,7 +57,7 @@ def make_internal_get_request(stdin_file, vm_port): sleep 1 done""" script_name = "request_weblog.sh" - shared_folder = os.path.dirname(os.path.abspath(stdin_file)) + shared_folder = Path(Path(stdin_file).resolve()).parent # Write the script in the shared folder with open(os.path.join(shared_folder, script_name), "w", encoding="utf-8") as file: @@ -69,9 +70,9 @@ def make_internal_get_request(stdin_file, vm_port): # Wait for the script to finish start = time.time() - while os.stat(stdin_file).st_size != 0 and time.time() - start < (timeout + 5): + while Path(stdin_file).stat().st_size != 0 and time.time() - start < (timeout + 5): time.sleep(1) - if os.stat(stdin_file).st_size != 0: + if Path(stdin_file).stat().st_size != 0: raise TimeoutError("Timed out waiting for weblog ready") return generated_uuid diff --git a/utils/scripts/get-nightly-logs.py b/utils/scripts/get-nightly-logs.py index a239b0ea8d..f9984c678f 100644 --- a/utils/scripts/get-nightly-logs.py +++ b/utils/scripts/get-nightly-logs.py @@ -2,6 +2,7 @@ import logging import io import os +from pathlib import Path import sys import tarfile from typing import Any @@ -74,7 +75,7 @@ def download_artifact(session: requests.Session, artifact: dict, output_dir: str z.extractall(output_dir) for file in os.listdir(output_dir): - if file.endswith(".tar.gz") and os.path.isfile(os.path.join(output_dir, file)): + if file.endswith(".tar.gz") and Path(os.path.join(output_dir, file)).is_file(): with tarfile.open(os.path.join(output_dir, file), "r:gz") as t: t.extractall(output_dir, filter=lambda tar_info, _: tar_info) diff --git a/utils/scripts/markdown_logs.py b/utils/scripts/markdown_logs.py index ce40afec9d..a69d2fb1b3 100644 --- a/utils/scripts/markdown_logs.py +++ b/utils/scripts/markdown_logs.py @@ -1,6 +1,7 @@ -import os -import json import collections +import json +import os +from pathlib import Path def table_row(*args: list[str]) -> None: @@ -12,7 +13,7 @@ def main() -> None: all_outcomes = {"passed": "βœ…", "xpassed": "πŸ‡", "skipped": "⏸️", "failed": "❌"} for x in os.listdir("."): - if x.startswith("logs") and os.path.isfile(f"{x}/report.json"): + if x.startswith("logs") and Path(f"{x}/report.json").is_file(): result[x] = collections.defaultdict(int) with open(f"{x}/report.json") as f: data = json.load(f) diff --git a/utils/scripts/merge_gitlab_aws_pipelines.py b/utils/scripts/merge_gitlab_aws_pipelines.py index 0b1411bf0e..047bdb8991 100644 --- a/utils/scripts/merge_gitlab_aws_pipelines.py +++ b/utils/scripts/merge_gitlab_aws_pipelines.py @@ -1,6 +1,6 @@ import yaml import argparse -import os.path +from pathlib import Path def main() -> None: @@ -12,7 +12,7 @@ def main() -> None: with open(args.input) as f: pipeline = yaml.safe_load(f) - if os.path.exists(args.output): + if Path(args.output).exists(): # If final file exists, merge the stages and jobs with open(args.output) as f: final_pipeline = yaml.safe_load(f) From 91b037902445bcb737e14e1ab19ce0e49cae9c00 Mon Sep 17 00:00:00 2001 From: Attila Szegedi Date: Thu, 30 Jan 2025 13:21:26 +0100 Subject: [PATCH 23/23] Mark Node.js webapp as failing on Ubuntu 24 for host profiling scenario (#3932) --- tests/auto_inject/test_auto_inject_install.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/auto_inject/test_auto_inject_install.py b/tests/auto_inject/test_auto_inject_install.py index 636cb64bb2..71b01f0121 100644 --- a/tests/auto_inject/test_auto_inject_install.py +++ b/tests/auto_inject/test_auto_inject_install.py @@ -48,7 +48,11 @@ def test_profiling(self, virtual_machine): @scenarios.host_auto_injection_install_script_profiling class TestHostAutoInjectInstallScriptProfiling(base.AutoInjectBaseTest): @parametrize_virtual_machines( - bugs=[{"vm_cpu": "arm64", "weblog_variant": "test-app-dotnet", "reason": "PROF-10783"}] + bugs=[ + {"vm_cpu": "arm64", "weblog_variant": "test-app-dotnet", "reason": "PROF-10783"}, + {"vm_name": "Ubuntu_24_amd64", "weblog-variant": "test-app-nodejs", "reason": "PROF-11264"}, + {"vm_name": "Ubuntu_24_arm64", "weblog-variant": "test-app-nodejs", "reason": "PROF-11264"}, + ] ) def test_profiling(self, virtual_machine): logger.info(f"Launching test_install for : [{virtual_machine.name}]...")