2020-12-09 15:10:12 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
class GitlabPerformanceBarStatsWorker
|
|
|
|
include ApplicationWorker
|
|
|
|
|
|
|
|
LEASE_KEY = 'gitlab:performance_bar_stats'
|
|
|
|
LEASE_TIMEOUT = 600
|
|
|
|
WORKER_DELAY = 120
|
|
|
|
STATS_KEY = 'performance_bar_stats:pending_request_ids'
|
2021-01-11 21:10:36 +00:00
|
|
|
STATS_KEY_EXPIRE = 30.minutes.to_i
|
2020-12-09 15:10:12 +00:00
|
|
|
|
|
|
|
feature_category :metrics
|
|
|
|
idempotent!
|
|
|
|
|
|
|
|
def perform(lease_uuid)
|
2021-01-11 21:10:36 +00:00
|
|
|
Gitlab::Redis::Cache.with do |redis|
|
2020-12-09 15:10:12 +00:00
|
|
|
request_ids = fetch_request_ids(redis, lease_uuid)
|
|
|
|
stats = Gitlab::PerformanceBar::Stats.new(redis)
|
|
|
|
|
|
|
|
request_ids.each do |id|
|
|
|
|
stats.process(id)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def fetch_request_ids(redis, lease_uuid)
|
|
|
|
ids = redis.smembers(STATS_KEY)
|
|
|
|
redis.del(STATS_KEY)
|
|
|
|
Gitlab::ExclusiveLease.cancel(LEASE_KEY, lease_uuid)
|
|
|
|
|
|
|
|
ids
|
|
|
|
end
|
|
|
|
end
|