Sha256: efddf9944c27caae6fda22087f2159d1c3d15c8cc90c5f6a2ec7f25d4ee9835e

Contents?: true

Size: 1.1 KB

Versions: 2

Compression:

Stored size: 1.1 KB

Contents

# typed: false
# frozen_string_literal: true

require "openapi_first"
require "active_support/parameter_filter"

module PlugApp
  module Middleware
    class TracingAttributes
      extend T::Sig

      sig { returns(T.untyped) }
      attr_reader :app

      HTTP_REQUEST_BODY = "http.request.body"

      sig { params(app: T.untyped).void }
      def initialize(app)
        @app = T.let(app, T.untyped)
        @filterer = ActiveSupport::ParameterFilter.new(Rails.application.config.filter_parameters)
      end

      sig { params(env: T.untyped).returns(T.untyped) }
      def call(env)
        request = ActionDispatch::Request.new(env.dup)

        OpenTelemetry::Trace.current_span.add_attributes({
          OpenTelemetry::VERSION => PlugApp::Application::GIT_SHA,
          OpenTelemetry::SemanticConventions::Trace::HTTP_REQUEST_CONTENT_LENGTH => env["CONTENT_LENGTH"].to_i,
          HTTP_REQUEST_BODY => filtered_params(request),
        })

        app.call(env)
      end

      def filtered_params(request)
        params = request.params
        @filterer.filter(params).to_json
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hephaestus-0.0.2 templates/app/lib/plug_app/middleware/tracing_attributes.rb
hephaestus-0.0.1 templates/app/lib/plug_app/middleware/tracing_attributes.rb