summaryrefslogtreecommitdiff
path: root/app/workers/gitlab_performance_bar_stats_worker.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/workers/gitlab_performance_bar_stats_worker.rb')
-rw-r--r--app/workers/gitlab_performance_bar_stats_worker.rb34
1 files changed, 34 insertions, 0 deletions
diff --git a/app/workers/gitlab_performance_bar_stats_worker.rb b/app/workers/gitlab_performance_bar_stats_worker.rb
new file mode 100644
index 00000000000..d63f8111864
--- /dev/null
+++ b/app/workers/gitlab_performance_bar_stats_worker.rb
@@ -0,0 +1,34 @@
+# 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'
+
+ feature_category :metrics
+ idempotent!
+
+ def perform(lease_uuid)
+ Gitlab::Redis::SharedState.with do |redis|
+ 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