Sha256: c64fb5f5d63b548541202f47db9436d735f8e33f6b02780da4dc6bc44b405aaa

Contents?: true

Size: 1.52 KB

Versions: 18

Compression:

Stored size: 1.52 KB

Contents

require_relative "request_format_helper"

module Sapience
  module Extensions
    module Grape
      class Notifications < ::Sapience::Extensions::Notifications
        include RequestFormatHelper
        # Options:
        #
        # *<tt>:metric_name</tt> - the metric name, defaults to "grape.request"
        # *<tt>:tags</tt> - additional tags
        def initialize(opts = {})
          super
          @metric_name = opts[:metric_name] || "grape.request"

          Sapience::Extensions::Notifications.subscribe "endpoint_run.grape" do |event|
            record event
          end
        end

        private

        def record(event) # rubocop:disable AbcSize
          return unless record?

          payload  = event.payload
          endpoint = payload[:endpoint]
          route    = endpoint.route
          version  = route.version
          method   = route.request_method.downcase
          format   = request_format(endpoint.env)
          path = route.pattern.path.dup

          path.sub!(/\(\.#{format}\)$/, "")
          path.sub!(":version/", "") if version
          path.gsub!(/:(\w+)/) { |m| m[1..-1].upcase }
          path.gsub!(/[^\w\/\-]+/, "_")

          tags = self.tags + %W(method:#{method} format:#{format} path:#{path} status:#{endpoint.status})
          tags.push "version:#{version}" if version
          metrics.batch do
            metrics.increment metric_name, tags: tags
            metrics.timing "#{metric_name}.time", event.duration, tags: tags
          end
        end
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
sapience-2.4.0 lib/sapience/extensions/grape/notifications.rb
sapience-2.3.5 lib/sapience/extensions/grape/notifications.rb
sapience-2.3.4 lib/sapience/extensions/grape/notifications.rb
sapience-2.3.3 lib/sapience/extensions/grape/notifications.rb
sapience-2.2.3 lib/sapience/extensions/grape/notifications.rb
sapience-2.2.1 lib/sapience/extensions/grape/notifications.rb
sapience-2.2.0 lib/sapience/extensions/grape/notifications.rb
sapience-2.1.0 lib/sapience/extensions/grape/notifications.rb
sapience-2.0.5 lib/sapience/extensions/grape/notifications.rb
sapience-2.0.4 lib/sapience/extensions/grape/notifications.rb
sapience-2.0.3 lib/sapience/extensions/grape/notifications.rb
sapience-2.0.2 lib/sapience/extensions/grape/notifications.rb
sapience-2.0.1 lib/sapience/extensions/grape/notifications.rb
sapience-2.0.0 lib/sapience/extensions/grape/notifications.rb
sapience-1.0.15 lib/sapience/extensions/grape/notifications.rb
sapience-1.0.14 lib/sapience/extensions/grape/notifications.rb
sapience-1.0.13 lib/sapience/extensions/grape/notifications.rb
sapience-1.0.12 lib/sapience/extensions/grape/notifications.rb