def test_only_one_wrapper_in_use(self): patcher = patch("datadog_lambda.wrapper.submit_invocations_metric") self.mock_submit_invocations_metric = patcher.start() self.addCleanup(patcher.stop) @datadog_lambda_wrapper def lambda_handler(event, context): lambda_metric("test.metric", 100) # Turn off _force_wrap to emulate the nested wrapper scenario, # the second @datadog_lambda_wrapper should actually be no-op. datadog_lambda_wrapper._force_wrap = False lambda_handler_double_wrapped = datadog_lambda_wrapper(lambda_handler) lambda_event = {} lambda_handler_double_wrapped(lambda_event, get_mock_context()) self.mock_patch_all.assert_called_once() self.mock_wrapper_lambda_stats.flush.assert_called_once() self.mock_submit_invocations_metric.assert_called_once()
invoke_additional_target_lambdas(event) metrics, logs, trace_payloads = split(enrich(parse(event, context))) if DD_FORWARD_LOG: forward_logs(logs) forward_metrics(metrics) if len(trace_payloads) > 0: forward_traces(trace_payloads) parse_and_submit_enhanced_metrics(logs) lambda_handler = datadog_lambda_wrapper(datadog_forwarder) def forward_logs(logs): """Forward logs to Datadog""" if logger.isEnabledFor(logging.DEBUG): logger.debug(f"Forwarding {len(logs)} logs") logs_to_forward = filter_logs(list(map(json.dumps, logs))) scrubber = DatadogScrubber(SCRUBBING_RULE_CONFIGS) if DD_USE_TCP: batcher = DatadogBatcher(256 * 1000, 256 * 1000, 1) cli = DatadogTCPClient(DD_URL, DD_PORT, DD_NO_SSL, DD_API_KEY, scrubber) else: batcher = DatadogBatcher(256 * 1000, 4 * 1000 * 1000, 400) cli = DatadogHTTPClient(DD_URL, DD_PORT, DD_NO_SSL,
# Unless explicitly stated otherwise all files in this repository are licensed # under the Apache License Version 2.0. # This product includes software developed at Datadog (https://www.datadoghq.com/). # Copyright 2020 Datadog, Inc. from __future__ import absolute_import from importlib import import_module import os from datadog_lambda.wrapper import datadog_lambda_wrapper class HandlerError(Exception): pass path = os.environ.get("DD_LAMBDA_HANDLER", None) if path is None: raise HandlerError( "DD_LAMBDA_HANDLER is not defined. Can't use prebuilt datadog handler") parts = path.rsplit(".", 1) if len(parts) != 2: raise HandlerError("Value %s for DD_LAMBDA_HANDLER has invalid format." % path) (mod_name, handler_name) = parts handler_module = import_module(mod_name) handler = datadog_lambda_wrapper(getattr(handler_module, handler_name))