Commit cab3b770 authored by Lin Jen-Shin's avatar Lin Jen-Shin

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

Remove line profiler from performance bar

See merge request gitlab-org/gitlab-ce!31098
parents a0ee6377 18cdc5ba
...@@ -297,7 +297,6 @@ gem 'batch-loader', '~> 1.4.0' ...@@ -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 ...@@ -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 ...@@ -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)
......
<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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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
......
@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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 }
---
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 ...@@ -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
......
...@@ -14,8 +14,6 @@ It allows you to see (from left to right): ...@@ -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
......
# 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
...@@ -22,7 +22,7 @@ module Gitlab ...@@ -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 "" ...@@ -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 ""
......
...@@ -816,7 +816,6 @@ pbkdf2,3.0.14,MIT ...@@ -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
......
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