From 1aaef41dc67d3d58967105fc65eb00f27056f855 Mon Sep 17 00:00:00 2001 From: Igor Date: Tue, 15 Nov 2022 17:11:42 +0600 Subject: [PATCH 1/3] add elapsed_seconds attribute to request --- README.md | 1 + lib/ezclient/request.rb | 4 +++- spec/ezclient_spec.rb | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 676278b..8f5499d 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,7 @@ request.verb # => "POST" request.url # => "http://example.com" request.body # => '{"a": 1}' request.headers # => { "Content-Type" => "application/json; charset=UTF-8", ... } +request.elapsed_seconds # => 0.08117745001072763 ``` ## Response object diff --git a/lib/ezclient/request.rb b/lib/ezclient/request.rb index 5831eb6..392c4fd 100644 --- a/lib/ezclient/request.rb +++ b/lib/ezclient/request.rb @@ -10,7 +10,7 @@ class EzClient::Request query ].freeze - attr_accessor :verb, :url, :options + attr_accessor :verb, :url, :options, :elapsed_seconds def initialize(verb, url, options) self.verb = verb.to_s.upcase @@ -21,7 +21,9 @@ def initialize(verb, url, options) end def perform + perform_started_at = EzClient.get_time http_response = perform_request + self.elapsed_seconds = EzClient.get_time - perform_started_at EzClient::Response.new(http_response).tap do |response| on_complete.call(self, response, options[:metadata]) diff --git a/spec/ezclient_spec.rb b/spec/ezclient_spec.rb index f40d2e0..f6a1ea4 100644 --- a/spec/ezclient_spec.rb +++ b/spec/ezclient_spec.rb @@ -34,6 +34,7 @@ def self.sign!(*); end expect(request.verb).to eq("POST") expect(request.url).to eq("http://example.com") expect(request.body).to eq("a=1") + expect(request.elapsed_seconds).to be_a(Float) expect(request.headers).to eq( "Connection" => "close", From 1274a345de514abbf58d1584260a9e1ce13c4301 Mon Sep 17 00:00:00 2001 From: Igor Date: Tue, 15 Nov 2022 18:01:12 +0600 Subject: [PATCH 2/3] change elapsed seconds on error --- lib/ezclient/request.rb | 1 + spec/ezclient_spec.rb | 1 + 2 files changed, 2 insertions(+) diff --git a/lib/ezclient/request.rb b/lib/ezclient/request.rb index 392c4fd..a8d833d 100644 --- a/lib/ezclient/request.rb +++ b/lib/ezclient/request.rb @@ -29,6 +29,7 @@ def perform on_complete.call(self, response, options[:metadata]) end rescue => error + self.elapsed_seconds = EzClient.get_time - perform_started_at on_error.call(self, error, options[:metadata]) raise error end diff --git a/spec/ezclient_spec.rb b/spec/ezclient_spec.rb index f6a1ea4..4854bc5 100644 --- a/spec/ezclient_spec.rb +++ b/spec/ezclient_spec.rb @@ -259,6 +259,7 @@ def self.sign!(*); end let(:on_error) do proc do |request, error, metadata| expect(request.url).to eq("http://example.com") + expect(request.elapsed_seconds).to be_a(Float) expect(error).to be_a(StandardError) expect(metadata).to eq(:smth) calls << nil From 153d59dd730e56c91b68221a9089f245afa428ff Mon Sep 17 00:00:00 2001 From: Igor Date: Tue, 15 Nov 2022 18:03:18 +0600 Subject: [PATCH 3/3] refactor elapsed seconds --- lib/ezclient/request.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/ezclient/request.rb b/lib/ezclient/request.rb index a8d833d..1d0869b 100644 --- a/lib/ezclient/request.rb +++ b/lib/ezclient/request.rb @@ -21,15 +21,12 @@ def initialize(verb, url, options) end def perform - perform_started_at = EzClient.get_time http_response = perform_request - self.elapsed_seconds = EzClient.get_time - perform_started_at EzClient::Response.new(http_response).tap do |response| on_complete.call(self, response, options[:metadata]) end rescue => error - self.elapsed_seconds = EzClient.get_time - perform_started_at on_error.call(self, error, options[:metadata]) raise error end @@ -104,6 +101,7 @@ def http_client end def perform_request + perform_started_at = EzClient.get_time with_retry do # Use original client so that connection can be reused res = client.perform(http_request, http_options) @@ -113,6 +111,8 @@ def perform_request client.perform(request, http_options) end end + ensure + self.elapsed_seconds = EzClient.get_time - perform_started_at end def with_retry(&block)