Skip to content

Commit 9670e7e

Browse files
refactor: rename resolve_multivalue_headers and simplify extraction
Address PR review feedback: the header resolver is not ALB-specific, and extract_context_from_http_event_or_context can delegate to it directly. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 8fb563c commit 9670e7e

2 files changed

Lines changed: 11 additions & 22 deletions

File tree

datadog_lambda/tracing.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
is_step_function_event,
4444
EventTypes,
4545
EventSubtypes,
46-
resolve_alb_request_headers,
46+
resolve_multivalue_headers,
4747
)
4848
from datadog_lambda.durable import extract_context_from_durable_execution
4949

@@ -197,12 +197,7 @@ def extract_context_from_http_event_or_context(
197197
if _is_context_complete(context):
198198
return context
199199

200-
headers = event.get("headers")
201-
if not isinstance(headers, dict) or not headers:
202-
if isinstance(event.get("multiValueHeaders"), dict):
203-
headers = resolve_alb_request_headers(event)
204-
else:
205-
headers = {}
200+
headers = resolve_multivalue_headers(event)
206201
context = propagator.extract(headers)
207202

208203
if not _is_context_complete(context):
@@ -968,7 +963,7 @@ def create_inferred_span_from_alb_event(event, context):
968963
elb = request_context.get("elb") or {}
969964
target_group_arn = elb.get("targetGroupArn")
970965

971-
headers = resolve_alb_request_headers(event)
966+
headers = resolve_multivalue_headers(event)
972967
host = headers.get("host")
973968
method = event.get("httpMethod")
974969
path = event.get("path")

datadog_lambda/trigger.py

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -293,10 +293,10 @@ def get_event_source_arn(source: _EventSource, event: dict, context: Any) -> str
293293
return event_source_arn
294294

295295

296-
def resolve_alb_request_headers(event):
296+
def resolve_multivalue_headers(event):
297297
"""
298-
Resolve ALB request headers from single-value ``headers`` or
299-
``multiValueHeaders`` (first value per key, matching datadog-lambda-js).
298+
Resolve request headers from single-value ``headers`` or ``multiValueHeaders``
299+
(first value per key, matching datadog-lambda-js).
300300
"""
301301
headers = event.get("headers")
302302
if isinstance(headers, dict) and headers:
@@ -339,7 +339,6 @@ def extract_http_tags(event):
339339

340340
path = event.get("path")
341341
method = event.get("httpMethod")
342-
request_headers = None
343342

344343
if request_context and request_context.get("stage"):
345344
domain_name = request_context.get("domainName")
@@ -361,13 +360,13 @@ def extract_http_tags(event):
361360
elif request_context and request_context.get("elb"):
362361
# ALB events have no requestContext.stage; derive the URL from the
363362
# forwarded host/proto headers and the top-level path.
364-
request_headers = resolve_alb_request_headers(event)
365-
host = request_headers.get("host")
363+
alb_headers = resolve_multivalue_headers(event)
364+
host = alb_headers.get("host")
366365
if host:
367-
proto = request_headers.get("x-forwarded-proto", "http")
366+
proto = alb_headers.get("x-forwarded-proto", "http")
368367
http_tags["http.url"] = proto + "://" + host
369368

370-
user_agent = request_headers.get("user-agent")
369+
user_agent = alb_headers.get("user-agent")
371370
if user_agent:
372371
http_tags["http.useragent"] = user_agent
373372

@@ -381,12 +380,7 @@ def extract_http_tags(event):
381380
if method:
382381
http_tags["http.method"] = method
383382

384-
if request_headers is None:
385-
request_headers = event.get("headers")
386-
if not isinstance(request_headers, dict):
387-
request_headers = {}
388-
389-
referer = _get_header_case_insensitive(request_headers, "referer")
383+
referer = _get_header_case_insensitive(resolve_multivalue_headers(event), "referer")
390384
if referer:
391385
http_tags["http.referer"] = referer
392386

0 commit comments

Comments
 (0)