rails_mini_profiler 0 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +29 -111
- data/Rakefile +18 -0
- data/app/{javascript/images → assets/images/rails_mini_profiler}/bookmark.svg +0 -0
- data/app/{javascript/images → assets/images/rails_mini_profiler}/chart.svg +0 -0
- data/app/{javascript/images → assets/images/rails_mini_profiler}/delete.svg +0 -0
- data/app/{javascript/images → assets/images/rails_mini_profiler}/graph.svg +0 -0
- data/app/{javascript/images → assets/images/rails_mini_profiler}/logo.svg +0 -0
- data/app/{javascript/images → assets/images/rails_mini_profiler}/logo_variant.svg +2 -2
- data/app/assets/images/rails_mini_profiler/search.svg +10 -0
- data/app/{javascript/images → assets/images/rails_mini_profiler}/setting.svg +0 -0
- data/app/{javascript/images → assets/images/rails_mini_profiler}/show.svg +0 -0
- data/app/assets/javascripts/rails_mini_profiler.js +76 -1
- data/app/assets/stylesheets/rails_mini_profiler/application.css +149 -1
- data/app/assets/stylesheets/rails_mini_profiler/flamegraph.css +14 -0
- data/app/{javascript/stylesheets/flashes.scss → assets/stylesheets/rails_mini_profiler/flashes.css} +5 -3
- data/app/{javascript/stylesheets/navbar.scss → assets/stylesheets/rails_mini_profiler/navbar.css} +14 -8
- data/app/assets/stylesheets/rails_mini_profiler/profiled_requests.css +180 -0
- data/app/{javascript/stylesheets/traces.scss → assets/stylesheets/rails_mini_profiler/traces.css} +22 -17
- data/app/controllers/rails_mini_profiler/application_controller.rb +4 -9
- data/app/controllers/rails_mini_profiler/profiled_requests_controller.rb +10 -23
- data/app/helpers/rails_mini_profiler/application_helper.rb +0 -11
- data/app/models/rails_mini_profiler/application_record.rb +1 -1
- data/app/models/rails_mini_profiler/controller_trace.rb +3 -7
- data/app/models/rails_mini_profiler/flamegraph.rb +0 -4
- data/app/models/rails_mini_profiler/instantiation_trace.rb +3 -7
- data/app/models/rails_mini_profiler/profiled_request.rb +15 -21
- data/app/models/rails_mini_profiler/render_partial_trace.rb +3 -7
- data/app/models/rails_mini_profiler/render_template_trace.rb +3 -7
- data/app/models/rails_mini_profiler/rmp_trace.rb +3 -7
- data/app/models/rails_mini_profiler/sequel_trace.rb +3 -7
- data/app/models/rails_mini_profiler/trace.rb +3 -7
- data/app/presenters/rails_mini_profiler/profiled_request_presenter.rb +15 -8
- data/app/views/layouts/rails_mini_profiler/application.html.erb +12 -1
- data/app/views/layouts/rails_mini_profiler/flamegraph.html.erb +8 -1
- data/app/views/rails_mini_profiler/badge.html.erb +2 -2
- data/app/views/rails_mini_profiler/profiled_requests/index.html.erb +58 -8
- data/app/views/rails_mini_profiler/profiled_requests/show.html.erb +1 -1
- data/app/views/rails_mini_profiler/shared/_navbar.html.erb +1 -1
- data/db/migrate/20210621185018_create_rmp.rb +6 -8
- data/lib/generators/rails_mini_profiler/install_generator.rb +0 -24
- data/lib/generators/rails_mini_profiler/templates/rails_mini_profiler.rb.erb +7 -23
- data/lib/rails_mini_profiler/badge.rb +1 -23
- data/lib/rails_mini_profiler/configuration.rb +4 -28
- data/lib/rails_mini_profiler/engine.rb +4 -15
- data/lib/rails_mini_profiler/errors.rb +8 -0
- data/lib/rails_mini_profiler/guard.rb +7 -18
- data/lib/rails_mini_profiler/logger.rb +0 -5
- data/lib/rails_mini_profiler/middleware.rb +4 -4
- data/lib/rails_mini_profiler/models/base_model.rb +0 -5
- data/lib/rails_mini_profiler/models/trace.rb +9 -0
- data/lib/rails_mini_profiler/redirect.rb +1 -9
- data/lib/rails_mini_profiler/request_context.rb +7 -31
- data/lib/rails_mini_profiler/request_wrapper.rb +8 -44
- data/lib/rails_mini_profiler/storage.rb +29 -0
- data/lib/rails_mini_profiler/tracers.rb +85 -0
- data/lib/rails_mini_profiler/version.rb +1 -1
- data/lib/rails_mini_profiler.rb +9 -33
- metadata +30 -127
- data/LICENSE +0 -20
- data/app/javascript/images/check.svg +0 -3
- data/app/javascript/images/chevron.svg +0 -3
- data/app/javascript/images/filter.svg +0 -1
- data/app/javascript/images/search.svg +0 -9
- data/app/javascript/js/checklist_controller.js +0 -48
- data/app/javascript/js/enable_controller.js +0 -24
- data/app/javascript/js/filter_controller.js +0 -44
- data/app/javascript/js/search_controller.js +0 -18
- data/app/javascript/js/select_controller.js +0 -47
- data/app/javascript/packs/rails-mini-profiler.js +0 -88
- data/app/javascript/stylesheets/components/page_header/page_header.scss +0 -3
- data/app/javascript/stylesheets/components/pagination.scss +0 -55
- data/app/javascript/stylesheets/components/profiled_request_table/placeholder.scss +0 -33
- data/app/javascript/stylesheets/components/profiled_request_table/profiled_request_table.scss +0 -179
- data/app/javascript/stylesheets/flamegraph.scss +0 -10
- data/app/javascript/stylesheets/profiled_requests.scss +0 -89
- data/app/javascript/stylesheets/rails-mini-profiler.scss +0 -205
- data/app/search/rails_mini_profiler/base_search.rb +0 -67
- data/app/search/rails_mini_profiler/profiled_request_search.rb +0 -34
- data/app/views/models/_flamegraph.json.jb +0 -3
- data/app/views/models/_profiled_request.jb +0 -3
- data/app/views/models/_trace.jb +0 -3
- data/app/views/rails_mini_profiler/flamegraphs/show.json.jb +0 -3
- data/app/views/rails_mini_profiler/profiled_requests/index.json.jb +0 -3
- data/app/views/rails_mini_profiler/profiled_requests/shared/header/_header.erb +0 -20
- data/app/views/rails_mini_profiler/profiled_requests/shared/table/_placeholder.erb +0 -12
- data/app/views/rails_mini_profiler/profiled_requests/shared/table/_table.erb +0 -14
- data/app/views/rails_mini_profiler/profiled_requests/shared/table/_table_head.erb +0 -125
- data/app/views/rails_mini_profiler/profiled_requests/shared/table/_table_row.erb +0 -21
- data/app/views/rails_mini_profiler/profiled_requests/show.json.jb +0 -5
- data/app/views/rails_mini_profiler/shared/_head.erb +0 -13
- data/lib/generators/rails_mini_profiler/templates/rails_mini_profiler.js.erb +0 -13
- data/lib/rails_mini_profiler/configuration/storage.rb +0 -47
- data/lib/rails_mini_profiler/configuration/user_interface.rb +0 -48
- data/lib/rails_mini_profiler/tracing/controller_tracer.rb +0 -15
- data/lib/rails_mini_profiler/tracing/null_trace.rb +0 -7
- data/lib/rails_mini_profiler/tracing/sequel_tracer.rb +0 -37
- data/lib/rails_mini_profiler/tracing/sequel_tracker.rb +0 -37
- data/lib/rails_mini_profiler/tracing/subscriptions.rb +0 -34
- data/lib/rails_mini_profiler/tracing/trace.rb +0 -45
- data/lib/rails_mini_profiler/tracing/trace_factory.rb +0 -37
- data/lib/rails_mini_profiler/tracing/tracer.rb +0 -31
- data/lib/rails_mini_profiler/tracing/view_tracer.rb +0 -12
- data/lib/rails_mini_profiler/tracing.rb +0 -11
- data/public/rails_mini_profiler/speedscope/LICENSE +0 -21
- data/public/rails_mini_profiler/speedscope/demangle-cpp.1768f4cc.js +0 -4
- data/public/rails_mini_profiler/speedscope/demangle-cpp.1768f4cc.js.map +0 -1
- data/public/rails_mini_profiler/speedscope/favicon-16x16.f74b3187.png +0 -0
- data/public/rails_mini_profiler/speedscope/favicon-32x32.bc503437.png +0 -0
- data/public/rails_mini_profiler/speedscope/file-format-schema.json +0 -324
- data/public/rails_mini_profiler/speedscope/import.e3a73ef4.js +0 -117
- data/public/rails_mini_profiler/speedscope/import.e3a73ef4.js.map +0 -1
- data/public/rails_mini_profiler/speedscope/index.html +0 -2
- data/public/rails_mini_profiler/speedscope/release.txt +0 -3
- data/public/rails_mini_profiler/speedscope/reset.8c46b7a1.css +0 -2
- data/public/rails_mini_profiler/speedscope/reset.8c46b7a1.css.map +0 -1
- data/public/rails_mini_profiler/speedscope/source-map.438fa06b.js +0 -24
- data/public/rails_mini_profiler/speedscope/source-map.438fa06b.js.map +0 -1
- data/public/rails_mini_profiler/speedscope/speedscope.026f36b0.js +0 -200
- data/public/rails_mini_profiler/speedscope/speedscope.026f36b0.js.map +0 -1
- data/vendor/assets/images/bookmark.svg +0 -10
- data/vendor/assets/images/chart.svg +0 -12
- data/vendor/assets/images/check.svg +0 -3
- data/vendor/assets/images/chevron.svg +0 -3
- data/vendor/assets/images/delete.svg +0 -9
- data/vendor/assets/images/filter.svg +0 -1
- data/vendor/assets/images/graph.svg +0 -11
- data/vendor/assets/images/logo.svg +0 -18
- data/vendor/assets/images/logo_variant.svg +0 -32
- data/vendor/assets/images/search.svg +0 -9
- data/vendor/assets/images/setting.svg +0 -10
- data/vendor/assets/images/show.svg +0 -11
- data/vendor/assets/javascripts/rails-mini-profiler.css +0 -1
- data/vendor/assets/javascripts/rails-mini-profiler.js +0 -1
@@ -1,37 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RailsMiniProfiler
|
4
|
-
module Tracing
|
5
|
-
class SequelTracer < Tracer
|
6
|
-
def trace
|
7
|
-
return NullTrace.new if ignore?
|
8
|
-
|
9
|
-
payload = @event[:payload].slice(:name, :sql, :binds, :type_casted_binds)
|
10
|
-
typecasted_binds = payload[:type_casted_binds]
|
11
|
-
# Sometimes, typecasted binds are a proc. Not sure why. In those instances, we extract the typecasted
|
12
|
-
# values from the proc by executing call.
|
13
|
-
typecasted_binds = typecasted_binds.call if typecasted_binds.respond_to?(:call)
|
14
|
-
payload[:binds] = transform_binds(payload[:binds], typecasted_binds)
|
15
|
-
payload.delete(:type_casted_binds)
|
16
|
-
payload.reject { |_k, v| v.blank? }
|
17
|
-
@event[:payload] = payload
|
18
|
-
super
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def transform_binds(binds, type_casted_binds)
|
24
|
-
binds.each_with_object([]).with_index do |(binding, object), i|
|
25
|
-
name = binding.name
|
26
|
-
value = type_casted_binds[i]
|
27
|
-
object << { name: name, value: value }
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def ignore?
|
32
|
-
payload = @event[:payload]
|
33
|
-
!SqlTracker.new(name: payload[:name], query: payload[:sql]).track?
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RailsMiniProfiler
|
4
|
-
module Tracing
|
5
|
-
class SqlTracker
|
6
|
-
TRACKED_SQL_COMMANDS = %w[SELECT INSERT UPDATE DELETE].freeze
|
7
|
-
UNTRACKED_NAMES = %w[SCHEMA].freeze
|
8
|
-
UNTRACKED_TABLES = %w[
|
9
|
-
SCHEMA_MIGRATIONS
|
10
|
-
SQLITE_MASTER
|
11
|
-
ACTIVE_MONITORING_METRICS
|
12
|
-
SQLITE_TEMP_MASTER
|
13
|
-
SQLITE_VERSION
|
14
|
-
AR_INTERNAL_METADATA
|
15
|
-
].freeze
|
16
|
-
|
17
|
-
def initialize(query:, name:)
|
18
|
-
@query = query.to_s.upcase
|
19
|
-
@name = name.to_s.upcase
|
20
|
-
end
|
21
|
-
|
22
|
-
def track?
|
23
|
-
query.start_with?(*TRACKED_SQL_COMMANDS) &&
|
24
|
-
!name.start_with?(*UNTRACKED_NAMES) &&
|
25
|
-
!untracked_tables?
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
attr_reader :query, :name
|
31
|
-
|
32
|
-
def untracked_tables?
|
33
|
-
UNTRACKED_TABLES.any? { |table| query.include?(table) }
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RailsMiniProfiler
|
4
|
-
module Tracing
|
5
|
-
class Subscriptions
|
6
|
-
DEFAULT_SUBSCRIPTIONS = %w[
|
7
|
-
sql.active_record
|
8
|
-
instantiation.active_record
|
9
|
-
render_template.action_view
|
10
|
-
render_partial.action_view
|
11
|
-
process_action.action_controller
|
12
|
-
rails_mini_profiler.total_time
|
13
|
-
].freeze
|
14
|
-
|
15
|
-
class << self
|
16
|
-
def setup!(&callback)
|
17
|
-
DEFAULT_SUBSCRIPTIONS.each do |event|
|
18
|
-
subscribe(event, &callback)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def subscribe(*subscriptions, &callback)
|
25
|
-
subscriptions.each do |subscription|
|
26
|
-
ActiveSupport::Notifications.subscribe(subscription) do |event|
|
27
|
-
callback.call(event)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RailsMiniProfiler
|
4
|
-
module Tracing
|
5
|
-
# A simplified representation of a trace.
|
6
|
-
#
|
7
|
-
# Is transformed into [RailsMiniProfiler::Trace] when recording has finished.
|
8
|
-
#
|
9
|
-
# @see https://guides.rubyonrails.org/active_support_instrumentation.html
|
10
|
-
#
|
11
|
-
# @!attribute id
|
12
|
-
# @return [Integer] the trace ID
|
13
|
-
# @!attribute name
|
14
|
-
# @return [Integer] the trace type.
|
15
|
-
# @!attribute start
|
16
|
-
# @return [Integer] the trace start as microsecond timestamp
|
17
|
-
# @!attribute finish
|
18
|
-
# @return [Integer] the trace finish as microsecond timestamp
|
19
|
-
# @!attribute duration
|
20
|
-
# @return [Integer] the trace duration
|
21
|
-
# @!attribute payload
|
22
|
-
# @return [Hash] a subset of trace data
|
23
|
-
# @!attribute backtrace
|
24
|
-
# @return [String] the line where this trace was recorded
|
25
|
-
# @!attribute allocations
|
26
|
-
# @return [Integer] the number of alloactions
|
27
|
-
# @!attribute created_at
|
28
|
-
# @return [DateTime] the creation date
|
29
|
-
# @!attribute updated_at
|
30
|
-
# @return [DateTime] the last updated date
|
31
|
-
#
|
32
|
-
# @api private
|
33
|
-
class Trace < RailsMiniProfiler::Models::BaseModel
|
34
|
-
attr_accessor :id, :name, :start, :finish, :duration, :payload, :backtrace, :allocations, :created_at, :updated_at
|
35
|
-
|
36
|
-
def ignore?
|
37
|
-
false
|
38
|
-
end
|
39
|
-
|
40
|
-
def transform!
|
41
|
-
self
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RailsMiniProfiler
|
4
|
-
module Tracing
|
5
|
-
class TraceFactory
|
6
|
-
class << self
|
7
|
-
def create(event)
|
8
|
-
factory = new(event)
|
9
|
-
factory.create
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def initialize(event)
|
14
|
-
@event = event
|
15
|
-
end
|
16
|
-
|
17
|
-
def create
|
18
|
-
trace_class.new(@event).trace
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def trace_class
|
24
|
-
case @event.name
|
25
|
-
when 'sql.active_record'
|
26
|
-
SequelTracer
|
27
|
-
when 'render_template.action_view', 'render_partial.action_view'
|
28
|
-
ViewTracer
|
29
|
-
when 'process_action.action_controller'
|
30
|
-
ControllerTracer
|
31
|
-
else
|
32
|
-
Tracer
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RailsMiniProfiler
|
4
|
-
module Tracing
|
5
|
-
class Tracer
|
6
|
-
def initialize(event)
|
7
|
-
@event = event_data(event)
|
8
|
-
end
|
9
|
-
|
10
|
-
def trace
|
11
|
-
Trace.new(**@event)
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def event_data(event)
|
17
|
-
start = (event.time.to_f * 100_000).to_i
|
18
|
-
finish = (event.end.to_f * 100_000).to_i
|
19
|
-
{
|
20
|
-
name: event.name,
|
21
|
-
start: start,
|
22
|
-
finish: finish,
|
23
|
-
duration: finish - start,
|
24
|
-
allocations: event.allocations,
|
25
|
-
backtrace: Rails.backtrace_cleaner.clean(caller),
|
26
|
-
payload: event.payload
|
27
|
-
}
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails_mini_profiler/tracing/subscriptions'
|
4
|
-
require 'rails_mini_profiler/tracing/trace'
|
5
|
-
require 'rails_mini_profiler/tracing/tracer'
|
6
|
-
require 'rails_mini_profiler/tracing/controller_tracer'
|
7
|
-
require 'rails_mini_profiler/tracing/sequel_tracker'
|
8
|
-
require 'rails_mini_profiler/tracing/sequel_tracer'
|
9
|
-
require 'rails_mini_profiler/tracing/view_tracer'
|
10
|
-
require 'rails_mini_profiler/tracing/null_trace'
|
11
|
-
require 'rails_mini_profiler/tracing/trace_factory'
|
@@ -1,21 +0,0 @@
|
|
1
|
-
MIT License
|
2
|
-
|
3
|
-
Copyright (c) 2018 Jamie Wong
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
7
|
-
in the Software without restriction, including without limitation the rights
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
10
|
-
furnished to do so, subject to the following conditions:
|
11
|
-
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
13
|
-
copies or substantial portions of the Software.
|
14
|
-
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
-
SOFTWARE.
|