Improve Features API and its docs and add a Changelog item
Signed-off-by: Rémy Coutable <remy@rymai.me>
This commit is contained in:
parent
00ac76cc4c
commit
e5a7d1da8c
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Allow to enable the performance bar per user or Feature group
|
||||
merge_request: 12362
|
||||
author:
|
||||
|
|
@ -1,7 +1,8 @@
|
|||
# Performance Bar
|
||||
|
||||
>**Note:**
|
||||
Available since GitLab 9.4.
|
||||
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:
|
||||
|
|
@ -22,8 +23,9 @@ It allows you to:
|
|||
|
||||
## Enable the Performance Bar
|
||||
|
||||
By default, the Performance Bar is disabled. You can enable it either for a
|
||||
given feature group or user.
|
||||
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
|
||||
|
|
@ -47,7 +49,10 @@ The `performance_team` feature group maps to the group specified by the
|
|||
curl --data "feature_group=performance_team" --data "value=true" --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/features/performance_bar
|
||||
```
|
||||
|
||||
### Enable for a specific user
|
||||
### Enable for specific users
|
||||
|
||||
It's 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
|
||||
|
|
|
|||
|
|
@ -61,8 +61,8 @@ POST /features/:name
|
|||
| `feature_group` | string | no | A Feature group name |
|
||||
| `user` | string | no | A GitLab username |
|
||||
|
||||
Note that `feature_group` and `user` are mutually exclusive, with
|
||||
`feature_group` taking priority.
|
||||
Note that you can enable or disable a feature for both a `feature_group` and a
|
||||
`user` with a single API call.
|
||||
|
||||
```bash
|
||||
curl --data "value=30" --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/features/new_library
|
||||
|
|
|
|||
|
|
@ -13,7 +13,8 @@ During runtime you can set the values for the gates via the
|
|||
Starting from GitLab 9.4 we support feature groups via
|
||||
[Flipper groups](https://github.com/jnunemaker/flipper/blob/v0.10.2/docs/Gates.md#2-group).
|
||||
|
||||
Feature groups must be defined statically in `lib/feature.rb` (in the `.register_feature_groups` method), but their implementation can obviously be
|
||||
Feature groups must be defined statically in `lib/feature.rb` (in the
|
||||
`.register_feature_groups` method), but their implementation can obviously be
|
||||
dynamic (querying the DB etc.). You can see how the `performance_team` feature
|
||||
group for a concrete example.
|
||||
|
||||
|
|
|
|||
|
|
@ -14,14 +14,12 @@ module API
|
|||
end
|
||||
end
|
||||
|
||||
def gate_target(params)
|
||||
if params[:feature_group]
|
||||
Feature.group(params[:feature_group])
|
||||
elsif params[:user]
|
||||
User.find_by_username(params[:user])
|
||||
else
|
||||
gate_value(params)
|
||||
end
|
||||
def gate_targets(params)
|
||||
targets = []
|
||||
targets << Feature.group(params[:feature_group]) if params[:feature_group]
|
||||
targets << User.find_by_username(params[:user]) if params[:user]
|
||||
|
||||
targets
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -42,18 +40,25 @@ module API
|
|||
requires :value, type: String, desc: '`true` or `false` to enable/disable, an integer for percentage of time'
|
||||
optional :feature_group, type: String, desc: 'A Feature group name'
|
||||
optional :user, type: String, desc: 'A GitLab username'
|
||||
mutually_exclusive :feature_group, :user
|
||||
end
|
||||
post ':name' do
|
||||
feature = Feature.get(params[:name])
|
||||
target = gate_target(params)
|
||||
targets = gate_targets(params)
|
||||
value = gate_value(params)
|
||||
|
||||
case value
|
||||
when true
|
||||
feature.enable(target)
|
||||
if targets.present?
|
||||
targets.each { |target| feature.enable(target) }
|
||||
else
|
||||
feature.enable
|
||||
end
|
||||
when false
|
||||
feature.disable(target)
|
||||
if targets.present?
|
||||
targets.each { |target| feature.disable(target) }
|
||||
else
|
||||
feature.disable
|
||||
end
|
||||
else
|
||||
feature.enable_percentage_of_time(value)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -113,6 +113,20 @@ describe API::Features do
|
|||
{ 'key' => 'actors', 'value' => ["User:#{user.id}"] }
|
||||
])
|
||||
end
|
||||
|
||||
it 'creates an enabled feature for the given user and feature group when passed user=username and feature_group=perf_team' do
|
||||
post api("/features/#{feature_name}", admin), value: 'true', user: user.username, feature_group: 'perf_team'
|
||||
|
||||
expect(response).to have_http_status(201)
|
||||
expect(json_response).to eq(
|
||||
'name' => 'my_feature',
|
||||
'state' => 'conditional',
|
||||
'gates' => [
|
||||
{ 'key' => 'boolean', 'value' => false },
|
||||
{ 'key' => 'groups', 'value' => ['perf_team'] },
|
||||
{ 'key' => 'actors', 'value' => ["User:#{user.id}"] }
|
||||
])
|
||||
end
|
||||
end
|
||||
|
||||
it 'creates a feature with the given percentage if passed an integer' do
|
||||
|
|
|
|||
Loading…
Reference in New Issue