Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2017-06-07 17:53:13 +0300
committerRémy Coutable <remy@rymai.me>2017-06-09 18:21:39 +0300
commit651eb51ececf9c256416eabe87c062ef33f45502 (patch)
tree6c77ca71fd5af17db2cba2c51113c97cda03f4c3
parent5f218eb5c3ceabb42c42109bb7fe7427bd72e12f (diff)
Display queries duration in performance bar queries modal
Signed-off-by: Rémy Coutable <remy@rymai.me>
-rw-r--r--config/initializers/peek.rb42
-rw-r--r--lib/gitlab/performance_bar/peek_mysql_with_queries.rb36
-rw-r--r--lib/gitlab/performance_bar/peek_query_tracker.rb (renamed from lib/gitlab/performance_bar/peek_pg_with_queries.rb)14
-rw-r--r--vendor/assets/javascripts/peek.js22
4 files changed, 34 insertions, 80 deletions
diff --git a/config/initializers/peek.rb b/config/initializers/peek.rb
index a8669ddba97..6c008e53af6 100644
--- a/config/initializers/peek.rb
+++ b/config/initializers/peek.rb
@@ -4,44 +4,26 @@ Peek.into Peek::Views::Host
Peek.into Peek::Views::PerformanceBar
if Gitlab::Database.mysql?
require 'peek-mysql'
- Peek.into Peek::Views::Mysql2
+ PEEK_DB_CLIENT = ::Mysql2::Client
+ PEEK_DB_VIEW = Peek::Views::Mysql2
+ Peek.into PEEK_DB_VIEW
else
require 'peek-pg'
- Peek.into Peek::Views::PG
+ PEEK_DB_CLIENT = ::PG::Connection
+ PEEK_DB_VIEW = Peek::Views::PG
+ Peek.into PEEK_DB_VIEW
end
Peek.into Peek::Views::Redis
Peek.into Peek::Views::Sidekiq
Peek.into Peek::Views::Rblineprof
Peek.into Peek::Views::GC
-if Gitlab::Database.mysql?
- class Mysql2::Client
- class << self
- attr_accessor :query_details
- end
- self.query_details = Concurrent::Array.new
- end
- module Peek
- module Views
- class Mysql2 < View
- prepend ::Gitlab::PerformanceBar::PeekMysqlWithQueries
- end
- end
- end
-else
- class PG::Connection
- class << self
- attr_accessor :query_details
- end
- self.query_details = Concurrent::Array.new
- end
-
- module Peek
- module Views
- class PG < View
- prepend ::Gitlab::PerformanceBar::PeekPgWithQueries
- end
- end
+class PEEK_DB_CLIENT
+ class << self
+ attr_accessor :query_details
end
+ self.query_details = Concurrent::Array.new
end
+
+PEEK_DB_VIEW.prepend ::Gitlab::PerformanceBar::PeekQueryTracker
diff --git a/lib/gitlab/performance_bar/peek_mysql_with_queries.rb b/lib/gitlab/performance_bar/peek_mysql_with_queries.rb
deleted file mode 100644
index ea577de5a69..00000000000
--- a/lib/gitlab/performance_bar/peek_mysql_with_queries.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-# Inspired by https://github.com/peek/peek-mysql2/blob/master/lib/peek/views/mysql2.rb
-module Gitlab
- module PerformanceBar
- module PeekMysqlWithQueries
- def queries
- ::Mysql2::Client.query_details
- end
-
- def results
- super.merge(queries: queries)
- end
-
- private
-
- def setup_subscribers
- super
-
- # Reset each counter when a new request starts
- before_request do
- ::Mysql2::Client.query_details = []
- end
-
- subscribe('sql.active_record') do |_, start, finish, _, data|
- if RequestStore.active? && RequestStore.store[:peek_enabled]
- track_query(data[:sql].strip, data[:binds], start, finish)
- end
- end
- end
-
- def track_query(raw_query, bindings, start, finish)
- query = Gitlab::Sherlock::Query.new(raw_query, start, finish)
- ::Mysql2::Client.query_details << query.formatted_query
- end
- end
- end
-end
diff --git a/lib/gitlab/performance_bar/peek_pg_with_queries.rb b/lib/gitlab/performance_bar/peek_query_tracker.rb
index 6e9cb593d36..479396f6664 100644
--- a/lib/gitlab/performance_bar/peek_pg_with_queries.rb
+++ b/lib/gitlab/performance_bar/peek_query_tracker.rb
@@ -1,13 +1,14 @@
# Inspired by https://github.com/peek/peek-pg/blob/master/lib/peek/views/pg.rb
module Gitlab
module PerformanceBar
- module PeekPgWithQueries
- def queries
- ::PG::Connection.query_details
+ module PeekQueryTracker
+ def sorted_queries
+ PEEK_DB_CLIENT.query_details.
+ sort { |a, b| b[:duration] <=> a[:duration] }
end
def results
- super.merge(queries: queries)
+ super.merge(queries: sorted_queries)
end
private
@@ -17,7 +18,7 @@ module Gitlab
# Reset each counter when a new request starts
before_request do
- ::PG::Connection.query_details = []
+ PEEK_DB_CLIENT.query_details = []
end
subscribe('sql.active_record') do |_, start, finish, _, data|
@@ -29,7 +30,8 @@ module Gitlab
def track_query(raw_query, bindings, start, finish)
query = Gitlab::Sherlock::Query.new(raw_query, start, finish)
- ::PG::Connection.query_details << query.formatted_query
+ query_info = { duration: query.duration.round(4), sql: query.formatted_query }
+ PEEK_DB_CLIENT.query_details << query_info
end
end
end
diff --git a/vendor/assets/javascripts/peek.js b/vendor/assets/javascripts/peek.js
index 51d797ffd12..0aec31ee2cb 100644
--- a/vendor/assets/javascripts/peek.js
+++ b/vendor/assets/javascripts/peek.js
@@ -15,25 +15,31 @@ requestId = null;
return $('#peek').length;
};
updatePerformanceBar = function(results) {
- var key, label, data, table, html, tr, td;
+ var key, label, data, table, html, tr, duration_td, sql_td, strong;
for (key in results.data) {
for (label in results.data[key]) {
data = results.data[key][label];
- console.log(data);
- if (Array.isArray(data)) {
+ if (label == 'queries') {
table = document.createElement('table');
for (var i = 0; i < data.length; i += 1) {
tr = document.createElement('tr');
- td = document.createElement('td');
+ duration_td = document.createElement('td');
+ sql_td = document.createElement('td');
+ strong = document.createElement('strong');
+
+ strong.append(data[i]['duration'] + 'ms');
+ duration_td.appendChild(strong);
+ tr.appendChild(duration_td);
+
+ sql_td.appendChild(document.createTextNode(data[i]['sql']));
+ tr.appendChild(sql_td);
- td.appendChild(document.createTextNode(data[i]));
- tr.appendChild(td);
table.appendChild(tr);
}
- $table = $(table).addClass('table');
- $("[data-defer-to=" + key + "-" + label + "]").html($table);
+ table.className = 'table';
+ $("[data-defer-to=" + key + "-" + label + "]").html(table);
}
else {
$("[data-defer-to=" + key + "-" + label + "]").text(results.data[key][label]);