Module: Gitlab::PerformanceBar::RedisAdapterWhenPeekEnabled

Defined in:
lib/gitlab/performance_bar/redis_adapter_when_peek_enabled.rb

Instance Method Summary collapse

Instance Method Details

#enqueue_stats_job(request_id) ⇒ Object

schedules a job which parses peek profile data and adds them to a structured log rubocop:disable Gitlab/ModuleWithInstanceVariables



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/gitlab/performance_bar/redis_adapter_when_peek_enabled.rb', line 19

def enqueue_stats_job(request_id)
  return unless Feature.enabled?(:performance_bar_stats, type: :ops)

  @client.sadd?(GitlabPerformanceBarStatsWorker::STATS_KEY, request_id)

  return unless uuid = Gitlab::ExclusiveLease.new(
    GitlabPerformanceBarStatsWorker::LEASE_KEY,
    timeout: GitlabPerformanceBarStatsWorker::LEASE_TIMEOUT
  ).try_obtain

  # stats key should be periodically processed and deleted by
  # GitlabPerformanceBarStatsWorker but if it doesn't happen for
  # some reason, we set expiration for the stats key to avoid
  # keeping millions of request ids which would be already expired
  # anyway
  # rubocop:disable Gitlab/ModuleWithInstanceVariables
  @client.expire(
    GitlabPerformanceBarStatsWorker::STATS_KEY,
    GitlabPerformanceBarStatsWorker::STATS_KEY_EXPIRE
  )

  GitlabPerformanceBarStatsWorker.perform_in(
    GitlabPerformanceBarStatsWorker::WORKER_DELAY,
    uuid
  )
end

#save(request_id) ⇒ Object



7
8
9
10
11
12
13
14
# File 'lib/gitlab/performance_bar/redis_adapter_when_peek_enabled.rb', line 7

def save(request_id)
  return unless ::Gitlab::PerformanceBar.enabled_for_request?
  return if request_id.blank?

  super

  enqueue_stats_job(request_id)
end