class Routemaster::Middleware::Metrics

Constants

INTERACTION_KEY

Attributes

client[R]
source_peer[R]

Public Class Methods

new(app, options = {}) click to toggle source
# File lib/routemaster/middleware/metrics.rb, line 6
def initialize(app, options = {})
  @app    = app
  @client = options[:client]
  @source_peer = options[:source_peer]
end

Public Instance Methods

call(request_env) click to toggle source
# File lib/routemaster/middleware/metrics.rb, line 12
def call(request_env)
  return @app.call(request_env) unless can_log?

  increment_req_count(request_tags(request_env))

  record_latency(request_tags(request_env)) do
    begin
      @app.call(request_env).on_complete do |response_env|
        increment_response_count(response_tags(response_env))
      end
    rescue Routemaster::Errors::BaseError => e
      increment_response_count(response_tags(e.env))
      raise e
    end
  end
end

Private Instance Methods

can_log?() click to toggle source
# File lib/routemaster/middleware/metrics.rb, line 47
def can_log?
  client && source_peer
end
destination_peer(env) click to toggle source
# File lib/routemaster/middleware/metrics.rb, line 51
def destination_peer(env)
  env.url.host
end
increment_req_count(tags) click to toggle source
# File lib/routemaster/middleware/metrics.rb, line 33
def increment_req_count(tags)
  client.increment("#{INTERACTION_KEY}.request.count", tags: tags)
end
increment_response_count(tags) click to toggle source
# File lib/routemaster/middleware/metrics.rb, line 37
def increment_response_count(tags)
  client.increment("#{INTERACTION_KEY}.response.count", tags: tags)
end
peers_tags(env) click to toggle source
# File lib/routemaster/middleware/metrics.rb, line 55
def peers_tags(env)
  [
    "source:#{source_peer}",
    "destination:#{destination_peer(env)}"
  ]
end
record_latency(tags, &block) click to toggle source
# File lib/routemaster/middleware/metrics.rb, line 41
def record_latency(tags, &block)
  client.time("#{INTERACTION_KEY}.latency", tags: tags) do
    block.call
  end
end
request_tags(env) click to toggle source
# File lib/routemaster/middleware/metrics.rb, line 62
def request_tags(env)
  peers_tags(env).concat(["verb:#{env.method}"])
end
response_tags(env) click to toggle source
# File lib/routemaster/middleware/metrics.rb, line 66
def response_tags(env)
  peers_tags(env).concat(["status:#{env.status}"])
end