summaryrefslogtreecommitdiff
path: root/lib/gitlab/metrics/sidekiq_slis.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/metrics/sidekiq_slis.rb')
-rw-r--r--lib/gitlab/metrics/sidekiq_slis.rb39
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/gitlab/metrics/sidekiq_slis.rb b/lib/gitlab/metrics/sidekiq_slis.rb
new file mode 100644
index 00000000000..f28cf4ac967
--- /dev/null
+++ b/lib/gitlab/metrics/sidekiq_slis.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Metrics
+ module SidekiqSlis
+ EXECUTION_URGENCY_DURATIONS = {
+ "high" => 10,
+ "low" => 300,
+ "throttled" => 300
+ }.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"]
+
+ class << self
+ def initialize_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 record_execution_apdex(labels, job_completion_duration)
+ urgency_requirement = execution_duration_for_urgency(labels[:urgency])
+ Gitlab::Metrics::Sli::Apdex[:sidekiq_execution].increment(
+ labels: labels,
+ success: job_completion_duration < urgency_requirement
+ )
+ end
+
+ def record_execution_error(labels, error)
+ Gitlab::Metrics::Sli::ErrorRate[:sidekiq_execution].increment(labels: labels, error: error)
+ end
+
+ def execution_duration_for_urgency(urgency)
+ EXECUTION_URGENCY_DURATIONS.fetch(urgency, DEFAULT_EXECUTION_URGENCY_DURATION)
+ end
+ end
+ end
+ end
+end