summaryrefslogtreecommitdiff
path: root/app/models/chat_name.rb
diff options
context:
space:
mode:
authorClement Ho <clemmakesapps@gmail.com>2018-02-27 18:43:51 +0000
committerClement Ho <clemmakesapps@gmail.com>2018-02-27 18:43:51 +0000
commitc066dc6c37ab678bcea0c3bed1503b2d4486b6e1 (patch)
treed01e9d1ed915d58bd00b564e99584ac59460476b /app/models/chat_name.rb
parentb17912a8af08ada189fc4dc2f864d619ca0bed86 (diff)
parentd4867c518f2d72125c619c191fa9577dabb1ae9a (diff)
downloadgitlab-ce-remove-snippets-bundle.tar.gz
Merge branch 'master' into 'remove-snippets-bundle'remove-snippets-bundle
# Conflicts: # config/webpack.config.js
Diffstat (limited to 'app/models/chat_name.rb')
-rw-r--r--app/models/chat_name.rb21
1 files changed, 21 insertions, 0 deletions
diff --git a/app/models/chat_name.rb b/app/models/chat_name.rb
index f321db75eeb..fbd0f123341 100644
--- a/app/models/chat_name.rb
+++ b/app/models/chat_name.rb
@@ -1,4 +1,6 @@
class ChatName < ActiveRecord::Base
+ LAST_USED_AT_INTERVAL = 1.hour
+
belongs_to :service
belongs_to :user
@@ -9,4 +11,23 @@ class ChatName < ActiveRecord::Base
validates :user_id, uniqueness: { scope: [:service_id] }
validates :chat_id, uniqueness: { scope: [:service_id, :team_id] }
+
+ # Updates the "last_used_timestamp" but only if it wasn't already updated
+ # recently.
+ #
+ # The throttling this method uses is put in place to ensure that high chat
+ # traffic doesn't result in many UPDATE queries being performed.
+ def update_last_used_at
+ return unless update_last_used_at?
+
+ obtained = Gitlab::ExclusiveLease
+ .new("chat_name/last_used_at/#{id}", timeout: LAST_USED_AT_INTERVAL.to_i)
+ .try_obtain
+
+ touch(:last_used_at) if obtained
+ end
+
+ def update_last_used_at?
+ last_used_at.nil? || last_used_at > LAST_USED_AT_INTERVAL.ago
+ end
end