summaryrefslogtreecommitdiff
path: root/lib/gitlab/metrics/web_transaction.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/metrics/web_transaction.rb')
-rw-r--r--lib/gitlab/metrics/web_transaction.rb25
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/gitlab/metrics/web_transaction.rb b/lib/gitlab/metrics/web_transaction.rb
index ee9e6f449d3..3ebfcc43b0b 100644
--- a/lib/gitlab/metrics/web_transaction.rb
+++ b/lib/gitlab/metrics/web_transaction.rb
@@ -6,12 +6,29 @@ module Gitlab
CONTROLLER_KEY = 'action_controller.instance'
ENDPOINT_KEY = 'api.endpoint'
ALLOWED_SUFFIXES = Set.new(%w[json js atom rss xml zip])
+ SMALL_BUCKETS = [0.1, 0.25, 0.5, 1.0, 2.5, 5.0].freeze
def initialize(env)
super()
@env = env
end
+ def run
+ Thread.current[THREAD_KEY] = self
+
+ started_at = System.monotonic_time
+
+ status, _, _ = retval = yield
+
+ finished_at = System.monotonic_time
+ duration = finished_at - started_at
+ record_duration_if_needed(status, duration)
+
+ retval
+ ensure
+ Thread.current[THREAD_KEY] = nil
+ end
+
def labels
return @labels if @labels
@@ -27,6 +44,14 @@ module Gitlab
private
+ def record_duration_if_needed(status, duration)
+ return unless Gitlab::Metrics.record_duration_for_status?(status)
+
+ observe(:gitlab_transaction_duration_seconds, duration) do
+ buckets SMALL_BUCKETS
+ end
+ end
+
def labels_from_controller
controller = @env[CONTROLLER_KEY]