rails_mini_profiler 0 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (134) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +29 -111
  3. data/Rakefile +18 -0
  4. data/app/{javascript/images → assets/images/rails_mini_profiler}/bookmark.svg +0 -0
  5. data/app/{javascript/images → assets/images/rails_mini_profiler}/chart.svg +0 -0
  6. data/app/{javascript/images → assets/images/rails_mini_profiler}/delete.svg +0 -0
  7. data/app/{javascript/images → assets/images/rails_mini_profiler}/graph.svg +0 -0
  8. data/app/{javascript/images → assets/images/rails_mini_profiler}/logo.svg +0 -0
  9. data/app/{javascript/images → assets/images/rails_mini_profiler}/logo_variant.svg +2 -2
  10. data/app/assets/images/rails_mini_profiler/search.svg +10 -0
  11. data/app/{javascript/images → assets/images/rails_mini_profiler}/setting.svg +0 -0
  12. data/app/{javascript/images → assets/images/rails_mini_profiler}/show.svg +0 -0
  13. data/app/assets/javascripts/rails_mini_profiler.js +76 -1
  14. data/app/assets/stylesheets/rails_mini_profiler/application.css +149 -1
  15. data/app/assets/stylesheets/rails_mini_profiler/flamegraph.css +14 -0
  16. data/app/{javascript/stylesheets/flashes.scss → assets/stylesheets/rails_mini_profiler/flashes.css} +5 -3
  17. data/app/{javascript/stylesheets/navbar.scss → assets/stylesheets/rails_mini_profiler/navbar.css} +14 -8
  18. data/app/assets/stylesheets/rails_mini_profiler/profiled_requests.css +180 -0
  19. data/app/{javascript/stylesheets/traces.scss → assets/stylesheets/rails_mini_profiler/traces.css} +22 -17
  20. data/app/controllers/rails_mini_profiler/application_controller.rb +4 -9
  21. data/app/controllers/rails_mini_profiler/profiled_requests_controller.rb +10 -23
  22. data/app/helpers/rails_mini_profiler/application_helper.rb +0 -11
  23. data/app/models/rails_mini_profiler/application_record.rb +1 -1
  24. data/app/models/rails_mini_profiler/controller_trace.rb +3 -7
  25. data/app/models/rails_mini_profiler/flamegraph.rb +0 -4
  26. data/app/models/rails_mini_profiler/instantiation_trace.rb +3 -7
  27. data/app/models/rails_mini_profiler/profiled_request.rb +15 -21
  28. data/app/models/rails_mini_profiler/render_partial_trace.rb +3 -7
  29. data/app/models/rails_mini_profiler/render_template_trace.rb +3 -7
  30. data/app/models/rails_mini_profiler/rmp_trace.rb +3 -7
  31. data/app/models/rails_mini_profiler/sequel_trace.rb +3 -7
  32. data/app/models/rails_mini_profiler/trace.rb +3 -7
  33. data/app/presenters/rails_mini_profiler/profiled_request_presenter.rb +15 -8
  34. data/app/views/layouts/rails_mini_profiler/application.html.erb +12 -1
  35. data/app/views/layouts/rails_mini_profiler/flamegraph.html.erb +8 -1
  36. data/app/views/rails_mini_profiler/badge.html.erb +2 -2
  37. data/app/views/rails_mini_profiler/profiled_requests/index.html.erb +58 -8
  38. data/app/views/rails_mini_profiler/profiled_requests/show.html.erb +1 -1
  39. data/app/views/rails_mini_profiler/shared/_navbar.html.erb +1 -1
  40. data/db/migrate/20210621185018_create_rmp.rb +6 -8
  41. data/lib/generators/rails_mini_profiler/install_generator.rb +0 -24
  42. data/lib/generators/rails_mini_profiler/templates/rails_mini_profiler.rb.erb +7 -23
  43. data/lib/rails_mini_profiler/badge.rb +1 -23
  44. data/lib/rails_mini_profiler/configuration.rb +4 -28
  45. data/lib/rails_mini_profiler/engine.rb +4 -15
  46. data/lib/rails_mini_profiler/errors.rb +8 -0
  47. data/lib/rails_mini_profiler/guard.rb +7 -18
  48. data/lib/rails_mini_profiler/logger.rb +0 -5
  49. data/lib/rails_mini_profiler/middleware.rb +4 -4
  50. data/lib/rails_mini_profiler/models/base_model.rb +0 -5
  51. data/lib/rails_mini_profiler/models/trace.rb +9 -0
  52. data/lib/rails_mini_profiler/redirect.rb +1 -9
  53. data/lib/rails_mini_profiler/request_context.rb +7 -31
  54. data/lib/rails_mini_profiler/request_wrapper.rb +8 -44
  55. data/lib/rails_mini_profiler/storage.rb +29 -0
  56. data/lib/rails_mini_profiler/tracers.rb +85 -0
  57. data/lib/rails_mini_profiler/version.rb +1 -1
  58. data/lib/rails_mini_profiler.rb +9 -33
  59. metadata +30 -127
  60. data/LICENSE +0 -20
  61. data/app/javascript/images/check.svg +0 -3
  62. data/app/javascript/images/chevron.svg +0 -3
  63. data/app/javascript/images/filter.svg +0 -1
  64. data/app/javascript/images/search.svg +0 -9
  65. data/app/javascript/js/checklist_controller.js +0 -48
  66. data/app/javascript/js/enable_controller.js +0 -24
  67. data/app/javascript/js/filter_controller.js +0 -44
  68. data/app/javascript/js/search_controller.js +0 -18
  69. data/app/javascript/js/select_controller.js +0 -47
  70. data/app/javascript/packs/rails-mini-profiler.js +0 -88
  71. data/app/javascript/stylesheets/components/page_header/page_header.scss +0 -3
  72. data/app/javascript/stylesheets/components/pagination.scss +0 -55
  73. data/app/javascript/stylesheets/components/profiled_request_table/placeholder.scss +0 -33
  74. data/app/javascript/stylesheets/components/profiled_request_table/profiled_request_table.scss +0 -179
  75. data/app/javascript/stylesheets/flamegraph.scss +0 -10
  76. data/app/javascript/stylesheets/profiled_requests.scss +0 -89
  77. data/app/javascript/stylesheets/rails-mini-profiler.scss +0 -205
  78. data/app/search/rails_mini_profiler/base_search.rb +0 -67
  79. data/app/search/rails_mini_profiler/profiled_request_search.rb +0 -34
  80. data/app/views/models/_flamegraph.json.jb +0 -3
  81. data/app/views/models/_profiled_request.jb +0 -3
  82. data/app/views/models/_trace.jb +0 -3
  83. data/app/views/rails_mini_profiler/flamegraphs/show.json.jb +0 -3
  84. data/app/views/rails_mini_profiler/profiled_requests/index.json.jb +0 -3
  85. data/app/views/rails_mini_profiler/profiled_requests/shared/header/_header.erb +0 -20
  86. data/app/views/rails_mini_profiler/profiled_requests/shared/table/_placeholder.erb +0 -12
  87. data/app/views/rails_mini_profiler/profiled_requests/shared/table/_table.erb +0 -14
  88. data/app/views/rails_mini_profiler/profiled_requests/shared/table/_table_head.erb +0 -125
  89. data/app/views/rails_mini_profiler/profiled_requests/shared/table/_table_row.erb +0 -21
  90. data/app/views/rails_mini_profiler/profiled_requests/show.json.jb +0 -5
  91. data/app/views/rails_mini_profiler/shared/_head.erb +0 -13
  92. data/lib/generators/rails_mini_profiler/templates/rails_mini_profiler.js.erb +0 -13
  93. data/lib/rails_mini_profiler/configuration/storage.rb +0 -47
  94. data/lib/rails_mini_profiler/configuration/user_interface.rb +0 -48
  95. data/lib/rails_mini_profiler/tracing/controller_tracer.rb +0 -15
  96. data/lib/rails_mini_profiler/tracing/null_trace.rb +0 -7
  97. data/lib/rails_mini_profiler/tracing/sequel_tracer.rb +0 -37
  98. data/lib/rails_mini_profiler/tracing/sequel_tracker.rb +0 -37
  99. data/lib/rails_mini_profiler/tracing/subscriptions.rb +0 -34
  100. data/lib/rails_mini_profiler/tracing/trace.rb +0 -45
  101. data/lib/rails_mini_profiler/tracing/trace_factory.rb +0 -37
  102. data/lib/rails_mini_profiler/tracing/tracer.rb +0 -31
  103. data/lib/rails_mini_profiler/tracing/view_tracer.rb +0 -12
  104. data/lib/rails_mini_profiler/tracing.rb +0 -11
  105. data/public/rails_mini_profiler/speedscope/LICENSE +0 -21
  106. data/public/rails_mini_profiler/speedscope/demangle-cpp.1768f4cc.js +0 -4
  107. data/public/rails_mini_profiler/speedscope/demangle-cpp.1768f4cc.js.map +0 -1
  108. data/public/rails_mini_profiler/speedscope/favicon-16x16.f74b3187.png +0 -0
  109. data/public/rails_mini_profiler/speedscope/favicon-32x32.bc503437.png +0 -0
  110. data/public/rails_mini_profiler/speedscope/file-format-schema.json +0 -324
  111. data/public/rails_mini_profiler/speedscope/import.e3a73ef4.js +0 -117
  112. data/public/rails_mini_profiler/speedscope/import.e3a73ef4.js.map +0 -1
  113. data/public/rails_mini_profiler/speedscope/index.html +0 -2
  114. data/public/rails_mini_profiler/speedscope/release.txt +0 -3
  115. data/public/rails_mini_profiler/speedscope/reset.8c46b7a1.css +0 -2
  116. data/public/rails_mini_profiler/speedscope/reset.8c46b7a1.css.map +0 -1
  117. data/public/rails_mini_profiler/speedscope/source-map.438fa06b.js +0 -24
  118. data/public/rails_mini_profiler/speedscope/source-map.438fa06b.js.map +0 -1
  119. data/public/rails_mini_profiler/speedscope/speedscope.026f36b0.js +0 -200
  120. data/public/rails_mini_profiler/speedscope/speedscope.026f36b0.js.map +0 -1
  121. data/vendor/assets/images/bookmark.svg +0 -10
  122. data/vendor/assets/images/chart.svg +0 -12
  123. data/vendor/assets/images/check.svg +0 -3
  124. data/vendor/assets/images/chevron.svg +0 -3
  125. data/vendor/assets/images/delete.svg +0 -9
  126. data/vendor/assets/images/filter.svg +0 -1
  127. data/vendor/assets/images/graph.svg +0 -11
  128. data/vendor/assets/images/logo.svg +0 -18
  129. data/vendor/assets/images/logo_variant.svg +0 -32
  130. data/vendor/assets/images/search.svg +0 -9
  131. data/vendor/assets/images/setting.svg +0 -10
  132. data/vendor/assets/images/show.svg +0 -11
  133. data/vendor/assets/javascripts/rails-mini-profiler.css +0 -1
  134. data/vendor/assets/javascripts/rails-mini-profiler.js +0 -1
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RailsMiniProfiler
4
- module Tracing
5
- class NullTrace < Trace; end
6
- end
7
- end
@@ -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,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RailsMiniProfiler
4
- module Tracing
5
- class ViewTracer < Tracer
6
- def trace
7
- @event[:payload].slice!(:identifier, :count)
8
- super
9
- end
10
- end
11
- end
12
- 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.