summaryrefslogtreecommitdiff
path: root/app/workers
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2017-03-07 19:35:32 +0100
committerRémy Coutable <remy@rymai.me>2017-04-14 15:20:55 +0200
commitd4da926f48503125307fe3d4a4f3952df92fc1ce (patch)
tree1a4ed961162f686f282aa173deaf4af5f7406ea6 /app/workers
parentcfe19b795e076b73df75ee57839640667283651c (diff)
downloadgitlab-ce-d4da926f48503125307fe3d4a4f3952df92fc1ce.tar.gz
Add new ScheduleUpdateUserActivityWorker and UpdateUserActivityWorker
Signed-off-by: Rémy Coutable <remy@rymai.me>
Diffstat (limited to 'app/workers')
-rw-r--r--app/workers/schedule_update_user_activity_worker.rb12
-rw-r--r--app/workers/update_user_activity_worker.rb28
2 files changed, 40 insertions, 0 deletions
diff --git a/app/workers/schedule_update_user_activity_worker.rb b/app/workers/schedule_update_user_activity_worker.rb
new file mode 100644
index 00000000000..f1adae653b1
--- /dev/null
+++ b/app/workers/schedule_update_user_activity_worker.rb
@@ -0,0 +1,12 @@
+class ScheduleUpdateUserActivityWorker
+ include Sidekiq::Worker
+ include CronjobQueue
+
+ def perform(batch_size = 500)
+ return if Gitlab::Geo.secondary?
+
+ Gitlab::UserActivities.new.each_slice(batch_size) do |batch|
+ UpdateUserActivityWorker.perform_async(Hash[batch])
+ end
+ end
+end
diff --git a/app/workers/update_user_activity_worker.rb b/app/workers/update_user_activity_worker.rb
new file mode 100644
index 00000000000..9f48eb46393
--- /dev/null
+++ b/app/workers/update_user_activity_worker.rb
@@ -0,0 +1,28 @@
+class UpdateUserActivityWorker
+ include Sidekiq::Worker
+ include DedicatedSidekiqQueue
+
+ def perform(pairs)
+ return if Gitlab::Geo.secondary?
+
+ pairs = cast_data(pairs)
+ ids = pairs.keys
+ conditions = 'WHEN id = ? THEN ? ' * ids.length
+
+ User.where(id: ids).
+ update_all([
+ "last_activity_on = CASE #{conditions} ELSE last_activity_on END",
+ *pairs.to_a.flatten
+ ])
+
+ Gitlab::UserActivities.new.delete(*ids)
+ end
+
+ private
+
+ def cast_data(pairs)
+ pairs.each_with_object({}) do |(key, value), new_pairs|
+ new_pairs[key.to_i] = Time.at(value.to_i).to_s(:db)
+ end
+ end
+end