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:
commit
cab3b77049
15 changed files with 7 additions and 177 deletions
1
Gemfile
1
Gemfile
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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 }
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Remove line profiler from performance bar
|
||||||
|
merge_request:
|
||||||
|
author:
|
||||||
|
type: removed
|
|
@ -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 |
|
@ -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
|
||||||
|
|
|
@ -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'>×</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
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
1
vendor/licenses.csv
vendored
|
@ -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
|
||||||
|
|
|
Loading…
Reference in a new issue