Skip to content

Commit 5535a85

Browse files
committed
feat(appsec): skip processing spans for events that are not http requests
1 parent d4b1272 commit 5535a85

File tree

4 files changed

+30
-3
lines changed

4 files changed

+30
-3
lines changed

ddtrace/appsec/_processor.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,9 +185,9 @@ def on_span_start(self, span: Span) -> None:
185185
return
186186

187187
if span.span_type == SpanTypes.SERVERLESS:
188-
skip_event = core.get_item("asm_skip_next_lambda_event")
188+
skip_event = core.get_item("appsec_skip_next_lambda_event")
189189
if skip_event:
190-
core.discard_item("asm_skip_next_lambda_event")
190+
core.discard_item("appsec_skip_next_lambda_event")
191191
log.debug(
192192
"appsec: ignoring unsupported lamdba event",
193193
)

ddtrace/settings/asm.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ class ASMConfig(DDConfig):
177177
"_asm_static_rule_file",
178178
"_asm_obfuscation_parameter_key_regexp",
179179
"_asm_obfuscation_parameter_value_regexp",
180+
"_asm_processed_span_types",
180181
"_apm_tracing_enabled",
181182
"_bypass_instrumentation_for_waf",
182183
"_iast_enabled",

tests/appsec/appsec/test_processor.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -767,3 +767,28 @@ def test_ephemeral_addresses(mock_run, persistent, ephemeral):
767767
WAF_DATA_NAMES[ephemeral]: {"key_2": "value_3"},
768768
}
769769
assert (span._local_root or span).get_tag(APPSEC.RC_PRODUCTS) == "[ASM:1] u:1 r:1"
770+
771+
772+
@pytest.mark.parametrize("skip_event", [True, False])
773+
def test_lambda_unsupported_event(tracer, skip_event):
774+
"""
775+
Test that the processor correctly handles the appsec_skip_next_lambda_event flag.
776+
"""
777+
if skip_event:
778+
core.set_item("appsec_skip_next_lambda_event", True)
779+
780+
config = {
781+
"_asm_enabled": True,
782+
"_asm_processed_span_types": {SpanTypes.SERVERLESS},
783+
}
784+
785+
with asm_context(tracer=tracer, config=config, span_type=SpanTypes.SERVERLESS) as span:
786+
pass
787+
788+
if skip_event:
789+
# When skip_event is True, the metric should be set and context item should be discarded
790+
assert span.get_metric(APPSEC.UNSUPPORTED_EVENT_TYPE) == 1.0
791+
assert core.get_item("appsec_skip_next_lambda_event") is None
792+
else:
793+
# When skip_event is False, the metric should not be set
794+
assert span.get_metric(APPSEC.UNSUPPORTED_EVENT_TYPE) is None

tests/appsec/utils.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ def get_waf_addresses(address: str) -> typing.Optional[typing.Any]:
5353
def asm_context(
5454
tracer=None,
5555
span_name: str = "",
56+
span_type: str = SpanTypes.WEB,
5657
ip_addr: typing.Optional[str] = None,
5758
headers_case_sensitive: bool = False,
5859
headers: typing.Optional[typing.Dict[str, str]] = None,
@@ -80,7 +81,7 @@ def asm_context(
8081
headers=headers,
8182
block_request_callable=block_request_callable,
8283
service=service,
83-
), tracer.trace(span_name or "test", span_type=SpanTypes.WEB, service=service) as span:
84+
), tracer.trace(span_name or "test", span_type=span_type, service=service) as span:
8485
yield span
8586
unpatch_for_waf_addresses()
8687

0 commit comments

Comments
 (0)