diff options
author | Kamil Trzciński <ayufan@ayufan.eu> | 2018-02-27 10:20:09 +0000 |
---|---|---|
committer | Kamil Trzciński <ayufan@ayufan.eu> | 2018-02-27 10:20:09 +0000 |
commit | 60503057bcf357bef82e3e61072d2a2646f62279 (patch) | |
tree | 48e234ba8450dd8786c42bcfa157987a5ec0b567 /app/models | |
parent | a4885b8f37602c399efff028b0a733ef80fbe7ab (diff) | |
parent | 57719d34d3fcc15f39354b0e9dc1da41bbe5d1a8 (diff) | |
download | gitlab-ce-60503057bcf357bef82e3e61072d2a2646f62279.tar.gz |
Merge branch 'slash-commands-changes-for-chatops' into 'master'
Expose ChatName objects to slash commands
See merge request gitlab-org/gitlab-ce!17295
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/chat_name.rb | 21 | ||||
-rw-r--r-- | app/models/project_services/slash_commands_service.rb | 6 |
2 files changed, 24 insertions, 3 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 diff --git a/app/models/project_services/slash_commands_service.rb b/app/models/project_services/slash_commands_service.rb index eb4da68bb7e..37ea45109ae 100644 --- a/app/models/project_services/slash_commands_service.rb +++ b/app/models/project_services/slash_commands_service.rb @@ -30,10 +30,10 @@ class SlashCommandsService < Service def trigger(params) return unless valid_token?(params[:token]) - user = find_chat_user(params) + chat_user = find_chat_user(params) - if user - Gitlab::SlashCommands::Command.new(project, user, params).execute + if chat_user&.user + Gitlab::SlashCommands::Command.new(project, chat_user, params).execute else url = authorize_chat_name_url(params) Gitlab::SlashCommands::Presenters::Access.new(url).authorize |