Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Jérome Perrin
gitlab-ce
Commits
040eeb10
Commit
040eeb10
authored
7 years ago
by
Rémy Coutable
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Allow to enable the Performance Bar for a group from the admin area
Signed-off-by:
Rémy Coutable
<
remy@rymai.me
>
parent
de9eca0a
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
257 additions
and
54 deletions
+257
-54
app/controllers/admin/application_settings_controller.rb
app/controllers/admin/application_settings_controller.rb
+2
-0
app/models/application_setting.rb
app/models/application_setting.rb
+37
-0
app/views/admin/application_settings/_form.html.haml
app/views/admin/application_settings/_form.html.haml
+16
-0
config/gitlab.yml.example
config/gitlab.yml.example
+0
-5
config/initializers/1_settings.rb
config/initializers/1_settings.rb
+0
-6
db/migrate/20170706151212_add_performance_bar_allowed_group_id_to_application_settings.rb
...rformance_bar_allowed_group_id_to_application_settings.rb
+9
-0
db/schema.rb
db/schema.rb
+2
-1
doc/administration/monitoring/performance/img/performance_bar_configuration_settings.png
...erformance/img/performance_bar_configuration_settings.png
+0
-0
doc/administration/monitoring/performance/performance_bar.md
doc/administration/monitoring/performance/performance_bar.md
+26
-24
lib/gitlab/performance_bar.rb
lib/gitlab/performance_bar.rb
+10
-8
spec/features/user_can_display_performance_bar_spec.rb
spec/features/user_can_display_performance_bar_spec.rb
+8
-8
spec/lib/gitlab/performance_bar_spec.rb
spec/lib/gitlab/performance_bar_spec.rb
+2
-2
spec/models/application_setting_spec.rb
spec/models/application_setting_spec.rb
+145
-0
No files found.
app/controllers/admin/application_settings_controller.rb
View file @
040eeb10
...
...
@@ -126,6 +126,8 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController
:metrics_port
,
:metrics_sample_interval
,
:metrics_timeout
,
:performance_bar_allowed_group_id
,
:performance_bar_enabled
,
:recaptcha_enabled
,
:recaptcha_private_key
,
:recaptcha_site_key
,
...
...
This diff is collapsed.
Click to expand it.
app/models/application_setting.rb
View file @
040eeb10
...
...
@@ -234,6 +234,7 @@ class ApplicationSetting < ActiveRecord::Base
koding_url:
nil
,
max_artifacts_size:
Settings
.
artifacts
[
'max_size'
],
max_attachment_size:
Settings
.
gitlab
[
'max_attachment_size'
],
performance_bar_allowed_group_id:
nil
,
plantuml_enabled:
false
,
plantuml_url:
nil
,
recaptcha_enabled:
false
,
...
...
@@ -336,6 +337,42 @@ class ApplicationSetting < ActiveRecord::Base
super
(
levels
.
map
{
|
level
|
Gitlab
::
VisibilityLevel
.
level_value
(
level
)
})
end
def
performance_bar_allowed_group_id
=
(
group_full_path
)
group
=
Group
.
find_by_full_path
(
group_full_path
)
return
unless
group
&&
group
.
id
!=
performance_bar_allowed_group_id
super
(
group
.
id
)
Gitlab
::
PerformanceBar
.
expire_allowed_user_ids_cache
end
def
performance_bar_allowed_group
Group
.
find_by_id
(
performance_bar_allowed_group_id
)
end
# Return true is the Performance Bar is available globally or for the
# `performance_team` feature group
def
performance_bar_enabled?
feature
=
Feature
.
get
(
:performance_bar
)
feature
.
on?
||
feature
.
groups_value
.
include?
(
'performance_team'
)
end
# - If `enable` is true, enable the `performance_bar` feature for the
# `performance_team` feature group
# - If `enable` is false, disable the `performance_bar` feature globally
def
performance_bar_enabled
=
(
enable
)
feature
=
Feature
.
get
(
:performance_bar
)
performance_bar_on
=
performance_bar_enabled?
if
enable
&&
!
performance_bar_on
feature
.
enable_group
(
:performance_team
)
Gitlab
::
PerformanceBar
.
expire_allowed_user_ids_cache
elsif
!
enable
&&
performance_bar_on
feature
.
disable
Gitlab
::
PerformanceBar
.
expire_allowed_user_ids_cache
end
end
# Choose one of the available repository storage options. Currently all have
# equal weighting.
def
pick_repository_storage
...
...
This diff is collapsed.
Click to expand it.
app/views/admin/application_settings/_form.html.haml
View file @
040eeb10
...
...
@@ -332,6 +332,22 @@
%strong
.cred
WARNING:
Environment variable `prometheus_multiproc_dir` does not exist or is not pointing to a valid directory.
%fieldset
%legend
Profiling - Performance Bar
%p
Enable the Performance Bar for a given group.
=
link_to
icon
(
'question-circle'
),
help_page_path
(
'administration/monitoring/performance/performance_bar'
)
.form-group
.col-sm-offset-2.col-sm-10
.checkbox
=
f
.
label
:performance_bar_enabled
do
=
f
.
check_box
:performance_bar_enabled
Enable the Performance Bar
.form-group
=
f
.
label
:performance_bar_allowed_group_id
,
'Allowed group'
,
class:
'control-label col-sm-2'
.col-sm-10
=
f
.
text_field
:performance_bar_allowed_group_id
,
class:
'form-control'
,
placeholder:
'my-org/my-group'
,
value:
@application_setting
.
performance_bar_allowed_group
&
.
full_path
%fieldset
%legend
Background Jobs
%p
...
...
This diff is collapsed.
Click to expand it.
config/gitlab.yml.example
View file @
040eeb10
...
...
@@ -459,11 +459,6 @@ production: &base
# is the normal way to deploy Gitaly.
token:
# Performance bar settings
performance_bar:
# This setting controls what group can see the performance bar.
# allowed_group: my-org/performance-group
#
# 4. Advanced settings
# ==========================
...
...
This diff is collapsed.
Click to expand it.
config/initializers/1_settings.rb
View file @
040eeb10
...
...
@@ -485,12 +485,6 @@ Settings.rack_attack.git_basic_auth['bantime'] ||= 1.hour
Settings
[
'gitaly'
]
||=
Settingslogic
.
new
({})
Settings
.
gitaly
[
'enabled'
]
=
true
if
Settings
.
gitaly
[
'enabled'
].
nil?
#
# Performance bar
#
Settings
[
'performance_bar'
]
||=
Settingslogic
.
new
({})
Settings
.
performance_bar
[
'allowed_group'
]
||=
nil
#
# Webpack settings
#
...
...
This diff is collapsed.
Click to expand it.
db/migrate/20170706151212_add_performance_bar_allowed_group_id_to_application_settings.rb
0 → 100644
View file @
040eeb10
class
AddPerformanceBarAllowedGroupIdToApplicationSettings
<
ActiveRecord
::
Migration
include
Gitlab
::
Database
::
MigrationHelpers
DOWNTIME
=
false
def
change
add_column
:application_settings
,
:performance_bar_allowed_group_id
,
:integer
end
end
This diff is collapsed.
Click to expand it.
db/schema.rb
View file @
040eeb10
...
...
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord
::
Schema
.
define
(
version:
2017070
3102400
)
do
ActiveRecord
::
Schema
.
define
(
version:
2017070
6151212
)
do
# These are extensions that must be enabled in order to support this database
enable_extension
"plpgsql"
...
...
@@ -126,6 +126,7 @@ ActiveRecord::Schema.define(version: 20170703102400) do
t
.
boolean
"prometheus_metrics_enabled"
,
default:
false
,
null:
false
t
.
boolean
"help_page_hide_commercial_content"
,
default:
false
t
.
string
"help_page_support_url"
t
.
integer
"performance_bar_allowed_group_id"
end
create_table
"audit_events"
,
force: :cascade
do
|
t
|
...
...
This diff is collapsed.
Click to expand it.
doc/administration/monitoring/performance/img/performance_bar_configuration_settings.png
0 → 100644
View file @
040eeb10
19.9 KB
This diff is collapsed.
Click to expand it.
doc/administration/monitoring/performance/performance_bar.md
View file @
040eeb10
# Performance Bar
>**Note:**
Available since GitLab 9.4. For installations from source you'll have to
configure it yourself.
A Performance Bar can be displayed, to dig into the performance of a page. When
activated, it looks as follows:
...
...
@@ -21,38 +17,44 @@ It allows you to:
-
profile the code used to generate the page, line by line

