class Rails::Middleware::Datadog

Public Class Methods

new(app, opts={}) click to toggle source
# File lib/rails/middleware/datadog.rb, line 4
def initialize(app, opts={})
  @app = app

  statsd_host  = opts[:statsd_host] || "localhost"
  statsd_port  = opts[:statsd_port] || 8125
  namespace    = opts[:statsd_prefix] || nil

  @statsd = opts[:statsd] || Ruby::Reporters::Datadog.new(opts)
end

Public Instance Methods

call(env) click to toggle source
# File lib/rails/middleware/datadog.rb, line 14
def call(env)
  start_request_time = Time.now
  status, header, body = @app.call(env)
  end_request_time = Time.now

  report_to_statsd(start_request_time, end_request_time, env, status)        

  [status, header, body]
end

Private Instance Methods

compute_elapsed_time_ms(start_request_time, end_request_time) click to toggle source
# File lib/rails/middleware/datadog.rb, line 33
def compute_elapsed_time_ms(start_request_time, end_request_time)
  (end_request_time - start_request_time) * 1000
end
extract_method_from_request(env) click to toggle source
# File lib/rails/middleware/datadog.rb, line 29
def extract_method_from_request(env)
  env['REQUEST_METHOD']
end
extract_path_from_request(env) click to toggle source
# File lib/rails/middleware/datadog.rb, line 25
def extract_path_from_request(env)
  env['PATH_INFO']
end
report_to_statsd(start_request_time, end_request_time, env, status) click to toggle source
# File lib/rails/middleware/datadog.rb, line 37
def report_to_statsd(start_request_time, end_request_time, env, status)
  elapsed_time_ms = compute_elapsed_time_ms(start_request_time, end_request_time)
  request_method = extract_method_from_request(env)
  path = extract_path_from_request(env)

  @statsd.response_time_ms(path, request_method, status, elapsed_time_ms)
end