Sha256: 1b92919cd315de0fa41853cc0289a2b72c3020d950d4cd85ba296b2818c5eccb

Contents?: true

Size: 1.97 KB

Versions: 2

Compression:

Stored size: 1.97 KB

Contents

module Skylight
  module Probes
    module ActionController
      class Probe
        def install
          # Prepending doesn't work here since this a module that's already been included
          ::ActionController::Instrumentation.class_eval do
            private

            alias_method :append_info_to_payload_without_sk, :append_info_to_payload
            def append_info_to_payload(payload)
              append_info_to_payload_without_sk(payload)

              mime = sk_rendered_mime.try(:ref)

              payload[:sk_rendered_format] = if request&.headers&.[]("Turbo-Frame")
                [mime, "turbo-frame"].compact.join("+")
              else
                mime
              end

              payload[:sk_variant] = request.respond_to?(:variant) ? request.variant : nil
            end

            def sk_rendered_mime
              if respond_to?(:media_type)
                mt = media_type
                return mt && Mime::Type.lookup(mt)
              end

              if content_type.is_a?(Mime::Type)
                content_type
              elsif content_type.respond_to?(:to_s)
                type_str = content_type.to_s.split(";").first
                Mime::Type.lookup(type_str) unless type_str.blank?
              elsif respond_to?(:rendered_format) && rendered_format
                rendered_format
              end
            rescue StandardError
              # There are cases in which actionpack can return
              # a stringified representation of a Mime::NullType instance,
              # which is invalid for a number of reasons. This string raises
              # errors when piped through Mime::Type.lookup, so it's probably
              # best to just return nil in those cases.
              nil
            end
          end
        end
      end
    end

    register(
      :action_controller,
      "ActionController::Instrumentation",
      "action_controller/metal/instrumentation",
      ActionController::Probe.new
    )
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
skylight-6.1.0.beta lib/skylight/probes/action_controller.rb
skylight-6.0.4 lib/skylight/probes/action_controller.rb