## Enable the Performance Bar
## Enable the Performance Bar via the Admin panel
GitLab Performance Bar is disabled by default. To enable it for a given group,
navigate to the Admin area in
**Settings > Profiling - Performance Bar**
(
`/admin/application_settings`
).
The only required setting you need to set is the full path of the group that
will be allowed to display the Performance Bar.
Make sure _Enable the Performance Bar_ is checked and hit
**Save**
to save the changes.
---

By default, the Performance Bar is disabled. You can enable it for a group
and/or users. Note that it's possible to enable it for a group and for
individual users at the same time.
---
1.
Edit
`/etc/gitlab/gitlab.rb`
1.
Find the following line, and set it to the group's
**full path**
that should
be allowed to use the Performance Bar:
## Enable the Performance Bar via the API
```ruby
gitlab_rails['performance_bar_allowed_group'] = 'your-org/your-performance-group'
```
Under the hood, the Performance Bar activation is done via the
`performance_bar`
[
Feature Flag
](
../../../development/features_flags.md
)
.
1.
Save the file and
[
reconfigure GitLab
][
reconfigure
]
for the changes to
take effect
1.
The Performance Bar can then be enabled via the
[
Features API
](
../../../api/features.md#set-or-create-a-feature
)
(
see
below).
That means you can also enable or disable it via the
[
Features API
](
../../../api/features.md#set-or-create-a-feature
)
.
###
Enable f
or the `performance_team` feature group
###
F
or the `performance_team` feature group
The
`performance_team`
feature group maps to the group specified
by the
`performance_bar_allowed_group`
setting you've set in the previous step
.
The
`performance_team`
feature group maps to the group specified
in your
[
Admin
area
](
#enable-the-performance-bar-via-the-admin-panel
)
.
```
curl --data "feature_group=performance_team" --data "value=true" --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/features/performance_bar
```
###
Enable f
or specific users
###
F
or specific users
It's
possible to enable the Performance Bar for specific users in addition to a
group, or even instead of a group:
It's
also possible to enable the Performance Bar for specific users in addition
to a
group, or even instead of a group:
```
curl --data "user=my_username" --data "value=true" --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/features/performance_bar
...
...
This diff is collapsed.
Click to expand it.
lib/gitlab/performance_bar.rb
View file @
040eeb10
module
Gitlab
module
PerformanceBar
include
Gitlab
::
CurrentSettings
ALLOWED_USER_IDS_KEY
=
'performance_bar_allowed_user_ids'
.
freeze
# The time (in seconds) after which a set of allowed user IDs is expired
# automatically.
ALLOWED_USER_IDS_TIME_TO_LIVE
=
10
.
minutes
def
self
.
enabled?
(
current_user
=
nil
)
Feature
.
enabled?
(
:
gitlab_
performance_bar
,
current_user
)
Feature
.
enabled?
(
:performance_bar
,
current_user
)
end
def
self
.
allowed_user?
(
user
)
return
false
unless
allowed_group_
name
return
false
unless
allowed_group_
id
allowed_user_ids
.
include?
(
user
.
id
)
end
def
self
.
allowed_group_
name
Gitlab
.
config
.
performance_bar
.
allowed_group
def
self
.
allowed_group_
id
current_application_settings
.
performance_bar_allowed_group_id
end
def
self
.
allowed_user_ids
Rails
.
cache
.
fetch
(
cache_key
,
expires_in:
ALLOWED_USER_IDS_TIME_TO_LIVE
)
do
group
=
Group
.
find_by_
full_path
(
allowed_group_name
)
Rails
.
cache
.
fetch
(
ALLOWED_USER_IDS_KEY
,
expires_in:
ALLOWED_USER_IDS_TIME_TO_LIVE
)
do
group
=
Group
.
find_by_
id
(
allowed_group_id
)
if
group
GroupMembersFinder
.
new
(
group
).
execute
.
pluck
(
:user_id
)
...
...
@@ -31,8 +33,8 @@ module Gitlab
end
end
def
self
.
cache_key
"
#{
ALLOWED_USER_IDS_KEY
}
:
#{
allowed_group_name
}
"
def
self
.
expire_allowed_user_ids_cache
Rails
.
cache
.
delete
(
ALLOWED_USER_IDS_KEY
)
end
end
end
This diff is collapsed.
Click to expand it.
spec/features/user_can_display_performance_bar_spec.rb
View file @
040eeb10
...
...
@@ -38,17 +38,17 @@ describe 'User can display performance bar', :js do
visit
root_path
end
context
'when the
gitlab_
performance_bar feature is disabled'
do
context
'when the performance_bar feature is disabled'
do
before
do
Feature
.
disable
(
'gitlab_performance_bar'
)
Feature
.
disable
(
:performance_bar
)
end
it_behaves_like
'performance bar is disabled'
end
context
'when the
gitlab_
performance_bar feature is enabled'
do
context
'when the performance_bar feature is enabled'
do
before
do
Feature
.
enable
(
'gitlab_performance_bar'
)
Feature
.
enable
(
:performance_bar
)
end
it_behaves_like
'performance bar is disabled'
...
...
@@ -62,17 +62,17 @@ describe 'User can display performance bar', :js do
visit
root_path
end
context
'when the
gitlab_
performance_bar feature is disabled'
do
context
'when the performance_bar feature is disabled'
do
before
do
Feature
.
disable
(
'gitlab_performance_bar'
)
Feature
.
disable
(
:performance_bar
)
end
it_behaves_like
'performance bar is disabled'
end
context
'when the
gitlab_
performance_bar feature is enabled'
do
context
'when the performance_bar feature is enabled'
do
before
do
Feature
.
enable
(
'gitlab_performance_bar'
)
Feature
.
enable
(
:performance_bar
)
end
it_behaves_like
'performance bar is enabled'
...
...
This diff is collapsed.
Click to expand it.
spec/lib/gitlab/performance_bar_spec.rb
View file @
040eeb10
...
...
@@ -10,7 +10,7 @@ describe Gitlab::PerformanceBar do
actor
=
double
(
'actor'
)
expect
(
Feature
).
to
receive
(
:enabled?
)
.
with
(
:
gitlab_
performance_bar
,
actor
).
and_return
(
false
)
.
with
(
:performance_bar
,
actor
).
and_return
(
false
)
expect
(
described_class
.
enabled?
(
actor
)).
to
be_falsy
end
...
...
@@ -19,7 +19,7 @@ describe Gitlab::PerformanceBar do
actor
=
double
(
'actor'
)
expect
(
Feature
).
to
receive
(
:enabled?
)
.
with
(
:
gitlab_
performance_bar
,
actor
).
and_return
(
true
)
.
with
(
:performance_bar
,
actor
).
and_return
(
true
)
expect
(
described_class
.
enabled?
(
actor
)).
to
be_truthy
end
...
...
This diff is collapsed.
Click to expand it.
spec/models/application_setting_spec.rb
View file @
040eeb10
...
...
@@ -214,6 +214,151 @@ describe ApplicationSetting, models: true do
end
end
describe
'performance bar settings'
do
before
do
Flipper
.
unregister_groups
Flipper
.
register
(
:performance_team
)
end
after
do
Flipper
.
unregister_groups
end
describe
'performance_bar_allowed_group_id='
do
it
'does not persist an invalid group path'
do
setting
.
performance_bar_allowed_group_id
=
'foo'
expect
(
setting
.
performance_bar_allowed_group_id
).
to
be_nil
end
context
'with a path to an existing group'
do
let
(
:group
)
{
create
(
:group
)
}
it
'persists a valid group path and clears allowed user IDs cache'
do
expect
(
Gitlab
::
PerformanceBar
).
to
receive
(
:expire_allowed_user_ids_cache
)
setting
.
performance_bar_allowed_group_id
=
group
.
full_path
expect
(
setting
.
performance_bar_allowed_group_id
).
to
eq
(
group
.
id
)
end
context
'when the given path is the same'
do
before
do
setting
.
performance_bar_allowed_group_id
=
group
.
full_path
end
it
'clears the cached allowed user IDs'
do
expect
(
Gitlab
::
PerformanceBar
).
not_to
receive
(
:expire_allowed_user_ids_cache
)
setting
.
performance_bar_allowed_group_id
=
group
.
full_path
end
end
end
end
describe
'performance_bar_allowed_group'
do
context
'with no performance_bar_allowed_group_id saved'
do
it
'returns nil'
do
expect
(
setting
.
performance_bar_allowed_group
).
to
be_nil
end
end
context
'with a performance_bar_allowed_group_id saved'
do
let
(
:group
)
{
create
(
:group
)
}
before
do
setting
.
performance_bar_allowed_group_id
=
group
.
full_path
end
it
'returns the group'
do
expect
(
setting
.
performance_bar_allowed_group
).
to
eq
(
group
)
end
end
end
describe
'performance_bar_enabled?'
do
context
'with the Performance Bar is enabled globally'
do
before
do
Feature
.
enable
(
:performance_bar
)
end
it
'returns true'
do
expect
(
setting
).
to
be_performance_bar_enabled
end
end
context
'with the Performance Bar is enabled for the performance_team group'
do
before
do
Feature
.
enable_group
(
:performance_bar
,
:performance_team
)
end
it
'returns true'
do
expect
(
setting
).
to
be_performance_bar_enabled
end
end
context
'with the Performance Bar is enabled for a specific user'
do
before
do
Feature
.
enable
(
:performance_team
,
create
(
:user
))
end
it
'returns false'
do
expect
(
setting
).
not_to
be_performance_bar_enabled
end
end
end
describe
'performance_bar_enabled='
do
context
'when the performance bar is enabled'
do
before
do
Feature
.
enable
(
:performance_bar
)
end
context
'when passing true'
do
it
'does not clear allowed user IDs cache'
do
expect
(
Gitlab
::
PerformanceBar
).
not_to
receive
(
:expire_allowed_user_ids_cache
)
setting
.
performance_bar_enabled
=
true
expect
(
setting
).
to
be_performance_bar_enabled
end
end
context
'when passing false'
do
it
'disables the performance bar and clears allowed user IDs cache'
do
expect
(
Gitlab
::
PerformanceBar
).
to
receive
(
:expire_allowed_user_ids_cache
)
setting
.
performance_bar_enabled
=
false
expect
(
setting
).
not_to
be_performance_bar_enabled
end
end
end
context
'when the performance bar is disabled'
do
before
do
Feature
.
disable
(
:performance_bar
)
end
context
'when passing true'
do
it
'enables the performance bar and clears allowed user IDs cache'
do
expect
(
Gitlab
::
PerformanceBar
).
to
receive
(
:expire_allowed_user_ids_cache
)
setting
.
performance_bar_enabled
=
true
expect
(
setting
).
to
be_performance_bar_enabled
end
end
context
'when passing false'
do
it
'does not clear allowed user IDs cache'
do
expect
(
Gitlab
::
PerformanceBar
).
not_to
receive
(
:expire_allowed_user_ids_cache
)
setting
.
performance_bar_enabled
=
false
expect
(
setting
).
not_to
be_performance_bar_enabled
end
end
end
end
end
describe
'usage ping settings'
do
context
'when the usage ping is disabled in gitlab.yml'
do
before
do
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment