Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
GitLab
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
projects.thm.de
GitLab
Commits
651eb51e
Commit
651eb51e
authored
Jun 07, 2017
by
Rémy Coutable
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Display queries duration in performance bar queries modal
Signed-off-by:
Rémy Coutable
<
remy@rymai.me
>
parent
5f218eb5
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
34 additions
and
80 deletions
+34
-80
config/initializers/peek.rb
config/initializers/peek.rb
+12
-30
lib/gitlab/performance_bar/peek_mysql_with_queries.rb
lib/gitlab/performance_bar/peek_mysql_with_queries.rb
+0
-36
lib/gitlab/performance_bar/peek_query_tracker.rb
lib/gitlab/performance_bar/peek_query_tracker.rb
+8
-6
vendor/assets/javascripts/peek.js
vendor/assets/javascripts/peek.js
+14
-8
No files found.
config/initializers/peek.rb
View file @
651eb51e
...
...
@@ -4,44 +4,26 @@
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
lib/gitlab/performance_bar/peek_mysql_with_queries.rb
deleted
100644 → 0
View file @
5f218eb5
# 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
lib/gitlab/performance_bar/peek_
pg_with_queries
.rb
→
lib/gitlab/performance_bar/peek_
query_tracker
.rb
View file @
651eb51e
# 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 @@ def setup_subscribers
# 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 @@ def setup_subscribers
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
...
...
vendor/assets/javascripts/peek.js
View file @
651eb51e
...
...
@@ -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
]);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment