module Upfluence::HTTP::Middleware

Public Instance Methods

parse_route(env) click to toggle source
# File lib/upfluence/http/middleware/prometheus.rb, line 66
def parse_route(env)
  parse_route_sinatra(env) || parse_route_rails(env) ||
    parse_route_default(env)
end
parse_route_default(env) click to toggle source
# File lib/upfluence/http/middleware/prometheus.rb, line 93
def parse_route_default(env)
  Rack::Request.new(env).path.gsub(%r{/\d+(/|$)}, '/:id\\1')
end
parse_route_rails(env) click to toggle source
# File lib/upfluence/http/middleware/prometheus.rb, line 71
def parse_route_rails(env)
  params = env['action_dispatch.request.parameters']
  return nil if params.nil?

  "#{params['controller']}##{params['action']}"
end
parse_route_sinatra(env) click to toggle source
# File lib/upfluence/http/middleware/prometheus.rb, line 78
def parse_route_sinatra(env)
  route = env['sinatra.route']
  return nil if route.nil? || route.strip == ''

  path = Rack::Request.new(env).path

  splitted_template = route.split(' ').last.split('/').reject do |v|
    v.eql?('')
  end.reverse

  path.split('/').reverse.map.with_index do |part, i|
    splitted_template[i] || part
  end.reverse.join('/')
end
record(env, code, duration) click to toggle source
# File lib/upfluence/http/middleware/prometheus.rb, line 46
def record(env, code, duration)
  @request_total_count.increment(
    labels: {
      path:   parse_route(env),
      method: env['REQUEST_METHOD'].downcase,
      status: code,
      env:    Upfluence.env.to_s
    }
  )

  @request_histogram.observe(
    duration,
    labels: {
      path:   parse_route(env),
      method: env['REQUEST_METHOD'].downcase,
      env:    Upfluence.env.to_s
    }
  )
end