Cache PerformanceBar data using RequestStore
Signed-off-by: Rémy Coutable <remy@rymai.me>
This commit is contained in:
parent
186048a404
commit
b531616eba
3 changed files with 33 additions and 18 deletions
|
@ -489,7 +489,7 @@ Settings.gitaly['enabled'] = true if Settings.gitaly['enabled'].nil?
|
|||
# Performance bar
|
||||
#
|
||||
Settings['performance_bar'] ||= Settingslogic.new({})
|
||||
Settings.performance_bar['allowed_group'] = 'gitlab-org' if Settings.performance_bar['allowed_group'].nil?
|
||||
Settings.performance_bar['allowed_group'] ||= nil
|
||||
|
||||
#
|
||||
# Webpack settings
|
||||
|
|
|
@ -5,19 +5,34 @@ module Gitlab
|
|||
end
|
||||
|
||||
def self.allowed_actor?(actor)
|
||||
group = allowed_group
|
||||
return false unless actor&.is_a?(User) && group
|
||||
return false unless actor.thing&.is_a?(User) && allowed_group
|
||||
|
||||
GroupMembersFinder.new(group)
|
||||
.execute
|
||||
.where(user_id: actor.id)
|
||||
.any?
|
||||
if RequestStore.active?
|
||||
RequestStore.fetch('performance_bar:user_member_of_allowed_group') do
|
||||
user_member_of_allowed_group?(actor.thing)
|
||||
end
|
||||
else
|
||||
user_member_of_allowed_group?(actor.thing)
|
||||
end
|
||||
end
|
||||
|
||||
def self.allowed_group
|
||||
return nil unless Gitlab.config.performance_bar.allowed_group
|
||||
|
||||
Group.by_path(Gitlab.config.performance_bar.allowed_group)
|
||||
if RequestStore.active?
|
||||
RequestStore.fetch('performance_bar:allowed_group') do
|
||||
Group.by_path(Gitlab.config.performance_bar.allowed_group)
|
||||
end
|
||||
else
|
||||
Group.by_path(Gitlab.config.performance_bar.allowed_group)
|
||||
end
|
||||
end
|
||||
|
||||
def self.user_member_of_allowed_group?(user)
|
||||
GroupMembersFinder.new(allowed_group)
|
||||
.execute
|
||||
.where(user_id: user.id)
|
||||
.any?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,38 +2,38 @@ require 'spec_helper'
|
|||
|
||||
describe Gitlab::PerformanceBar do
|
||||
describe '.enabled?' do
|
||||
it 'returns false when given user is nil' do
|
||||
it 'returns false when given actor is nil' do
|
||||
expect(described_class.enabled?(nil)).to be_falsy
|
||||
end
|
||||
|
||||
it 'returns false when feature is disabled' do
|
||||
user = double('user')
|
||||
actor = double('actor')
|
||||
|
||||
expect(Feature).to receive(:enabled?)
|
||||
.with(:gitlab_performance_bar, user).and_return(false)
|
||||
.with(:gitlab_performance_bar, actor).and_return(false)
|
||||
|
||||
expect(described_class.enabled?(user)).to be_falsy
|
||||
expect(described_class.enabled?(actor)).to be_falsy
|
||||
end
|
||||
|
||||
it 'returns true when feature is enabled' do
|
||||
user = double('user')
|
||||
actor = double('actor')
|
||||
|
||||
expect(Feature).to receive(:enabled?)
|
||||
.with(:gitlab_performance_bar, user).and_return(true)
|
||||
.with(:gitlab_performance_bar, actor).and_return(true)
|
||||
|
||||
expect(described_class.enabled?(user)).to be_truthy
|
||||
expect(described_class.enabled?(actor)).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
describe '.allowed_actor?' do
|
||||
it 'returns false when given actor is not a User' do
|
||||
actor = double
|
||||
actor = double('actor', thing: double)
|
||||
|
||||
expect(described_class.allowed_actor?(actor)).to be_falsy
|
||||
end
|
||||
|
||||
context 'when given actor is a User' do
|
||||
let(:actor) { create(:user) }
|
||||
let(:actor) { double('actor', thing: create(:user)) }
|
||||
|
||||
before do
|
||||
stub_performance_bar_setting(allowed_group: 'my-group')
|
||||
|
@ -56,7 +56,7 @@ describe Gitlab::PerformanceBar do
|
|||
|
||||
context 'when user is a member of the allowed group' do
|
||||
before do
|
||||
my_group.add_developer(actor)
|
||||
my_group.add_developer(actor.thing)
|
||||
end
|
||||
|
||||
it 'returns true' do
|
||||
|
|
Loading…
Reference in a new issue