# 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