diff options
author | Jan Provaznik <jprovaznik@gitlab.com> | 2019-06-05 19:20:37 +0200 |
---|---|---|
committer | Jan Provaznik <jprovaznik@gitlab.com> | 2019-06-12 12:09:04 +0200 |
commit | d3a7bdda986949ca76df3c4932ee8c973437a743 (patch) | |
tree | f5bef987fa8c1a6c4f9946eda47ebb6ffba82e63 /lib | |
parent | f18f3ed9265e777ab7ddcb87948d0e405fbbb0b0 (diff) | |
download | gitlab-ce-d3a7bdda986949ca76df3c4932ee8c973437a743.tar.gz |
Moved RackTimeout observer to a different location
Because there will be similar observer for PumaWorkerKiller,
it makes sense to keep both on better place.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab/cluster/rack_timeout_observer.rb | 48 | ||||
-rw-r--r-- | lib/gitlab/rack_timeout_observer.rb | 46 |
2 files changed, 48 insertions, 46 deletions
diff --git a/lib/gitlab/cluster/rack_timeout_observer.rb b/lib/gitlab/cluster/rack_timeout_observer.rb new file mode 100644 index 00000000000..2bc006b8011 --- /dev/null +++ b/lib/gitlab/cluster/rack_timeout_observer.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +module Gitlab + module Cluster + class RackTimeoutObserver + def initialize + @counter = Gitlab::Metrics.counter(:rack_state_total, 'Number of requests in a given rack state') + end + + # returns the Proc to be used as the observer callback block + def callback + method(:log_timeout_exception) + end + + private + + def log_timeout_exception(env) + info = env[::Rack::Timeout::ENV_INFO_KEY] + return unless info + + @counter.increment(labels(info, env)) + end + + def labels(info, env) + params = controller_params(env) || grape_params(env) || {} + + { + controller: params['controller'], + action: params['action'], + route: params['route'], + state: info.state + } + end + + def controller_params(env) + env['action_dispatch.request.parameters'] + end + + def grape_params(env) + endpoint = env[Grape::Env::API_ENDPOINT] + route = endpoint&.route&.pattern&.origin + return unless route + + { 'route' => route } + end + end + end +end diff --git a/lib/gitlab/rack_timeout_observer.rb b/lib/gitlab/rack_timeout_observer.rb deleted file mode 100644 index 80d3f7dea60..00000000000 --- a/lib/gitlab/rack_timeout_observer.rb +++ /dev/null @@ -1,46 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - class RackTimeoutObserver - def initialize - @counter = Gitlab::Metrics.counter(:rack_state_total, 'Number of requests in a given rack state') - end - - # returns the Proc to be used as the observer callback block - def callback - method(:log_timeout_exception) - end - - private - - def log_timeout_exception(env) - info = env[::Rack::Timeout::ENV_INFO_KEY] - return unless info - - @counter.increment(labels(info, env)) - end - - def labels(info, env) - params = controller_params(env) || grape_params(env) || {} - - { - controller: params['controller'], - action: params['action'], - route: params['route'], - state: info.state - } - end - - def controller_params(env) - env['action_dispatch.request.parameters'] - end - - def grape_params(env) - endpoint = env[Grape::Env::API_ENDPOINT] - route = endpoint&.route&.pattern&.origin - return unless route - - { 'route' => route } - end - end -end |