diff --git a/datadog_lambda/trigger.py b/datadog_lambda/trigger.py index 8090e36e..599d3c32 100644 --- a/datadog_lambda/trigger.py +++ b/datadog_lambda/trigger.py @@ -327,19 +327,29 @@ def extract_trigger_tags(event: dict, context: Any) -> dict: """ Parses the trigger event object to get tags to be added to the span metadata """ - trigger_tags = {} - event_source = parse_event_source(event) - if event_source.to_string() is not None and event_source.to_string() != "unknown": - trigger_tags["function_trigger.event_source"] = event_source.to_string() + try: + trigger_tags = {} + event_source = parse_event_source(event) + if ( + event_source.to_string() is not None + and event_source.to_string() != "unknown" + ): + trigger_tags["function_trigger.event_source"] = event_source.to_string() + + event_source_arn = get_event_source_arn(event_source, event, context) + if event_source_arn: + trigger_tags["function_trigger.event_source_arn"] = event_source_arn - event_source_arn = get_event_source_arn(event_source, event, context) - if event_source_arn: - trigger_tags["function_trigger.event_source_arn"] = event_source_arn + if event_source.event_type in _http_event_types: + trigger_tags.update(extract_http_tags(event)) - if event_source.event_type in _http_event_types: - trigger_tags.update(extract_http_tags(event)) + return trigger_tags + except Exception as e: + import logging - return trigger_tags + logger = logging.getLogger(__name__) + logger.info(f"Datadog failed to extract trigger tags: {e}") + return {} _str_http_triggers = [et.value for et in _http_event_types] diff --git a/tests/test_trigger.py b/tests/test_trigger.py index 9cb088f1..a9c86399 100644 --- a/tests/test_trigger.py +++ b/tests/test_trigger.py @@ -530,6 +530,15 @@ def test_extract_trigger_tags_list_type_event(self): tags = extract_trigger_tags(event, ctx) self.assertEqual(tags, {}) + def test_extract_trigger_tags_error_handling(self): + event = { + "requestContext": "not_a_dict" + } # This would cause an error as requestContext is not a dict + ctx = get_mock_context() + + tags = extract_trigger_tags(event, ctx) + self.assertEqual(tags, {}) + class ExtractHTTPStatusCodeTag(unittest.TestCase): def test_extract_http_status_code_tag_from_response_dict(self):