class Instana::Instrumentation::Lambda::Handler

Public Instance Methods

call(context) click to toggle source
# File lib/instana/instrumentation/aws_sdk_lambda.rb, line 9
def call(context)
  return @handler.call(context) unless [:invoke_async, :invoke].include?(context.operation_name)

  if context.params[:client_context].nil? && ::Instana.tracer.tracing? && context.operation_name == :invoke
    span_context = ::Instana.tracer.context
    payload = {
      'X-INSTANA-T' => span_context.trace_id,
      'X-INSTANA-S' => span_context.span_id,
      'X-INSTANA-L' => span_context.level.to_s
    }

    context.params[:client_context] = JSON.dump(payload)
  end

  tags = {
    function: context.params[:function_name],
    type: context.params[:invocation_type]
  }.reject { |_, v| v.nil? }

  ::Instana.tracer.trace(:"aws.lambda.invoke", {aws: {lambda: {invoke: tags}}}) { @handler.call(context) }
end