From 32b306bb5e766def8c63c28e87451ba5fe901a28 Mon Sep 17 00:00:00 2001 From: Aleksandr Pasechnik Date: Thu, 14 Nov 2024 10:50:30 -0500 Subject: [PATCH 1/2] chore: [SVLS-5973] fix span pointer flow control --- datadog_lambda/span_pointers.py | 56 +++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/datadog_lambda/span_pointers.py b/datadog_lambda/span_pointers.py index 86c9e60b..efed267a 100644 --- a/datadog_lambda/span_pointers.py +++ b/datadog_lambda/span_pointers.py @@ -2,6 +2,7 @@ import logging import os from typing import List +from typing import Optional from ddtrace._trace._span_pointer import _SpanPointerDirection from ddtrace._trace._span_pointer import _SpanPointerDescription @@ -30,7 +31,7 @@ def calculate_span_pointers( return _calculate_dynamodb_span_pointers_for_event(event) except Exception as e: - logger.warning( + logger.debug( "failed to calculate span pointers for event: %s", e, ) @@ -75,7 +76,7 @@ def _calculate_s3_span_pointers_for_object_created_s3_information( etag = s3_information["object"]["eTag"] except KeyError as e: - logger.warning( + logger.debug( "missing s3 information required to make a span pointer: %s", e, ) @@ -86,17 +87,19 @@ def _calculate_s3_span_pointers_for_object_created_s3_information( _aws_s3_object_span_pointer_description, ) - return [ - _aws_s3_object_span_pointer_description( - pointer_direction=_SpanPointerDirection.UPSTREAM, - bucket=bucket, - key=key, - etag=etag, - ) - ] + span_pointer_description = _aws_s3_object_span_pointer_description( + pointer_direction=_SpanPointerDirection.UPSTREAM, + bucket=bucket, + key=key, + etag=etag, + ) + if span_pointer_description is None: + return [] + + return [span_pointer_description] except Exception as e: - logger.warning( + logger.debug( "failed to generate S3 span pointer: %s", e, ) @@ -120,10 +123,13 @@ def _calculate_dynamodb_span_pointers_for_event_record( ) -> List[_SpanPointerDescription]: try: table_name = _extract_table_name_from_dynamodb_stream_record(record) + if table_name is None: + return [] + primary_key = record["dynamodb"]["Keys"] except Exception as e: - logger.warning( + logger.debug( "missing DynamoDB information required to make a span pointer: %s", e, ) @@ -134,23 +140,25 @@ def _calculate_dynamodb_span_pointers_for_event_record( _aws_dynamodb_item_span_pointer_description, ) - return [ - _aws_dynamodb_item_span_pointer_description( - pointer_direction=_SpanPointerDirection.UPSTREAM, - table_name=table_name, - primary_key=primary_key, - ) - ] + span_pointer_description = _aws_dynamodb_item_span_pointer_description( + pointer_direction=_SpanPointerDirection.UPSTREAM, + table_name=table_name, + primary_key=primary_key, + ) + if span_pointer_description is None: + return [] + + return [span_pointer_description] except Exception as e: - logger.warning( + logger.debug( "failed to generate DynamoDB span pointer: %s", e, ) return [] -def _extract_table_name_from_dynamodb_stream_record(record) -> str: +def _extract_table_name_from_dynamodb_stream_record(record) -> Optional[str]: # Example eventSourceARN: # arn:aws:dynamodb:us-east-2:123456789012:table/my-table/stream/2024-06-10T19:26:16.525 event_source_arn = record["eventSourceARN"] @@ -159,10 +167,12 @@ def _extract_table_name_from_dynamodb_stream_record(record) -> str: ":", maxsplit=5 ) if _arn != "arn" or _aws != "aws" or _dynamodb != "dynamodb": - raise ValueError(f"unexpected eventSourceARN format: {event_source_arn}") + logger.debug("unexpected eventSourceARN format: %s", event_source_arn) + return None [_table, table_name, _stream, _timestamp] = dynamodb_info.split("/") if _table != "table" or _stream != "stream": - raise ValueError(f"unexpected eventSourceARN format: {event_source_arn}") + logger.debug("unexpected eventSourceARN format: %s", event_source_arn) + return None return table_name From 821cf63f72e0cbeada5f08b348c12e13fb125b3b Mon Sep 17 00:00:00 2001 From: Aleksandr Pasechnik Date: Thu, 14 Nov 2024 12:30:25 -0500 Subject: [PATCH 2/2] chore: [SVLS-5973] account for the new function signature --- datadog_lambda/span_pointers.py | 45 +++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/datadog_lambda/span_pointers.py b/datadog_lambda/span_pointers.py index efed267a..e111469e 100644 --- a/datadog_lambda/span_pointers.py +++ b/datadog_lambda/span_pointers.py @@ -87,12 +87,24 @@ def _calculate_s3_span_pointers_for_object_created_s3_information( _aws_s3_object_span_pointer_description, ) - span_pointer_description = _aws_s3_object_span_pointer_description( - pointer_direction=_SpanPointerDirection.UPSTREAM, - bucket=bucket, - key=key, - etag=etag, - ) + try: + span_pointer_description = _aws_s3_object_span_pointer_description( + operation="S3.LambdaEvent", + pointer_direction=_SpanPointerDirection.UPSTREAM, + bucket=bucket, + key=key, + etag=etag, + ) + except TypeError: + # The older version of this function did not have an operation + # parameter. + span_pointer_description = _aws_s3_object_span_pointer_description( + pointer_direction=_SpanPointerDirection.UPSTREAM, + bucket=bucket, + key=key, + etag=etag, + ) + if span_pointer_description is None: return [] @@ -140,11 +152,22 @@ def _calculate_dynamodb_span_pointers_for_event_record( _aws_dynamodb_item_span_pointer_description, ) - span_pointer_description = _aws_dynamodb_item_span_pointer_description( - pointer_direction=_SpanPointerDirection.UPSTREAM, - table_name=table_name, - primary_key=primary_key, - ) + try: + span_pointer_description = _aws_dynamodb_item_span_pointer_description( + operation="DynamoDB.LambdaEvent", + pointer_direction=_SpanPointerDirection.UPSTREAM, + table_name=table_name, + primary_key=primary_key, + ) + except TypeError: + # The older version of this function did not have an operation + # parameter. + span_pointer_description = _aws_dynamodb_item_span_pointer_description( + pointer_direction=_SpanPointerDirection.UPSTREAM, + table_name=table_name, + primary_key=primary_key, + ) + if span_pointer_description is None: return []