Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/metrics/rails_slis.rb')
-rw-r--r--lib/gitlab/metrics/rails_slis.rb52
1 files changed, 52 insertions, 0 deletions
diff --git a/lib/gitlab/metrics/rails_slis.rb b/lib/gitlab/metrics/rails_slis.rb
new file mode 100644
index 00000000000..69e0c1e9fde
--- /dev/null
+++ b/lib/gitlab/metrics/rails_slis.rb
@@ -0,0 +1,52 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Metrics
+ module RailsSlis
+ class << self
+ def request_apdex_counters_enabled?
+ Feature.enabled?(:request_apdex_counters)
+ end
+
+ def initialize_request_slis_if_needed!
+ return unless request_apdex_counters_enabled?
+ return if Gitlab::Metrics::Sli.initialized?(:rails_request_apdex)
+
+ Gitlab::Metrics::Sli.initialize_sli(:rails_request_apdex, possible_request_labels)
+ end
+
+ def request_apdex
+ Gitlab::Metrics::Sli[:rails_request_apdex]
+ end
+
+ private
+
+ def possible_request_labels
+ possible_controller_labels + possible_api_labels
+ end
+
+ def possible_api_labels
+ Gitlab::RequestEndpoints.all_api_endpoints.map do |route|
+ endpoint_id = API::Base.endpoint_id_for_route(route)
+ route_class = route.app.options[:for]
+ feature_category = route_class.feature_category_for_app(route.app)
+
+ {
+ endpoint_id: endpoint_id,
+ feature_category: feature_category
+ }
+ end
+ end
+
+ def possible_controller_labels
+ Gitlab::RequestEndpoints.all_controller_actions.map do |controller, action|
+ {
+ endpoint_id: controller.endpoint_id_for_action(action),
+ feature_category: controller.feature_category_for_action(action)
+ }
+ end
+ end
+ end
+ end
+ end
+end