Skip to content

Commit 651eb51

Browse files
committed
Display queries duration in performance bar queries modal
Signed-off-by: Rémy Coutable <[email protected]>
1 parent 5f218eb commit 651eb51

File tree

4 files changed

+34
-80
lines changed

4 files changed

+34
-80
lines changed

config/initializers/peek.rb

+12-30
Original file line numberDiff line numberDiff line change
@@ -4,44 +4,26 @@
44
Peek.into Peek::Views::PerformanceBar
55
if Gitlab::Database.mysql?
66
require 'peek-mysql'
7-
Peek.into Peek::Views::Mysql2
7+
PEEK_DB_CLIENT = ::Mysql2::Client
8+
PEEK_DB_VIEW = Peek::Views::Mysql2
9+
Peek.into PEEK_DB_VIEW
810
else
911
require 'peek-pg'
10-
Peek.into Peek::Views::PG
12+
PEEK_DB_CLIENT = ::PG::Connection
13+
PEEK_DB_VIEW = Peek::Views::PG
14+
Peek.into PEEK_DB_VIEW
1115
end
1216
Peek.into Peek::Views::Redis
1317
Peek.into Peek::Views::Sidekiq
1418
Peek.into Peek::Views::Rblineprof
1519
Peek.into Peek::Views::GC
1620

17-
if Gitlab::Database.mysql?
18-
class Mysql2::Client
19-
class << self
20-
attr_accessor :query_details
21-
end
22-
self.query_details = Concurrent::Array.new
23-
end
2421

25-
module Peek
26-
module Views
27-
class Mysql2 < View
28-
prepend ::Gitlab::PerformanceBar::PeekMysqlWithQueries
29-
end
30-
end
31-
end
32-
else
33-
class PG::Connection
34-
class << self
35-
attr_accessor :query_details
36-
end
37-
self.query_details = Concurrent::Array.new
38-
end
39-
40-
module Peek
41-
module Views
42-
class PG < View
43-
prepend ::Gitlab::PerformanceBar::PeekPgWithQueries
44-
end
45-
end
22+
class PEEK_DB_CLIENT
23+
class << self
24+
attr_accessor :query_details
4625
end
26+
self.query_details = Concurrent::Array.new
4727
end
28+
29+
PEEK_DB_VIEW.prepend ::Gitlab::PerformanceBar::PeekQueryTracker

lib/gitlab/performance_bar/peek_mysql_with_queries.rb

-36
This file was deleted.

lib/gitlab/performance_bar/peek_pg_with_queries.rb renamed to lib/gitlab/performance_bar/peek_query_tracker.rb

+8-6
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
# Inspired by https://github.com/peek/peek-pg/blob/master/lib/peek/views/pg.rb
22
module Gitlab
33
module PerformanceBar
4-
module PeekPgWithQueries
5-
def queries
6-
::PG::Connection.query_details
4+
module PeekQueryTracker
5+
def sorted_queries
6+
PEEK_DB_CLIENT.query_details.
7+
sort { |a, b| b[:duration] <=> a[:duration] }
78
end
89

910
def results
10-
super.merge(queries: queries)
11+
super.merge(queries: sorted_queries)
1112
end
1213

1314
private
@@ -17,7 +18,7 @@ def setup_subscribers
1718

1819
# Reset each counter when a new request starts
1920
before_request do
20-
::PG::Connection.query_details = []
21+
PEEK_DB_CLIENT.query_details = []
2122
end
2223

2324
subscribe('sql.active_record') do |_, start, finish, _, data|
@@ -29,7 +30,8 @@ def setup_subscribers
2930

3031
def track_query(raw_query, bindings, start, finish)
3132
query = Gitlab::Sherlock::Query.new(raw_query, start, finish)
32-
::PG::Connection.query_details << query.formatted_query
33+
query_info = { duration: query.duration.round(4), sql: query.formatted_query }
34+
PEEK_DB_CLIENT.query_details << query_info
3335
end
3436
end
3537
end

vendor/assets/javascripts/peek.js

+14-8
Original file line numberDiff line numberDiff line change
@@ -15,25 +15,31 @@ requestId = null;
1515
return $('#peek').length;
1616
};
1717
updatePerformanceBar = function(results) {
18-
var key, label, data, table, html, tr, td;
18+
var key, label, data, table, html, tr, duration_td, sql_td, strong;
1919
for (key in results.data) {
2020
for (label in results.data[key]) {
2121
data = results.data[key][label];
22-
console.log(data);
23-
if (Array.isArray(data)) {
22+
if (label == 'queries') {
2423
table = document.createElement('table');
2524

2625
for (var i = 0; i < data.length; i += 1) {
2726
tr = document.createElement('tr');
28-
td = document.createElement('td');
27+
duration_td = document.createElement('td');
28+
sql_td = document.createElement('td');
29+
strong = document.createElement('strong');
30+
31+
strong.append(data[i]['duration'] + 'ms');
32+
duration_td.appendChild(strong);
33+
tr.appendChild(duration_td);
34+
35+
sql_td.appendChild(document.createTextNode(data[i]['sql']));
36+
tr.appendChild(sql_td);
2937

30-
td.appendChild(document.createTextNode(data[i]));
31-
tr.appendChild(td);
3238
table.appendChild(tr);
3339
}
3440

35-
$table = $(table).addClass('table');
36-
$("[data-defer-to=" + key + "-" + label + "]").html($table);
41+
table.className = 'table';
42+
$("[data-defer-to=" + key + "-" + label + "]").html(table);
3743
}
3844
else {
3945
$("[data-defer-to=" + key + "-" + label + "]").text(results.data[key][label]);

0 commit comments

Comments
 (0)