mirror of
https://gitlab.com/gitlab-org/gitlab-foss.git
synced 2025-08-03 16:04:30 +00:00
58 lines
1.7 KiB
Ruby
58 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module Metrics
|
|
module GlqlSlis
|
|
include Gitlab::Metrics::SliConfig
|
|
|
|
puma_enabled!
|
|
|
|
class << self
|
|
ERROR_TYPES = [:query_aborted, :other, nil].freeze
|
|
ENDPOINTS = ['Glql::BaseController#execute'].freeze
|
|
FEATURE_CATEGORIES = [
|
|
:code_review_workflow,
|
|
:not_owned,
|
|
:portfolio_management,
|
|
:team_planning,
|
|
:wiki
|
|
].freeze
|
|
|
|
def initialize_slis!
|
|
glql_labels = possible_glql_labels
|
|
Gitlab::Metrics::Sli::Apdex.initialize_sli(:glql, glql_labels)
|
|
Gitlab::Metrics::Sli::ErrorRate.initialize_sli(:glql, glql_labels)
|
|
end
|
|
|
|
def record_apdex(labels:, success:)
|
|
Gitlab::Metrics::Sli::Apdex[:glql].increment(labels: labels, success: success)
|
|
end
|
|
|
|
def record_error(labels:, error:)
|
|
Gitlab::Metrics::Sli::ErrorRate[:glql].increment(labels: labels, error: error)
|
|
end
|
|
|
|
private
|
|
|
|
def possible_glql_labels
|
|
return [] unless Gitlab::Metrics::Environment.api?
|
|
|
|
# This generates all possible label combinations for GLQL metrics
|
|
# by taking the product of the error types, feature categories, and endpoints.
|
|
combinations = ERROR_TYPES.product(FEATURE_CATEGORIES, ENDPOINTS)
|
|
low_urgency = Gitlab::EndpointAttributes::Config::REQUEST_URGENCIES.fetch(:low).name
|
|
|
|
combinations.map do |error_type, feature_category, endpoint_id|
|
|
{
|
|
query_urgency: low_urgency,
|
|
error_type: error_type,
|
|
feature_category: feature_category,
|
|
endpoint_id: endpoint_id
|
|
}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|