summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2017-01-20 15:14:50 +0000
committerYorick Peterse <yorickpeterse@gmail.com>2017-01-20 15:14:50 +0000
commit029b9019167b3a67e628e609f2cc141052a99a98 (patch)
tree39bd9fdd5e95c1b7a81a481906c4e8fe5e95900c
parent714729687fffdeba9a8995b40fc1a2c212e844e9 (diff)
parent8c41d5f5e13c321aa38d7636e608dc84371cfd5d (diff)
downloadgitlab-ce-029b9019167b3a67e628e609f2cc141052a99a98.tar.gz
Merge branch 'record-used-ssh-keys-once-per-day' into 'master'
Record used SSH keys only once per day Closes #26877 See merge request !8655
-rw-r--r--app/models/key.rb7
-rw-r--r--changelogs/unreleased/record-used-ssh-keys-once-per-day.yml4
-rw-r--r--spec/models/key_spec.rb27
3 files changed, 33 insertions, 5 deletions
diff --git a/app/models/key.rb b/app/models/key.rb
index 8be29c697f1..9c74ca84753 100644
--- a/app/models/key.rb
+++ b/app/models/key.rb
@@ -4,6 +4,8 @@ class Key < ActiveRecord::Base
include AfterCommitQueue
include Sortable
+ LAST_USED_AT_REFRESH_TIME = 1.day.to_i
+
belongs_to :user
before_validation :generate_fingerprint
@@ -50,7 +52,10 @@ class Key < ActiveRecord::Base
end
def update_last_used_at
- UseKeyWorker.perform_async(self.id)
+ lease = Gitlab::ExclusiveLease.new("key_update_last_used_at:#{id}", timeout: LAST_USED_AT_REFRESH_TIME)
+ return unless lease.try_obtain
+
+ UseKeyWorker.perform_async(id)
end
def add_to_shell
diff --git a/changelogs/unreleased/record-used-ssh-keys-once-per-day.yml b/changelogs/unreleased/record-used-ssh-keys-once-per-day.yml
new file mode 100644
index 00000000000..9af9e3833c6
--- /dev/null
+++ b/changelogs/unreleased/record-used-ssh-keys-once-per-day.yml
@@ -0,0 +1,4 @@
+---
+title: Record used SSH keys only once per day
+merge_request: 8655
+author:
diff --git a/spec/models/key_spec.rb b/spec/models/key_spec.rb
index 5eaddd822be..7c40cfd8253 100644
--- a/spec/models/key_spec.rb
+++ b/spec/models/key_spec.rb
@@ -30,11 +30,30 @@ describe Key, models: true do
end
describe "#update_last_used_at" do
- it "enqueues a UseKeyWorker job" do
- key = create(:key)
+ let(:key) { create(:key) }
+
+ context 'when key was not updated during the last day' do
+ before do
+ allow_any_instance_of(Gitlab::ExclusiveLease).to receive(:try_obtain).
+ and_return('000000')
+ end
+
+ it 'enqueues a UseKeyWorker job' do
+ expect(UseKeyWorker).to receive(:perform_async).with(key.id)
+ key.update_last_used_at
+ end
+ end
+
+ context 'when key was updated during the last day' do
+ before do
+ allow_any_instance_of(Gitlab::ExclusiveLease).to receive(:try_obtain).
+ and_return(false)
+ end
- expect(UseKeyWorker).to receive(:perform_async).with(key.id)
- key.update_last_used_at
+ it 'does not enqueue a UseKeyWorker job' do
+ expect(UseKeyWorker).not_to receive(:perform_async)
+ key.update_last_used_at
+ end
end
end
end