Merge branch 'remove-line-profile-from-performance-bar' into 'master'

Remove line profiler from performance bar

See merge request gitlab-org/gitlab-ce!31098
This commit is contained in:
Lin Jen-Shin 2019-07-30 10:30:36 +00:00
commit cab3b77049
15 changed files with 7 additions and 177 deletions

View file

@ -297,7 +297,6 @@ gem 'batch-loader', '~> 1.4.0'
# Perf bar # Perf bar
gem 'peek', '~> 1.0.1' gem 'peek', '~> 1.0.1'
gem 'peek-gc', '~> 0.0.2' gem 'peek-gc', '~> 0.0.2'
gem 'peek-rblineprof', '~> 0.2.0'
# Memory benchmarks # Memory benchmarks
gem 'derailed_benchmarks', require: false gem 'derailed_benchmarks', require: false

View file

@ -643,9 +643,6 @@ GEM
railties (>= 4.0.0) railties (>= 4.0.0)
peek-gc (0.0.2) peek-gc (0.0.2)
peek peek
peek-rblineprof (0.2.0)
peek
rblineprof
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)
@ -1177,7 +1174,6 @@ DEPENDENCIES
org-ruby (~> 0.9.12) org-ruby (~> 0.9.12)
peek (~> 1.0.1) peek (~> 1.0.1)
peek-gc (~> 0.0.2) peek-gc (~> 0.0.2)
peek-rblineprof (~> 0.2.0)
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)

View file

