Commit d020e36b authored by GitLab Bot's avatar GitLab Bot

Automatic merge of gitlab-org/gitlab-ce master

parents 025d3c7f b7398bc1
...@@ -307,7 +307,8 @@ gem 'gettext', '~> 3.2.2', require: false, group: :development ...@@ -307,7 +307,8 @@ gem 'gettext', '~> 3.2.2', require: false, group: :development
gem 'batch-loader', '~> 1.4.0' gem 'batch-loader', '~> 1.4.0'
# Perf bar # Perf bar
gem 'peek', '~> 1.0.1' # https://gitlab.com/gitlab-org/gitlab-ee/issues/13996
gem 'gitlab-peek', '~> 0.0.1', require: 'peek'
# Snowplow events tracking # Snowplow events tracking
gem 'snowplow-tracker', '~> 0.6.1' gem 'snowplow-tracker', '~> 0.6.1'
......
...@@ -157,8 +157,6 @@ GEM ...@@ -157,8 +157,6 @@ GEM
adamantium (~> 0.2.0) adamantium (~> 0.2.0)
equalizer (~> 0.0.9) equalizer (~> 0.0.9)
concurrent-ruby (1.1.5) concurrent-ruby (1.1.5)
concurrent-ruby-ext (1.1.5)
concurrent-ruby (= 1.1.5)
connection_pool (2.2.2) connection_pool (2.2.2)
contracts (0.11.0) contracts (0.11.0)
crack (0.4.3) crack (0.4.3)
...@@ -346,6 +344,8 @@ GEM ...@@ -346,6 +344,8 @@ GEM
redis (> 3.0.0, < 5.0.0) redis (> 3.0.0, < 5.0.0)
gitlab-license (1.0.0) gitlab-license (1.0.0)
gitlab-markup (1.7.0) gitlab-markup (1.7.0)
gitlab-peek (0.0.1)
railties (>= 4.0.0)
gitlab-sidekiq-fetcher (0.5.1) gitlab-sidekiq-fetcher (0.5.1)
sidekiq (~> 5) sidekiq (~> 5)
gitlab-styles (2.8.0) gitlab-styles (2.8.0)
...@@ -665,10 +665,6 @@ GEM ...@@ -665,10 +665,6 @@ GEM
parser (2.6.3.0) parser (2.6.3.0)
ast (~> 2.4.0) ast (~> 2.4.0)
parslet (1.8.2) parslet (1.8.2)
peek (1.0.1)
concurrent-ruby (>= 0.9.0)
concurrent-ruby-ext (>= 0.9.0)
railties (>= 4.0.0)
pg (1.1.4) pg (1.1.4)
po_to_json (1.0.1) po_to_json (1.0.1)
json (>= 1.6.0) json (>= 1.6.0)
...@@ -1136,6 +1132,7 @@ DEPENDENCIES ...@@ -1136,6 +1132,7 @@ DEPENDENCIES
gitlab-labkit (~> 0.5) gitlab-labkit (~> 0.5)
gitlab-license (~> 1.0) gitlab-license (~> 1.0)
gitlab-markup (~> 1.7.0) gitlab-markup (~> 1.7.0)
gitlab-peek (~> 0.0.1)
gitlab-sidekiq-fetcher (= 0.5.1) gitlab-sidekiq-fetcher (= 0.5.1)
gitlab-styles (~> 2.7) gitlab-styles (~> 2.7)
gitlab_omniauth-ldap (~> 2.1.1) gitlab_omniauth-ldap (~> 2.1.1)
...@@ -1209,7 +1206,6 @@ DEPENDENCIES ...@@ -1209,7 +1206,6 @@ DEPENDENCIES
omniauth_crowd (~> 2.2.0) omniauth_crowd (~> 2.2.0)
omniauth_openid_connect (~> 0.3.1) omniauth_openid_connect (~> 0.3.1)
org-ruby (~> 0.9.12) org-ruby (~> 0.9.12)
peek (~> 1.0.1)
pg (~> 1.1) pg (~> 1.1)
premailer-rails (~> 1.9.7) premailer-rails (~> 1.9.7)
prometheus-client-mmap (~> 0.9.8) prometheus-client-mmap (~> 0.9.8)
......
...@@ -3,15 +3,25 @@ ...@@ -3,15 +3,25 @@
module WithPerformanceBar module WithPerformanceBar
extend ActiveSupport::Concern extend ActiveSupport::Concern
def peek_enabled? included do
return false unless Gitlab::PerformanceBar.enabled?(current_user) before_action :set_peek_enabled_for_current_request
end
private
def set_peek_enabled_for_current_request
Gitlab::SafeRequestStore.fetch(:peek_enabled) { cookie_or_default_value } Gitlab::SafeRequestStore.fetch(:peek_enabled) { cookie_or_default_value }
end end
private # Needed for Peek's routing to work;
# Peek::ResultsController#restrict_non_access calls this method.
def peek_enabled?
Gitlab::PerformanceBar.enabled_for_request?
end
def cookie_or_default_value def cookie_or_default_value
return false unless Gitlab::PerformanceBar.enabled_for_user?(current_user)
if cookies[:perf_bar_enabled].present? if cookies[:perf_bar_enabled].present?
cookies[:perf_bar_enabled] == 'true' cookies[:perf_bar_enabled] == 'true'
else else
......
# frozen_string_literal: true # frozen_string_literal: true
module PerformanceBarHelper module PerformanceBarHelper
# This is a hack since using `alias_method :performance_bar_enabled?, :peek_enabled?`
# in WithPerformanceBar breaks tests (but works in the browser).
def performance_bar_enabled? def performance_bar_enabled?
peek_enabled? Gitlab::PerformanceBar.enabled_for_request?
end end
end end
!!! 5 !!! 5
%html.devise-layout-html{ class: system_message_class } %html.devise-layout-html{ class: system_message_class }
= render "layouts/head" = render "layouts/head"
%body.ui-indigo.login-page.application.navless{ data: { page: body_data_page, qa_selector: 'login_page' } } %body.ui-indigo.login-page.application.navless{ class: "#{client_class_list}", data: { page: body_data_page, qa_selector: 'login_page' } }
= header_message = header_message
= render "layouts/init_client_detection_flags"
.page-wrap .page-wrap
= render "layouts/header/empty" = render "layouts/header/empty"
.login-page-broadcast .login-page-broadcast
......
!!! 5 !!! 5
%html{ lang: "en", class: system_message_class } %html{ lang: "en", class: system_message_class }
= render "layouts/head" = render "layouts/head"
%body.ui-indigo.login-page.application.navless %body.ui-indigo.login-page.application.navless{ class: "#{client_class_list}" }
= header_message = header_message
= render "layouts/init_client_detection_flags"
= render "layouts/header/empty" = render "layouts/header/empty"
= render "layouts/broadcast" = render "layouts/broadcast"
.container.navless-container .container.navless-container
......
- return unless peek_enabled? - return unless performance_bar_enabled?
#js-peek{ data: { env: Peek.env, #js-peek{ data: { env: Peek.env,
request_id: Peek.request_id, request_id: peek_request_id,
peek_url: "#{peek_routes_path}/results" }, peek_url: "#{peek_routes_path}/results" },
class: Peek.env } class: Peek.env }
---
title: Fix performance bar on Puma
merge_request: 32213
author:
type: fixed
---
title: Update Mermaid to v8.2.6
merge_request: 32502
author:
type: fixed
...@@ -6,7 +6,7 @@ Depending on which version of Geo you are updating to/from, there may be differe ...@@ -6,7 +6,7 @@ Depending on which version of Geo you are updating to/from, there may be differe
NOTE: **Note:** These general update steps are not intended for [high-availability deployments](https://docs.gitlab.com/omnibus/update/README.html#multi-node--ha-deployment), and will cause downtime. If you want to avoid downtime, consider using [zero downtime updates](https://docs.gitlab.com/omnibus/update/README.html#zero-downtime-updates). NOTE: **Note:** These general update steps are not intended for [high-availability deployments](https://docs.gitlab.com/omnibus/update/README.html#multi-node--ha-deployment), and will cause downtime. If you want to avoid downtime, consider using [zero downtime updates](https://docs.gitlab.com/omnibus/update/README.html#zero-downtime-updates).
To update the Geo nodes when a new GitLab version is released, update **primary** To update the Geo nodes when a new GitLab version is released, update **primary**
and all **secondary** nodes: and all **secondary** nodes:
1. Log into the **primary** node. 1. Log into the **primary** node.
......
...@@ -22,7 +22,8 @@ See all the related issues linked from this [issue's description](https://gitlab ...@@ -22,7 +22,8 @@ See all the related issues linked from this [issue's description](https://gitlab
for more information. for more information.
Note: **Note:** Note: **Note:**
Using this feature requires **2 IP addresses** to be configured to the machine. Using this feature requires two separate IP addresses, one for the GitLab domain
and one GitLab Pages domain.
## Requirements ## Requirements
......
...@@ -157,7 +157,7 @@ module Gitlab ...@@ -157,7 +157,7 @@ module Gitlab
# Keep track, separately, for the performance bar # Keep track, separately, for the performance bar
self.query_time += duration self.query_time += duration
if peek_enabled? if Gitlab::PerformanceBar.enabled_for_request?
add_call_details(feature: "#{service}##{rpc}", duration: duration, request: request_hash, rpc: rpc, add_call_details(feature: "#{service}##{rpc}", duration: duration, request: request_hash, rpc: rpc,
backtrace: Gitlab::Profiler.clean_backtrace(caller)) backtrace: Gitlab::Profiler.clean_backtrace(caller))
end end
...@@ -335,17 +335,13 @@ module Gitlab ...@@ -335,17 +335,13 @@ module Gitlab
Gitlab::SafeRequestStore["gitaly_call_permitted"] = 0 Gitlab::SafeRequestStore["gitaly_call_permitted"] = 0
end end
def self.peek_enabled?
Gitlab::SafeRequestStore[:peek_enabled]
end
def self.add_call_details(details) def self.add_call_details(details)
Gitlab::SafeRequestStore['gitaly_call_details'] ||= [] Gitlab::SafeRequestStore['gitaly_call_details'] ||= []
Gitlab::SafeRequestStore['gitaly_call_details'] << details Gitlab::SafeRequestStore['gitaly_call_details'] << details
end end
def self.list_call_details def self.list_call_details
return [] unless peek_enabled? return [] unless Gitlab::PerformanceBar.enabled_for_request?
Gitlab::SafeRequestStore['gitaly_call_details'] || [] Gitlab::SafeRequestStore['gitaly_call_details'] || []
end end
......
...@@ -6,7 +6,11 @@ module Gitlab ...@@ -6,7 +6,11 @@ module Gitlab
EXPIRY_TIME_L1_CACHE = 1.minute EXPIRY_TIME_L1_CACHE = 1.minute
EXPIRY_TIME_L2_CACHE = 5.minutes EXPIRY_TIME_L2_CACHE = 5.minutes
def self.enabled?(user = nil) def self.enabled_for_request?
Gitlab::SafeRequestStore[:peek_enabled]
end
def self.enabled_for_user?(user = nil)
return true if Rails.env.development? return true if Rails.env.development?
return true if user&.admin? return true if user&.admin?
return false unless user && allowed_group_id return false unless user && allowed_group_id
......
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
module Gitlab module Gitlab
module PerformanceBar module PerformanceBar
module RedisAdapterWhenPeekEnabled module RedisAdapterWhenPeekEnabled
def save def save(request_id)
super unless ::Peek.request_id.blank? super if ::Gitlab::PerformanceBar.enabled_for_request? && request_id.present?
end end
end end
end end
......
...@@ -27,19 +27,15 @@ module Gitlab ...@@ -27,19 +27,15 @@ module Gitlab
SafeRequestStore.active? SafeRequestStore.active?
end end
def self.peek_enabled?
SafeRequestStore[:peek_enabled]
end
def self.add_call_details(details) def self.add_call_details(details)
return unless peek_enabled? return unless Gitlab::PerformanceBar.enabled_for_request?
Gitlab::SafeRequestStore[:rugged_call_details] ||= [] Gitlab::SafeRequestStore[:rugged_call_details] ||= []
Gitlab::SafeRequestStore[:rugged_call_details] << details Gitlab::SafeRequestStore[:rugged_call_details] << details
end end
def self.list_call_details def self.list_call_details
return [] unless peek_enabled? return [] unless Gitlab::PerformanceBar.enabled_for_request?
Gitlab::SafeRequestStore[:rugged_call_details] || [] Gitlab::SafeRequestStore[:rugged_call_details] || []
end end
......
...@@ -27,7 +27,7 @@ module Peek ...@@ -27,7 +27,7 @@ module Peek
super super
subscribe('sql.active_record') do |_, start, finish, _, data| subscribe('sql.active_record') do |_, start, finish, _, data|
if Gitlab::SafeRequestStore.store[:peek_enabled] if Gitlab::PerformanceBar.enabled_for_request?
unless data[:cached] unless data[:cached]
detail_store << { detail_store << {
duration: finish - start, duration: finish - start,
......
...@@ -16,7 +16,7 @@ module Gitlab ...@@ -16,7 +16,7 @@ module Gitlab
private private
def add_call_details(duration, args) def add_call_details(duration, args)
return unless peek_enabled? return unless Gitlab::PerformanceBar.enabled_for_request?
# redis-rb passes an array (e.g. [:get, key]) # redis-rb passes an array (e.g. [:get, key])
return unless args.length == 1 return unless args.length == 1
...@@ -27,10 +27,6 @@ module Gitlab ...@@ -27,10 +27,6 @@ module Gitlab
} }
end end
def peek_enabled?
Gitlab::SafeRequestStore.store[:peek_enabled]
end
def detail_store def detail_store
::Gitlab::SafeRequestStore['redis_call_details'] ||= [] ::Gitlab::SafeRequestStore['redis_call_details'] ||= []
end end
......
...@@ -624,6 +624,14 @@ describe 'Login' do ...@@ -624,6 +624,14 @@ describe 'Login' do
end end
end end
describe 'Client helper classes and flags' do
it 'adds client browser and platform classes to page body' do
visit root_path
expect(find('body')[:class]).to include('gl-browser-generic')
expect(find('body')[:class]).to include('gl-platform-other')
end
end
context 'when terms are enforced' do context 'when terms are enforced' do
let(:user) { create(:user) } let(:user) { create(:user) }
......
...@@ -35,7 +35,7 @@ describe Gitlab::Git::RuggedImpl::UseRugged, :seed_helper do ...@@ -35,7 +35,7 @@ describe Gitlab::Git::RuggedImpl::UseRugged, :seed_helper do
let(:args) { ['refs/heads/master', 1] } let(:args) { ['refs/heads/master', 1] }
before do before do
allow(Gitlab::RuggedInstrumentation).to receive(:peek_enabled?).and_return(true) allow(Gitlab::PerformanceBar).to receive(:enabled_for_request?).and_return(true)
end end
it 'instruments Rugged call' do it 'instruments Rugged call' do
......
...@@ -6,14 +6,14 @@ describe Gitlab::PerformanceBar do ...@@ -6,14 +6,14 @@ describe Gitlab::PerformanceBar do
shared_examples 'allowed user IDs are cached' do shared_examples 'allowed user IDs are cached' do
before do before do
# Warm the caches # Warm the caches
described_class.enabled?(user) described_class.enabled_for_user?(user)
end end
it 'caches the allowed user IDs in cache', :use_clean_rails_memory_store_caching do it 'caches the allowed user IDs in cache', :use_clean_rails_memory_store_caching do
expect do expect do
expect(described_class.l1_cache_backend).to receive(:fetch).and_call_original expect(described_class.l1_cache_backend).to receive(:fetch).and_call_original
expect(described_class.l2_cache_backend).not_to receive(:fetch) expect(described_class.l2_cache_backend).not_to receive(:fetch)
expect(described_class.enabled?(user)).to be_truthy expect(described_class.enabled_for_user?(user)).to be_truthy
end.not_to exceed_query_limit(0) end.not_to exceed_query_limit(0)
end end
...@@ -22,7 +22,7 @@ describe Gitlab::PerformanceBar do ...@@ -22,7 +22,7 @@ describe Gitlab::PerformanceBar do
expect do expect do
expect(described_class.l1_cache_backend).to receive(:fetch).and_call_original expect(described_class.l1_cache_backend).to receive(:fetch).and_call_original
expect(described_class.l2_cache_backend).to receive(:fetch).and_call_original expect(described_class.l2_cache_backend).to receive(:fetch).and_call_original
expect(described_class.enabled?(user)).to be_truthy expect(described_class.enabled_for_user?(user)).to be_truthy
end.not_to exceed_query_limit(0) end.not_to exceed_query_limit(0)
end end
end end
...@@ -32,7 +32,7 @@ describe Gitlab::PerformanceBar do ...@@ -32,7 +32,7 @@ describe Gitlab::PerformanceBar do
expect do expect do
expect(described_class.l1_cache_backend).to receive(:fetch).and_call_original expect(described_class.l1_cache_backend).to receive(:fetch).and_call_original
expect(described_class.l2_cache_backend).to receive(:fetch).and_call_original expect(described_class.l2_cache_backend).to receive(:fetch).and_call_original
expect(described_class.enabled?(user)).to be_truthy expect(described_class.enabled_for_user?(user)).to be_truthy
end.not_to exceed_query_limit(2) end.not_to exceed_query_limit(2)
end end
end end
...@@ -41,7 +41,7 @@ describe Gitlab::PerformanceBar do ...@@ -41,7 +41,7 @@ describe Gitlab::PerformanceBar do
it { expect(described_class.l1_cache_backend).to eq(Gitlab::ThreadMemoryCache.cache_backend) } it { expect(described_class.l1_cache_backend).to eq(Gitlab::ThreadMemoryCache.cache_backend) }
it { expect(described_class.l2_cache_backend).to eq(Rails.cache) } it { expect(described_class.l2_cache_backend).to eq(Rails.cache) }
describe '.enabled?' do describe '.enabled_for_user?' do
let(:user) { create(:user) } let(:user) { create(:user) }
before do before do
...@@ -49,24 +49,24 @@ describe Gitlab::PerformanceBar do ...@@ -49,24 +49,24 @@ describe Gitlab::PerformanceBar do
end end
it 'returns false when given user is nil' do it 'returns false when given user is nil' do
expect(described_class.enabled?(nil)).to be_falsy expect(described_class.enabled_for_user?(nil)).to be_falsy
end end
it 'returns true when given user is an admin' do it 'returns true when given user is an admin' do
user = build_stubbed(:user, :admin) user = build_stubbed(:user, :admin)
expect(described_class.enabled?(user)).to be_truthy expect(described_class.enabled_for_user?(user)).to be_truthy
end end
it 'returns false when allowed_group_id is nil' do it 'returns false when allowed_group_id is nil' do
expect(described_class).to receive(:allowed_group_id).and_return(nil) expect(described_class).to receive(:allowed_group_id).and_return(nil)
expect(described_class.enabled?(user)).to be_falsy expect(described_class.enabled_for_user?(user)).to be_falsy
end end
context 'when allowed group ID does not exist' do context 'when allowed group ID does not exist' do
it 'returns false' do it 'returns false' do
expect(described_class.enabled?(user)).to be_falsy expect(described_class.enabled_for_user?(user)).to be_falsy
end end
end end
...@@ -79,7 +79,7 @@ describe Gitlab::PerformanceBar do ...@@ -79,7 +79,7 @@ describe Gitlab::PerformanceBar do
context 'when user is not a member of the allowed group' do context 'when user is not a member of the allowed group' do
it 'returns false' do it 'returns false' do
expect(described_class.enabled?(user)).to be_falsy expect(described_class.enabled_for_user?(user)).to be_falsy
end end
it_behaves_like 'allowed user IDs are cached' it_behaves_like 'allowed user IDs are cached'
...@@ -91,7 +91,7 @@ describe Gitlab::PerformanceBar do ...@@ -91,7 +91,7 @@ describe Gitlab::PerformanceBar do
end end
it 'returns true' do it 'returns true' do
expect(described_class.enabled?(user)).to be_truthy expect(described_class.enabled_for_user?(user)).to be_truthy
end end
it_behaves_like 'allowed user IDs are cached' it_behaves_like 'allowed user IDs are cached'
...@@ -108,7 +108,7 @@ describe Gitlab::PerformanceBar do ...@@ -108,7 +108,7 @@ describe Gitlab::PerformanceBar do
end end
it 'returns the nested group' do it 'returns the nested group' do
expect(described_class.enabled?(user)).to be_truthy expect(described_class.enabled_for_user?(user)).to be_truthy
end end
end end
...@@ -118,7 +118,7 @@ describe Gitlab::PerformanceBar do ...@@ -118,7 +118,7 @@ describe Gitlab::PerformanceBar do
end end
it 'returns false' do it 'returns false' do
expect(described_class.enabled?(user)).to be_falsy expect(described_class.enabled_for_user?(user)).to be_falsy
end end
end end
end end
......
...@@ -8,7 +8,7 @@ describe Peek::Views::Rugged, :request_store do ...@@ -8,7 +8,7 @@ describe Peek::Views::Rugged, :request_store do
let(:project) { create(:project) } let(:project) { create(:project) }
before do before do
allow(Gitlab::RuggedInstrumentation).to receive(:peek_enabled?).and_return(true) allow(Gitlab::PerformanceBar).to receive(:enabled_for_request?).and_return(true)
end end
it 'returns no results' do it 'returns no results' do
......
...@@ -8116,10 +8116,10 @@ merge2@^1.2.3: ...@@ -8116,10 +8116,10 @@ merge2@^1.2.3:
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5"
integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA== integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==
mermaid@^8.2.4: mermaid@^8.2.6:
version "8.2.4" version "8.2.6"
resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-8.2.4.tgz#52bcd45611fd8552ab9ac4e385d2766a0e38dcf7" resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-8.2.6.tgz#e73f396461a435c39a998819171c2114f59e46e1"
integrity sha512-2la1eJhu4n+Uug4zbxFnkETFDJ9U32OY/fRP8g8A1DrRdfT3Er+7CuUSvxfhIDxl+AxSEU4dXdqCiToZAVMCmQ== integrity sha512-A8y4zW2aXPj8Yw+BkrCkV6fvzhsFWVESV1IkzRjqQ6T/+tzhkz946+bdebCmHqicEJGTncu/U6h8dgjo5pWo6Q==
dependencies: dependencies:
"@braintree/sanitize-url" "^3.1.0" "@braintree/sanitize-url" "^3.1.0"
d3 "^5.7.0" d3 "^5.7.0"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment