datadog_lambda 5.93.0__tar.gz → 5.94.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/PKG-INFO +1 -1
  2. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/handler.py +17 -2
  3. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/metric.py +3 -3
  4. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/tags.py +4 -2
  5. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/tracing.py +32 -0
  6. datadog_lambda-5.94.0/datadog_lambda/version.py +1 -0
  7. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/pyproject.toml +1 -1
  8. datadog_lambda-5.93.0/datadog_lambda/version.py +0 -1
  9. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/LICENSE +0 -0
  10. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/LICENSE-3rdparty.csv +0 -0
  11. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/NOTICE +0 -0
  12. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/README.md +0 -0
  13. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/__init__.py +0 -0
  14. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/api.py +0 -0
  15. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/cold_start.py +0 -0
  16. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/constants.py +0 -0
  17. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/dogstatsd.py +0 -0
  18. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/extension.py +0 -0
  19. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/logger.py +0 -0
  20. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/module_name.py +0 -0
  21. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/patch.py +0 -0
  22. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/stats_writer.py +0 -0
  23. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/statsd_writer.py +0 -0
  24. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/tag_object.py +0 -0
  25. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/thread_stats_writer.py +0 -0
  26. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/trigger.py +0 -0
  27. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/wrapper.py +0 -0
  28. {datadog_lambda-5.93.0 → datadog_lambda-5.94.0}/datadog_lambda/xray.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datadog_lambda
3
- Version: 5.93.0
3
+ Version: 5.94.0
4
4
  Summary: The Datadog AWS Lambda Library
5
5
  Home-page: https://github.com/DataDog/datadog-lambda-python
6
6
  License: Apache-2.0
@@ -7,6 +7,9 @@ from __future__ import absolute_import
7
7
  from importlib import import_module
8
8
 
9
9
  import os
10
+ from time import time_ns
11
+
12
+ from datadog_lambda.tracing import emit_telemetry_on_exception_outside_of_handler
10
13
  from datadog_lambda.wrapper import datadog_lambda_wrapper
11
14
  from datadog_lambda.module_name import modify_module_name
12
15
 
@@ -27,5 +30,17 @@ if len(parts) != 2:
27
30
 
28
31
  (mod_name, handler_name) = parts
29
32
  modified_mod_name = modify_module_name(mod_name)
30
- handler_module = import_module(modified_mod_name)
31
- handler = datadog_lambda_wrapper(getattr(handler_module, handler_name))
33
+
34
+ try:
35
+ handler_load_start_time_ns = time_ns()
36
+ handler_module = import_module(modified_mod_name)
37
+ handler_func = getattr(handler_module, handler_name)
38
+ except Exception as e:
39
+ emit_telemetry_on_exception_outside_of_handler(
40
+ e,
41
+ modified_mod_name,
42
+ handler_load_start_time_ns,
43
+ )
44
+ raise
45
+
46
+ handler = datadog_lambda_wrapper(handler_func)
@@ -100,7 +100,7 @@ def submit_enhanced_metric(metric_name, lambda_context):
100
100
 
101
101
  Args:
102
102
  metric_name (str): metric name w/o enhanced prefix i.e. "invocations" or "errors"
103
- lambda_context (dict): Lambda context dict passed to the function by AWS
103
+ lambda_context (object): Lambda context dict passed to the function by AWS
104
104
  """
105
105
  if not enhanced_metrics_enabled:
106
106
  logger.debug(
@@ -118,7 +118,7 @@ def submit_invocations_metric(lambda_context):
118
118
  """Increment aws.lambda.enhanced.invocations by 1, applying runtime, layer, and cold_start tags
119
119
 
120
120
  Args:
121
- lambda_context (dict): Lambda context dict passed to the function by AWS
121
+ lambda_context (object): Lambda context dict passed to the function by AWS
122
122
  """
123
123
  submit_enhanced_metric("invocations", lambda_context)
124
124
 
@@ -127,6 +127,6 @@ def submit_errors_metric(lambda_context):
127
127
  """Increment aws.lambda.enhanced.errors by 1, applying runtime, layer, and cold_start tags
128
128
 
129
129
  Args:
130
- lambda_context (dict): Lambda context dict passed to the function by AWS
130
+ lambda_context (object): Lambda context dict passed to the function by AWS
131
131
  """
132
132
  submit_enhanced_metric("errors", lambda_context)
@@ -55,9 +55,11 @@ def parse_lambda_tags_from_arn(lambda_context):
55
55
 
56
56
  def get_enhanced_metrics_tags(lambda_context):
57
57
  """Get the list of tags to apply to enhanced metrics"""
58
- tags = parse_lambda_tags_from_arn(lambda_context)
58
+ tags = []
59
+ if lambda_context:
60
+ tags = parse_lambda_tags_from_arn(lambda_context)
61
+ tags.append(f"memorysize:{lambda_context.memory_limit_in_mb}")
59
62
  tags.append(get_cold_start_tag())
60
- tags.append(f"memorysize:{lambda_context.memory_limit_in_mb}")
61
63
  tags.append(runtime_tag)
62
64
  tags.append(library_version_tag)
63
65
  return tags
@@ -6,6 +6,7 @@ import hashlib
6
6
  import logging
7
7
  import os
8
8
  import base64
9
+ import traceback
9
10
  import ujson as json
10
11
  from datetime import datetime, timezone
11
12
  from typing import Optional, Dict
@@ -1320,3 +1321,34 @@ class InferredSpanInfo(object):
1320
1321
  e,
1321
1322
  )
1322
1323
  return False
1324
+
1325
+
1326
+ def emit_telemetry_on_exception_outside_of_handler(
1327
+ exception, resource_name, handler_load_start_time_ns
1328
+ ):
1329
+ """
1330
+ Emit an enhanced error metric and create a span for exceptions occurring outside the handler
1331
+ """
1332
+ submit_errors_metric(None)
1333
+ if dd_tracing_enabled:
1334
+ span = tracer.trace(
1335
+ "aws.lambda",
1336
+ service="aws.lambda",
1337
+ resource=resource_name,
1338
+ span_type="serverless",
1339
+ )
1340
+ span.start_ns = handler_load_start_time_ns
1341
+
1342
+ tags = {
1343
+ "error.status": 500,
1344
+ "error.type": type(exception).__name__,
1345
+ "error.message": exception,
1346
+ "error.stack": traceback.format_exc(),
1347
+ "resource_names": resource_name,
1348
+ "resource.name": resource_name,
1349
+ "operation_name": "aws.lambda",
1350
+ "status": "error",
1351
+ }
1352
+ span.set_tags(tags)
1353
+ span.error = 1
1354
+ span.finish()
@@ -0,0 +1 @@
1
+ __version__ = "5.94.0"
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "datadog_lambda"
3
- version = "5.93.0"
3
+ version = "5.94.0"
4
4
  description = "The Datadog AWS Lambda Library"
5
5
  authors = ["Datadog, Inc. <dev@datadoghq.com>"]
6
6
  license = "Apache-2.0"
@@ -1 +0,0 @@
1
- __version__ = "5.93.0"
File without changes
File without changes