diff options
author | Rémy Coutable <remy@rymai.me> | 2017-03-07 21:35:32 +0300 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2017-04-14 16:20:55 +0300 |
commit | d4da926f48503125307fe3d4a4f3952df92fc1ce (patch) | |
tree | 1a4ed961162f686f282aa173deaf4af5f7406ea6 /app/workers | |
parent | cfe19b795e076b73df75ee57839640667283651c (diff) |
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.rb | 12 | ||||
-rw-r--r-- | app/workers/update_user_activity_worker.rb | 28 |
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 |