@ -1,5 +1,4 @@
<script> <script>
import $ from 'jquery';
import { glEmojiTag } from '~/emoji'; import { glEmojiTag } from '~/emoji';
import detailedMetric from './detailed_metric.vue'; import detailedMetric from './detailed_metric.vue';
@ -28,10 +27,6 @@ export default {
type: String, type: String,
required: true, required: true,
}, },
profileUrl: {
type: String,
required: true,
},
}, },
detailedMetrics: [ detailedMetrics: [
{ {
@ -74,9 +69,6 @@ export default {
initialRequest() { initialRequest() {
return this.currentRequestId === this.requestId; return this.currentRequestId === this.requestId;
}, },
lineProfileModal() {
return $('#modal-peek-line-profile');
},
hasHost() { hasHost() {
return this.currentRequest && this.currentRequest.details && this.currentRequest.details.host; return this.currentRequest && this.currentRequest.details && this.currentRequest.details.host;
}, },
@ -90,10 +82,6 @@ export default {
}, },
mounted() { mounted() {
this.currentRequest = this.requestId; this.currentRequest = this.requestId;
if (this.lineProfileModal.length) {
this.lineProfileModal.modal('toggle');
}
}, },
methods: { methods: {
changeCurrentRequest(newRequestId) { changeCurrentRequest(newRequestId) {
@ -124,17 +112,6 @@ export default {
:header="metric.header" :header="metric.header"
:keys="metric.keys" :keys="metric.keys"
/> />
<div v-if="initialRequest" id="peek-view-rblineprof" class="view">
<button
v-if="lineProfileModal.length"
class="btn-link btn-blank"
data-toggle="modal"
data-target="#modal-peek-line-profile"
>
{{ s__('PerformanceBar|profile') }}
</button>
<a v-else :href="profileUrl">{{ s__('PerformanceBar|profile') }}</a>
</div>
<div id="peek-view-gc" class="view"> <div id="peek-view-gc" class="view">
<span v-if="currentRequest.details" class="bold"> <span v-if="currentRequest.details" class="bold">
<span title="Invoke Time">{{ currentRequest.details.gc.gc_time }}</span <span title="Invoke Time">{{ currentRequest.details.gc.gc_time }}</span

View file

@ -1,6 +1,5 @@
@import 'framework/variables'; @import 'framework/variables';
@import 'framework/variables_overrides'; @import 'framework/variables_overrides';
@import 'peek/views/rblineprof';
#js-peek { #js-peek {
position: fixed; position: fixed;
@ -128,13 +127,3 @@
#modal-peek-pg-queries-content { #modal-peek-pg-queries-content {
color: $black; color: $black;
} }
.peek-rblineprof-file {
pre.duration {
width: 280px;
}
.data {
overflow: visible;
}
}

View file

@ -3,10 +3,6 @@
module WithPerformanceBar module WithPerformanceBar
extend ActiveSupport::Concern extend ActiveSupport::Concern
included do
include Peek::Rblineprof::CustomControllerHelpers
end
def peek_enabled? def peek_enabled?
return false unless Gitlab::PerformanceBar.enabled?(current_user) return false unless Gitlab::PerformanceBar.enabled?(current_user)

View file

@ -2,6 +2,5 @@
#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" },
profile_url: url_for(safe_params.merge(lineprofiler: 'true')) },
class: Peek.env } class: Peek.env }

View file

@ -0,0 +1,5 @@
---
title: Remove line profiler from performance bar
merge_request:
author:
type: removed

View file

@ -7,7 +7,6 @@ Rails.application.config.peek.adapter = :redis, { client: ::Redis.new(Gitlab::Re
Peek.into Peek::Views::Host Peek.into Peek::Views::Host
Peek.into Peek::Views::ActiveRecord Peek.into Peek::Views::ActiveRecord
Peek.into Peek::Views::Gitaly Peek.into Peek::Views::Gitaly
Peek.into Peek::Views::Rblineprof
Peek.into Peek::Views::RedisDetailed Peek.into Peek::Views::RedisDetailed
Peek.into Peek::Views::Rugged Peek.into Peek::Views::Rugged
Peek.into Peek::Views::GC Peek.into Peek::Views::GC

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

View file

@ -14,8 +14,6 @@ It allows you to see (from left to right):
![Gitaly profiling using the Performance Bar](img/performance_bar_gitaly_calls.png) ![Gitaly profiling using the Performance Bar](img/performance_bar_gitaly_calls.png)
- time taken and number of [Rugged] calls, click through for details of these calls - time taken and number of [Rugged] calls, click through for details of these calls
![Rugged profiling using the Performance Bar](img/performance_bar_rugged_calls.png) ![Rugged profiling using the Performance Bar](img/performance_bar_rugged_calls.png)
- profile of the code used to generate the page, line by line. In the profile view, the numbers in the left panel represent wall time, cpu time, and number of calls (based on [rblineprof](https://github.com/tmm1/rblineprof)).
![Line profiling using the Performance Bar](img/performance_bar_line_profiling.png)
- time taken and number of Redis calls, click through for details of these calls - time taken and number of Redis calls, click through for details of these calls
![Redis profiling using the Performance Bar](img/performance_bar_redis_calls.png) ![Redis profiling using the Performance Bar](img/performance_bar_redis_calls.png)
- time taken and number of Ruby GC calls - time taken and number of Ruby GC calls

View file

@ -1,124 +0,0 @@
# frozen_string_literal: true
module Peek
module Rblineprof
module CustomControllerHelpers
extend ActiveSupport::Concern
# This will become useless once https://github.com/peek/peek-rblineprof/pull/5
# is merged
def pygmentize(file_name, code, lexer = nil)
if lexer.present?
Gitlab::Highlight.highlight(file_name, code)
else
"<pre>#{Rack::Utils.escape_html(code)}</pre>"
end
end
# rubocop:disable all
def inject_rblineprof
ret = nil
profile = lineprof(rblineprof_profiler_regex) do
ret = yield
end
if response.content_type =~ %r|text/html|
sort = params[:lineprofiler_sort]
mode = params[:lineprofiler_mode] || 'cpu'
min = (params[:lineprofiler_min] || 5).to_i * 1000
summary = params[:lineprofiler_summary]
# Sort each file by the longest calculated time
per_file = profile.map do |file, lines|
total, child, excl, total_cpu, child_cpu, excl_cpu = lines[0]
wall = summary == 'exclusive' ? excl : total
cpu = summary == 'exclusive' ? excl_cpu : total_cpu
idle = summary == 'exclusive' ? (excl - excl_cpu) : (total - total_cpu)
[
file, lines,
wall, cpu, idle,
sort == 'idle' ? idle : sort == 'cpu' ? cpu : wall
]
end.sort_by{ |a,b,c,d,e,f| -f }
output = ["<div class='modal-dialog modal-xl'><div class='modal-content'>"]
output << "<div class='modal-header'>"
output << "<h4>Line profiling: #{human_description(params[:lineprofiler])}</h4>"
output << "<button class='close' type='button' data-dismiss='modal' aria-label='close'><span aria-hidden='true'>&times;</span></button>"
output << "</div>"
output << "<div class='modal-body'>"
per_file.each do |file_name, lines, file_wall, file_cpu, file_idle, file_sort|
output << "<div class='peek-rblineprof-file'><div class='heading'>"
show_src = file_sort > min
tmpl = show_src ? "<a href='#' class='js-lineprof-file'>%s</a>" : "%s"
if mode == 'cpu'
output << sprintf("<span class='duration'>% 8.1fms + % 8.1fms</span> #{tmpl}", file_cpu / 1000.0, file_idle / 1000.0, file_name.sub(Rails.root.to_s + '/', ''))
else
output << sprintf("<span class='duration'>% 8.1fms</span> #{tmpl}", file_wall/1000.0, file_name.sub(Rails.root.to_s + '/', ''))
end
output << "</div>" # .heading
next unless show_src
output << "<div class='data'>"
code = []
times = []
File.readlines(file_name).each_with_index do |line, i|
code << line
wall, cpu, calls = lines[i + 1]
if calls && calls > 0
if mode == 'cpu'
idle = wall - cpu
times << sprintf("% 8.1fms + % 8.1fms (% 5d)", cpu / 1000.0, idle / 1000.0, calls)
else
times << sprintf("% 8.1fms (% 5d)", wall / 1000.0, calls)
end
else
times << ' '
end
end
output << "<pre class='duration'>#{times.join("\n")}</pre>"
# The following line was changed from
# https://github.com/peek/peek-rblineprof/blob/8d3b7a283a27de2f40abda45974516693d882258/lib/peek/rblineprof/controller_helpers.rb#L125
# This will become useless once https://github.com/peek/peek-rblineprof/pull/16
# is merged and is implemented.
output << "<pre class='code highlight white'>#{pygmentize(file_name, code.join, 'ruby')}</pre>"
output << "</div></div>" # .data then .peek-rblineprof-file
end
output << "</div></div></div>"
response.body += "<div class='modal' id='modal-peek-line-profile' tabindex=-1>#{output.join}</div>".html_safe
end
ret
end
private
def human_description(lineprofiler_param)
case lineprofiler_param
when 'app'
'app/ & lib/'
when 'views'
'app/view/'
when 'gems'
'vendor/gems'
when 'all'
'everything in Rails.root'
when 'stdlib'
'everything in the Ruby standard library'
else
'app/, config/, lib/, vendor/ & plugin/'
end
end
end
end
end

View file

@ -22,7 +22,7 @@ module Gitlab
detail_store << { detail_store << {
cmd: args.first, cmd: args.first,
duration: duration, duration: duration,
backtrace: Gitlab::Profiler.clean_backtrace(caller) backtrace: ::Gitlab::Profiler.clean_backtrace(caller)
} }
end end

View file

@ -7604,9 +7604,6 @@ msgstr ""
msgid "PerformanceBar|SQL queries" msgid "PerformanceBar|SQL queries"
msgstr "" msgstr ""
msgid "PerformanceBar|profile"
msgstr ""
msgid "PerformanceBar|trace" msgid "PerformanceBar|trace"
msgstr "" msgstr ""

1
vendor/licenses.csv vendored
View file

@ -816,7 +816,6 @@ pbkdf2,3.0.14,MIT
peek,1.0.1,MIT peek,1.0.1,MIT
peek-gc,0.0.2,MIT peek-gc,0.0.2,MIT
peek-mysql2,1.1.0,MIT peek-mysql2,1.1.0,MIT
peek-rblineprof,0.2.0,MIT
peek-redis,1.2.0,MIT peek-redis,1.2.0,MIT
pg,0.18.4,"BSD,ruby,GPL" pg,0.18.4,"BSD,ruby,GPL"
pify,3.0.0,MIT pify,3.0.0,MIT

1 @babel/code-frame 7.0.0 MIT
816 peek 1.0.1 MIT
817 peek-gc 0.0.2 MIT
818 peek-mysql2 1.1.0 MIT
peek-rblineprof 0.2.0 MIT
819 peek-redis 1.2.0 MIT
820 pg 0.18.4 BSD,ruby,GPL
821 pify 3.0.0 MIT