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
-
.included(base) ⇒ Object
module_function :log_request_response_stats.
Instance Method Summary collapse
-
#custom_uri_key ⇒ Object
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.
-
#log_request_response_stats(name, args, &original_call) ⇒ Object
module_function :method_missing.
- #method_missing(name, *args, &block) ⇒ Object
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_key ⇒ Object
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 |