Module: RequestResponseStats::CustomClient

Defined in:
lib/request_response_stats/custom_client.rb

Constant Summary collapse

RENAME_NAMESPACE =
"original_"
RENAMED_METHODS =
[:get, :post, :patch, :put, :delete, :head, :client]
MAX_URL_LENGTH =

Note that value of -1 will include whole of the url

250

Class Method Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object



20
21
22
23
24
25
26
27
# File 'lib/request_response_stats/custom_client.rb', line 20

def method_missing(name, *args, &block)
  if RENAMED_METHODS.include?(name)
    resp = log_request_response_stats(name, args) { self.public_send("#{RENAME_NAMESPACE}#{name.to_s}".to_sym, *args, &block) }
    return resp
  else
    super
  end
end

Class Method Details

.included(base) ⇒ Object

module_function :log_request_response_stats



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/request_response_stats/custom_client.rb', line 57

def self.included(base)
  class << base
    RENAMED_METHODS.each do |key|
      if method_defined?(key)
        alias_method("#{RENAME_NAMESPACE}#{key.to_s}".to_sym, key)
        remove_method key
      end
    end
  end
  base.class_eval do
    const_set("RENAME_NAMESPACE", RENAME_NAMESPACE)
    const_set("RENAMED_METHODS", RENAMED_METHODS)

    module_function :method_missing
    module_function :log_request_response_stats
    module_function :custom_uri_key
  end
end

Instance Method Details

#custom_uri_keyObject

By default args is assumed to be an array with first element as uri If args is an hash contained within one-element array, then you can specify the key that is to be used to fetch the uri



16
17
18
# File 'lib/request_response_stats/custom_client.rb', line 16

def custom_uri_key
  false
end

#log_request_response_stats(name, args, &original_call) ⇒ Object

module_function :method_missing



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/request_response_stats/custom_client.rb', line 30

def log_request_response_stats(name, args, &original_call)
  if defined?(RR_OUTBOUND_STATS) && RR_OUTBOUND_STATS
    begin
      uri = args.is_a?(Array) ? args.first : args
      uri = uri[custom_uri_key] if (uri.is_a?(Hash) && custom_uri_key && uri[custom_uri_key])
      sanitized_uri = uri.to_s[0..(MAX_URL_LENGTH - 1)]
      rrs = RequestResponse.new(
        DummyRequest.new({method: name, path: sanitized_uri}),
        DummyResponse.new,
        {redis_connection: $redis, gather_stats: true, mongoid_doc_model: ReqResStat}
      )
      rrs.capture_request_response_cycle_start_info
      resp = original_call.call
      rrs.capture_request_response_cycle_end_info
      return resp
    rescue Exception => ex
      # Rails.logger.info "Following exception is raised:"
      # Rails.logger.info ex
      rrs.try(:capture_request_response_cycle_error_info)
      raise ex
    end
  else
    resp = original_call.call
  end
end