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/sidekiq_slis.rb')
-rw-r--r--lib/gitlab/metrics/sidekiq_slis.rb24
1 files changed, 23 insertions, 1 deletions
diff --git a/lib/gitlab/metrics/sidekiq_slis.rb b/lib/gitlab/metrics/sidekiq_slis.rb
index f28cf4ac967..748666f2200 100644
--- a/lib/gitlab/metrics/sidekiq_slis.rb
+++ b/lib/gitlab/metrics/sidekiq_slis.rb
@@ -8,16 +8,26 @@ module Gitlab
"low" => 300,
"throttled" => 300
}.freeze
+ QUEUEING_URGENCY_DURATIONS = {
+ "high" => 10,
+ "low" => 60,
+ "throttled" => Float::INFINITY # no queueing target duration for throttled urgency
+ }.freeze
# workers without urgency attribute have "low" urgency by default in
# WorkerAttributes.get_urgency, just mirroring it here
DEFAULT_EXECUTION_URGENCY_DURATION = EXECUTION_URGENCY_DURATIONS["low"]
+ DEFAULT_QUEUEING_URGENCY_DURATION = QUEUEING_URGENCY_DURATIONS["low"]
class << self
- def initialize_slis!(possible_labels)
+ def initialize_execution_slis!(possible_labels)
Gitlab::Metrics::Sli::Apdex.initialize_sli(:sidekiq_execution, possible_labels)
Gitlab::Metrics::Sli::ErrorRate.initialize_sli(:sidekiq_execution, possible_labels)
end
+ def initialize_queueing_slis!(possible_labels)
+ Gitlab::Metrics::Sli::Apdex.initialize_sli(:sidekiq_queueing, possible_labels)
+ end
+
def record_execution_apdex(labels, job_completion_duration)
urgency_requirement = execution_duration_for_urgency(labels[:urgency])
Gitlab::Metrics::Sli::Apdex[:sidekiq_execution].increment(
@@ -30,9 +40,21 @@ module Gitlab
Gitlab::Metrics::Sli::ErrorRate[:sidekiq_execution].increment(labels: labels, error: error)
end
+ def record_queueing_apdex(labels, queue_duration)
+ urgency_requirement = queueing_duration_for_urgency(labels[:urgency])
+ Gitlab::Metrics::Sli::Apdex[:sidekiq_queueing].increment(
+ labels: labels,
+ success: queue_duration < urgency_requirement
+ )
+ end
+
def execution_duration_for_urgency(urgency)
EXECUTION_URGENCY_DURATIONS.fetch(urgency, DEFAULT_EXECUTION_URGENCY_DURATION)
end
+
+ def queueing_duration_for_urgency(urgency)
+ QUEUEING_URGENCY_DURATIONS.fetch(urgency, DEFAULT_QUEUEING_URGENCY_DURATION)
+ end
end
end
end