Module: Datadog::Lambda::AppSec
- Defined in:
- lib/datadog/lambda/appsec.rb,
lib/datadog/lambda/appsec/request.rb,
lib/datadog/lambda/appsec/event_normalizer.rb,
lib/datadog/lambda/appsec/response_normalizer.rb
Overview
AppSec integration for AWS Lambda invocations.
Defined Under Namespace
Modules: EventNormalizer, ResponseNormalizer Classes: Request
Class Method Summary collapse
-
.on_finish(response) ⇒ Object
rubocop:disable Metrics/AbcSize.
-
.on_start(event, trace:, span:, cold_start: false) ⇒ Object
rubocop:disable Metrics/AbcSize.
Class Method Details
.on_finish(response) ⇒ Object
rubocop:disable Metrics/AbcSize
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/datadog/lambda/appsec.rb', line 46 def on_finish(response) return unless enabled? context = Datadog::AppSec::Context.active return unless context response = ResponseNormalizer.normalize(response) payload = Datadog::AppSec::Instrumentation::Gateway::DataContainer.new( response, context: context ) interrupt_params = catch(Datadog::AppSec::Ext::INTERRUPT) do Datadog::AppSec::Instrumentation.gateway.push('aws_lambda.response.start', payload) nil end context.mark_as_interrupted! if interrupt_params Datadog::AppSec::Event.record(context, request: @request) context.export_metrics context.export_request_telemetry response_override(interrupt_params, headers: @request.headers) if interrupt_params rescue StandardError => e Datadog::Utils.logger.debug "failed to finish AppSec: #{e}" ensure Datadog::AppSec::Context.deactivate if context end |
.on_start(event, trace:, span:, cold_start: false) ⇒ Object
rubocop:disable Metrics/AbcSize
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/datadog/lambda/appsec.rb', line 14 def on_start(event, trace:, span:, cold_start: false) @request = nil return unless enabled? context = create_context(trace, span) return unless Datadog::AppSec::Context.active tag_and_keep(context, cold_start: cold_start) event = EventNormalizer.normalize(event) @request = Request.from_normalized(event) payload = Datadog::AppSec::Instrumentation::Gateway::DataContainer.new( event, context: context ) interrupt_params = catch(Datadog::AppSec::Ext::INTERRUPT) do Datadog::AppSec::Instrumentation.gateway.push('aws_lambda.request.start', payload) nil end return unless interrupt_params context.mark_as_interrupted! response_override(interrupt_params, headers: @request.headers) rescue StandardError => e Datadog::AppSec::Context.deactivate if context Datadog::Utils.logger.debug("failed to start AppSec: #{e}") end |