summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Provaznik <jprovaznik@gitlab.com>2019-06-12 12:33:34 +0200
committerJan Provaznik <jprovaznik@gitlab.com>2019-06-12 12:33:34 +0200
commit13364c00d57ce3150a50c23ea3eb0e6af4271d92 (patch)
tree7f31f9e3fb368f7f37c7fa205123c4d550e56df9
parentd3a7bdda986949ca76df3c4932ee8c973437a743 (diff)
downloadgitlab-ce-rack-timeout-rename.tar.gz
Monitor only final statesrack-timeout-rename
There is no reason to monitor transition states so we ignore ready and active states. We can get ratio of completed vs failed requests from final states.
-rw-r--r--lib/gitlab/cluster/rack_timeout_observer.rb5
-rw-r--r--spec/lib/gitlab/cluster/rack_timeout_observer_spec.rb23
2 files changed, 25 insertions, 3 deletions
diff --git a/lib/gitlab/cluster/rack_timeout_observer.rb b/lib/gitlab/cluster/rack_timeout_observer.rb
index 2bc006b8011..5182b2be148 100644
--- a/lib/gitlab/cluster/rack_timeout_observer.rb
+++ b/lib/gitlab/cluster/rack_timeout_observer.rb
@@ -3,8 +3,10 @@
module Gitlab
module Cluster
class RackTimeoutObserver
+ TRANSITION_STATES = %i(ready active).freeze
+
def initialize
- @counter = Gitlab::Metrics.counter(:rack_state_total, 'Number of requests in a given rack state')
+ @counter = Gitlab::Metrics.counter(:rack_requests_total, 'Number of requests in a given rack state')
end
# returns the Proc to be used as the observer callback block
@@ -17,6 +19,7 @@ module Gitlab
def log_timeout_exception(env)
info = env[::Rack::Timeout::ENV_INFO_KEY]
return unless info
+ return if TRANSITION_STATES.include?(info.state)
@counter.increment(labels(info, env))
end
diff --git a/spec/lib/gitlab/cluster/rack_timeout_observer_spec.rb b/spec/lib/gitlab/cluster/rack_timeout_observer_spec.rb
index 2adb1d7cc71..68e5435450c 100644
--- a/spec/lib/gitlab/cluster/rack_timeout_observer_spec.rb
+++ b/spec/lib/gitlab/cluster/rack_timeout_observer_spec.rb
@@ -25,7 +25,7 @@ describe Gitlab::Cluster::RackTimeoutObserver do
subject { described_class.new }
- it 'increments timeout counter' do
+ it 'increments counter' do
expect(counter)
.to receive(:increment)
.with({ controller: 'foo', action: 'bar', route: nil, state: :timed_out })
@@ -45,7 +45,7 @@ describe Gitlab::Cluster::RackTimeoutObserver do
subject { described_class.new }
- it 'increments timeout counter' do
+ it 'increments counter' do
allow(endpoint).to receive_message_chain('route.pattern.origin') { 'foobar' }
expect(counter)
.to receive(:increment)
@@ -54,5 +54,24 @@ describe Gitlab::Cluster::RackTimeoutObserver do
subject.callback.call(env)
end
end
+
+ context 'when request is being processed' do
+ let(:endpoint) { double }
+ let(:env) do
+ {
+ ::Rack::Timeout::ENV_INFO_KEY => double(state: :active),
+ Grape::Env::API_ENDPOINT => endpoint
+ }
+ end
+
+ subject { described_class.new }
+
+ it 'does not increment counter' do
+ allow(endpoint).to receive_message_chain('route.pattern.origin') { 'foobar' }
+ expect(counter).not_to receive(:increment)
+
+ subject.callback.call(env)
+ end
+ end
end
end