Sha256: 688cc9c2cc535f9d6948fc8c3104110f66af3167a91fa845ec5e7f6efd4d85f5

Contents?: true

Size: 1.17 KB

Versions: 4

Compression:

Stored size: 1.17 KB

Contents

module Datadog::Notifications::Plugins
  class Grape < Base

    attr_reader :metric_name

    # 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"

      Datadog::Notifications.subscribe 'endpoint_run.grape' do |reporter, event|
        record reporter, event
      end
    end

    private

    def record(reporter, event)
      payload  = event.payload
      endpoint = payload[:endpoint]
      route    = endpoint.route
      version  = route.version
      method   = route.request_method

      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} path:#{path} status:#{endpoint.status}|
      tags.push "version:#{version}" if version

      reporter.batch do
        reporter.increment metric_name, tags: tags
        reporter.timing "#{metric_name}.time", event.duration, tags: tags
      end
    end

  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
datadog-notifications-0.4.4 lib/datadog/notifications/plugins/grape.rb
datadog-notifications-0.4.3 lib/datadog/notifications/plugins/grape.rb
datadog-notifications-0.4.2 lib/datadog/notifications/plugins/grape.rb
datadog-notifications-0.4.1 lib/datadog/notifications/plugins/grape.rb