Skip to content
Snippets Groups Projects
Commit 8c41d5f5 authored by Adam Niedzielski's avatar Adam Niedzielski
Browse files

Record used SSH keys only once per day

Use Gitlab::ExclusiveLease to make sure that we enqueue Sidekiq job
at most once per day for given key.
parent 5a41d92b
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
---
title: Record used SSH keys only once per day
merge_request: 8655
author:
Loading
Loading
@@ -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
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment