better_rails_debugger 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +98 -0
  4. data/Rakefile +36 -0
  5. data/app/assets/config/better_rails_debugger_manifest.js +2 -0
  6. data/app/assets/images/avatars/1.jpg +0 -0
  7. data/app/assets/images/avatars/2.jpg +0 -0
  8. data/app/assets/images/avatars/3.jpg +0 -0
  9. data/app/assets/images/avatars/4.jpg +0 -0
  10. data/app/assets/images/avatars/5.jpg +0 -0
  11. data/app/assets/images/avatars/6.jpg +0 -0
  12. data/app/assets/images/avatars/7.jpg +0 -0
  13. data/app/assets/images/avatars/8.jpg +0 -0
  14. data/app/assets/images/favicon.png +0 -0
  15. data/app/assets/images/logo-symbol.png +0 -0
  16. data/app/assets/images/logo.png +0 -0
  17. data/app/assets/javascripts/better_rails_debugger/Chart.min.js +10 -0
  18. data/app/assets/javascripts/better_rails_debugger/app.js +146 -0
  19. data/app/assets/javascripts/better_rails_debugger/application.js +24 -0
  20. data/app/assets/javascripts/better_rails_debugger/bootstrap.min.js +7 -0
  21. data/app/assets/javascripts/better_rails_debugger/jquery-3.0.0.min.js +4 -0
  22. data/app/assets/javascripts/better_rails_debugger/jquery.min.js +4 -0
  23. data/app/assets/javascripts/better_rails_debugger/moment.min.js +7 -0
  24. data/app/assets/javascripts/better_rails_debugger/pace.min.js +2 -0
  25. data/app/assets/javascripts/better_rails_debugger/popper.min.js +5 -0
  26. data/app/assets/javascripts/better_rails_debugger/popper.min.js.map +1 -0
  27. data/app/assets/javascripts/better_rails_debugger/prism.js +7 -0
  28. data/app/assets/javascripts/better_rails_debugger/views/charts.js +196 -0
  29. data/app/assets/javascripts/better_rails_debugger/views/main.js +533 -0
  30. data/app/assets/javascripts/better_rails_debugger/views/popovers.js +8 -0
  31. data/app/assets/javascripts/better_rails_debugger/views/tooltips.js +5 -0
  32. data/app/assets/javascripts/better_rails_debugger/views/widgets.js +564 -0
  33. data/app/assets/stylesheets/better_rails_debugger/analysis_group_controller.css +4 -0
  34. data/app/assets/stylesheets/better_rails_debugger/application.scss +16 -0
  35. data/app/assets/stylesheets/better_rails_debugger/group_instances_controller.css +4 -0
  36. data/app/assets/stylesheets/better_rails_debugger/memory.css +4 -0
  37. data/app/assets/stylesheets/better_rails_debugger/prism.css +215 -0
  38. data/app/assets/stylesheets/better_rails_debugger/style.min.css +12 -0
  39. data/app/controllers/better_rails_debugger/analysis_groups_controller.rb +75 -0
  40. data/app/controllers/better_rails_debugger/application_controller.rb +5 -0
  41. data/app/controllers/better_rails_debugger/group_instances_controller.rb +29 -0
  42. data/app/controllers/better_rails_debugger/memory_controller.rb +21 -0
  43. data/app/helpers/better_rails_debugger/analysis_groups_helper.rb +4 -0
  44. data/app/helpers/better_rails_debugger/application_helper.rb +4 -0
  45. data/app/helpers/better_rails_debugger/group_instances_helper.rb +4 -0
  46. data/app/helpers/better_rails_debugger/memory_helper.rb +4 -0
  47. data/app/jobs/better_rails_debugger/analysis_recorder_job.rb +35 -0
  48. data/app/jobs/better_rails_debugger/application_job.rb +4 -0
  49. data/app/mailers/better_rails_debugger/application_mailer.rb +6 -0
  50. data/app/models/better_rails_debugger/analysis_group.rb +49 -0
  51. data/app/models/better_rails_debugger/application_record.rb +5 -0
  52. data/app/models/better_rails_debugger/group_instance.rb +42 -0
  53. data/app/models/better_rails_debugger/object_information.rb +19 -0
  54. data/app/views/better_rails_debugger/analysis_groups/_form.html.haml +41 -0
  55. data/app/views/better_rails_debugger/analysis_groups/edit.html.haml +23 -0
  56. data/app/views/better_rails_debugger/analysis_groups/index.html.haml +36 -0
  57. data/app/views/better_rails_debugger/analysis_groups/new.html.haml +23 -0
  58. data/app/views/better_rails_debugger/analysis_groups/show.html.haml +35 -0
  59. data/app/views/better_rails_debugger/group_instances/objects.html.haml +62 -0
  60. data/app/views/better_rails_debugger/memory/index.html.haml +20 -0
  61. data/app/views/better_rails_debugger/memory/show.html.haml +26 -0
  62. data/app/views/better_rails_debugger/shared/_header.html.haml +4 -0
  63. data/app/views/better_rails_debugger/shared/_sidebar.html.haml +5 -0
  64. data/app/views/layouts/better_rails_debugger/application.html.erb +47 -0
  65. data/config/initializers/setup.rb +10 -0
  66. data/config/mongoid.yml +160 -0
  67. data/config/routes.rb +21 -0
  68. data/lib/better_rails_debugger/config.rb +45 -0
  69. data/lib/better_rails_debugger/engine.rb +5 -0
  70. data/lib/better_rails_debugger/memory_analyzer.rb +109 -0
  71. data/lib/better_rails_debugger/version.rb +3 -0
  72. data/lib/better_rails_debugger.rb +16 -0
  73. data/lib/tasks/better_rails_debugger_tasks.rake +4 -0
  74. metadata +247 -0
@@ -0,0 +1,10 @@
1
+ Rails.application.config.assets.precompile += %w(
2
+ better_rails_debugger/jquery.min.js
3
+ better_rails_debugger/bootstrap.min.js
4
+ better_rails_debugger/moment.min.js
5
+ better_rails_debugger/place.min.js
6
+ better_rails_debugger/popper.min.js
7
+ better_rails_debugger/Chart.min.js
8
+ better_rails_debugger/prism.css
9
+ better_rails_debugger/prism.js
10
+ )
@@ -0,0 +1,160 @@
1
+ development:
2
+ # Configure available database clients. (required)
3
+ clients:
4
+ # Defines the default client. (required)
5
+ default:
6
+ # Defines the name of the default database that Mongoid can connect to.
7
+ # (required).
8
+ database: dummy_development
9
+ # Provides the hosts the default client can connect to. Must be an array
10
+ # of host:port pairs. (required)
11
+ hosts:
12
+ - localhost:27017
13
+ options:
14
+ # Change the default write concern. (default = { w: 1 })
15
+ # write:
16
+ # w: 1
17
+
18
+ # Change the default read preference. Valid options for mode are: :secondary,
19
+ # :secondary_preferred, :primary, :primary_preferred, :nearest
20
+ # (default: primary)
21
+ # read:
22
+ # mode: :secondary_preferred
23
+ # tag_sets:
24
+ # - use: web
25
+
26
+ # The name of the user for authentication.
27
+ # user: 'user'
28
+
29
+ # The password of the user for authentication.
30
+ # password: 'password'
31
+
32
+ # The user's database roles.
33
+ # roles:
34
+ # - 'dbOwner'
35
+
36
+ # Change the default authentication mechanism. Valid options are: :scram,
37
+ # :mongodb_cr, :mongodb_x509, and :plain. Note that all authentication
38
+ # mechanisms require username and password, with the exception of :mongodb_x509.
39
+ # Default on mongoDB 3.0 is :scram, default on 2.4 and 2.6 is :plain.
40
+ # auth_mech: :scram
41
+
42
+ # The database or source to authenticate the user against.
43
+ # (default: the database specified above or admin)
44
+ # auth_source: admin
45
+
46
+ # Force a the driver cluster to behave in a certain manner instead of auto-
47
+ # discovering. Can be one of: :direct, :replica_set, :sharded. Set to :direct
48
+ # when connecting to hidden members of a replica set.
49
+ # connect: :direct
50
+
51
+ # Changes the default time in seconds the server monitors refresh their status
52
+ # via ismaster commands. (default: 10)
53
+ # heartbeat_frequency: 10
54
+
55
+ # The time in seconds for selecting servers for a near read preference. (default: 0.015)
56
+ # local_threshold: 0.015
57
+
58
+ # The timeout in seconds for selecting a server for an operation. (default: 30)
59
+ # server_selection_timeout: 30
60
+
61
+ # The maximum number of connections in the connection pool. (default: 5)
62
+ # max_pool_size: 5
63
+
64
+ # The minimum number of connections in the connection pool. (default: 1)
65
+ # min_pool_size: 1
66
+
67
+ # The time to wait, in seconds, in the connection pool for a connection
68
+ # to be checked in before timing out. (default: 5)
69
+ # wait_queue_timeout: 5
70
+
71
+ # The time to wait to establish a connection before timing out, in seconds.
72
+ # (default: 5)
73
+ # connect_timeout: 5
74
+
75
+ # The timeout to wait to execute operations on a socket before raising an error.
76
+ # (default: 5)
77
+ # socket_timeout: 5
78
+
79
+ # The name of the replica set to connect to. Servers provided as seeds that do
80
+ # not belong to this replica set will be ignored.
81
+ # replica_set: name
82
+
83
+ # Whether to connect to the servers via ssl. (default: false)
84
+ # ssl: true
85
+
86
+ # The certificate file used to identify the connection against MongoDB.
87
+ # ssl_cert: /path/to/my.cert
88
+
89
+ # The private keyfile used to identify the connection against MongoDB.
90
+ # Note that even if the key is stored in the same file as the certificate,
91
+ # both need to be explicitly specified.
92
+ # ssl_key: /path/to/my.key
93
+
94
+ # A passphrase for the private key.
95
+ # ssl_key_pass_phrase: password
96
+
97
+ # Whether or not to do peer certification validation. (default: true)
98
+ # ssl_verify: true
99
+
100
+ # The file containing a set of concatenated certification authority certifications
101
+ # used to validate certs passed from the other end of the connection.
102
+ # ssl_ca_cert: /path/to/ca.cert
103
+
104
+
105
+ # Configure Mongoid specific options. (optional)
106
+ options:
107
+ # Includes the root model name in json serialization. (default: false)
108
+ # include_root_in_json: false
109
+
110
+ # Include the _type field in serialization. (default: false)
111
+ # include_type_for_serialization: false
112
+
113
+ # Preload all models in development, needed when models use
114
+ # inheritance. (default: false)
115
+ # preload_models: false
116
+
117
+ # Raise an error when performing a #find and the document is not found.
118
+ # (default: true)
119
+ # raise_not_found_error: true
120
+
121
+ # Raise an error when defining a scope with the same name as an
122
+ # existing method. (default: false)
123
+ # scope_overwrite_exception: false
124
+
125
+ # Raise an error when defining a field with the same name as an
126
+ # existing method. (default: false)
127
+ # duplicate_fields_exception: false
128
+
129
+ # Use Active Support's time zone in conversions. (default: true)
130
+ # use_activesupport_time_zone: true
131
+
132
+ # Ensure all times are UTC in the app side. (default: false)
133
+ # use_utc: false
134
+
135
+ # Set the Mongoid and Ruby driver log levels when not in a Rails
136
+ # environment. The Mongoid logger will be set to the Rails logger
137
+ # otherwise.(default: :info)
138
+ # log_level: :info
139
+
140
+ # Control whether `belongs_to` association is required. By default
141
+ # `belongs_to` will trigger a validation error if the association
142
+ # is not present. (default: true)
143
+ # belongs_to_required_by_default: true
144
+
145
+ # Application name that is printed to the mongodb logs upon establishing a
146
+ # connection in server versions >= 3.4. Note that the name cannot exceed 128 bytes.
147
+ # app_name: MyApplicationName
148
+
149
+ # Use background indexes by default if `background` option not specified. (default: false)
150
+ # background_indexing: false
151
+ test:
152
+ clients:
153
+ default:
154
+ database: dummy_test
155
+ hosts:
156
+ - localhost:27017
157
+ options:
158
+ read:
159
+ mode: :primary
160
+ max_pool_size: 1
data/config/routes.rb ADDED
@@ -0,0 +1,21 @@
1
+ BetterRailsDebugger::Engine.routes.draw do
2
+ # NEW
3
+ resources :analysis_groups
4
+
5
+ resources :group_instances do
6
+ member do
7
+ get 'objects'
8
+ get 'code'
9
+ end
10
+ end
11
+
12
+ # OLD
13
+ root 'analysis_groups#index'
14
+
15
+ resources :memory, only: [:index, :show] do
16
+ member do
17
+ get 'analyze'
18
+ end
19
+ end
20
+
21
+ end
@@ -0,0 +1,45 @@
1
+ module BetterRailsDebugger
2
+ class Configuration
3
+ include Singleton
4
+
5
+ attr_reader :mongoid_config_file
6
+
7
+ def initialize
8
+ Mongoid.logger.level = Logger::FATAL
9
+ end
10
+
11
+ # Set MongoID configuration file
12
+ def mongoid_config_file=(file_path)
13
+ raise LoadError.new "File #{file_path} not found" if !File.exist? file_path
14
+ @mongoid_config_file = file_path
15
+ end
16
+
17
+ # Skip globally, the analysis of all classes added here
18
+ def skip_classes=(list)
19
+ return @skip_classes if @skip_classes
20
+ raise ArgumentError.new "Expected Array, got #{list.class}" if !list.kind_of? Array
21
+ raise ArgumentError.new "Array must contain classes and mondules names only" if list.any? {|a| !a.class.kind_of?(Class)}
22
+ @skip_classes ||= list
23
+ end
24
+
25
+ def skip_classes
26
+ @skip_classes || []
27
+ end
28
+
29
+ private
30
+
31
+ def classes_to_skip
32
+ @classes_to_skip ||= ruby_classes + skip_classes
33
+ end
34
+
35
+ def ruby_classes
36
+ @ruby_classes ||= %w{
37
+
38
+ }.map(&:constantize)
39
+ end
40
+ end
41
+
42
+ def self.configure(&block)
43
+ block.call Configuration.instance
44
+ end
45
+ end
@@ -0,0 +1,5 @@
1
+ module BetterRailsDebugger
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace BetterRailsDebugger
4
+ end
5
+ end
@@ -0,0 +1,109 @@
1
+ require 'objspace'
2
+
3
+ module BetterRailsDebugger
4
+ class MemoryAnalyzer
5
+ include Singleton
6
+
7
+
8
+ def analyze(identifier, group_id)
9
+ begin
10
+ group = ::BetterRailsDebugger::AnalysisGroup.find group_id
11
+ rescue Mongoid::Errors::DocumentNotFound
12
+ # If the group does not exist, just run the code and return
13
+ yield
14
+ return
15
+ end
16
+ # If we reached the max time to execute the code, just execute the code and do not collect information
17
+ if times_to_run_exceeded?(group) or skip_instance?(group, identifier)
18
+ yield
19
+ else
20
+ ::ObjectSpace.trace_object_allocations do
21
+ yield
22
+ collect_information(identifier, group_id)
23
+ end
24
+ end
25
+ end
26
+
27
+ # Clean ObjectSpace abject allocation tracer history
28
+ def clear_tracking
29
+ ::ObjectSpace.trace_object_allocations_clear
30
+ end
31
+
32
+ def times_to_run_exceeded?(group)
33
+ group.times_to_run.to_i > 0 and group.group_instances.count >= group.times_to_run
34
+ end
35
+
36
+ def skip_instance?(group, identifier)
37
+ !group.analyze_repeated_instances and GroupInstance.where(identifier: identifier, analysis_group: group.id).count > 0
38
+ end
39
+
40
+ # Record into db, information about object creation
41
+ def collect_information(identifier, group_id)
42
+ group = ::BetterRailsDebugger::AnalysisGroup.find group_id
43
+ if not group.present?
44
+ Rails.logger.error "[BetterRailsDebugger] Group '#{recorded[:group_id]}' not found. Skiping..."
45
+ return
46
+ end
47
+
48
+ # Load Mongo db if required
49
+ if not Mongoid::Config.configured?
50
+ Mongoid.load!(BetterRailsDebugger::Configuration.instance.mongoid_config_file, Rails.env.to_sym)
51
+ Mongoid.logger.level = Logger::FATAL
52
+ end
53
+
54
+ instance = ::BetterRailsDebugger::GroupInstance.create identifier: identifier, analysis_group_id: group_id, caller_file: caller[3][/[^:]+/]
55
+
56
+ collect_memory_information(instance)
57
+
58
+ # Now, it's time to analyze all collected data and generate a report
59
+ ::BetterRailsDebugger::AnalysisRecorderJob.perform_later({ instance_id: instance.id.to_s })
60
+ end
61
+
62
+ private
63
+
64
+ def collect_memory_information(instance)
65
+ objects = []
66
+ return if !instance.analysis_group.collect_memory_information
67
+ ObjectSpace.each_object(Object) do |obj|
68
+
69
+ next if !all_valid_classes[obj.class]
70
+
71
+ source_line = ObjectSpace.allocation_sourcefile(obj)
72
+
73
+ # Do not track objects that we don't know where comes from
74
+ next if !source_line
75
+
76
+ next if !instance.track_allocation_of? source_line
77
+
78
+ meta = {
79
+ ruby_object_id: obj.object_id,
80
+ source_file: source_line,
81
+ source_line: ObjectSpace.allocation_sourceline(obj),
82
+ memsize: ObjectSpace.memsize_of(obj),
83
+ class_name: obj.class.name,
84
+ group_instance_id: instance.id
85
+ }
86
+
87
+ # Add extra conditional metadata here....
88
+
89
+ objects << meta
90
+ end
91
+ ::BetterRailsDebugger::ObjectInformation.collection.insert_many(objects)
92
+ end
93
+
94
+ def all_valid_classes
95
+ return @all_valid_classes if @all_valid_classes
96
+ if !@all_classes
97
+ @all_classes = []
98
+ ObjectSpace.each_object(Class) do |klass|
99
+ @all_classes << klass
100
+ end
101
+ end
102
+ @all_valid_classes = Hash.new false
103
+ (@all_classes - ::BetterRailsDebugger::Configuration.instance.send(:classes_to_skip)).each do |klass|
104
+ @all_valid_classes[klass] = true
105
+ end
106
+ @all_valid_classes
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,3 @@
1
+ module BetterRailsDebugger
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,16 @@
1
+ require "better_rails_debugger/engine"
2
+ require "mongoid"
3
+ require "haml"
4
+ require "will_paginate_mongoid"
5
+ require "will_paginate-bootstrap4"
6
+ require "rouge"
7
+ require "font-awesome-rails"
8
+
9
+ require "better_rails_debugger/config"
10
+ require "better_rails_debugger/memory_analyzer"
11
+
12
+ Haml.init_rails(binding)
13
+
14
+ module BetterRailsDebugger
15
+ # Your code goes here...
16
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :better_rails_debugger do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,247 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: better_rails_debugger
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Andres Jose Borek
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-03-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 5.1.5
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '6.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: 5.1.5
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '6.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: haml-rails
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.0'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '2.0'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.0'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '2.0'
53
+ - !ruby/object:Gem::Dependency
54
+ name: mongoid
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 7.0.0.beta
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: '8.0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 7.0.0.beta
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: '8.0'
73
+ - !ruby/object:Gem::Dependency
74
+ name: will_paginate_mongoid
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ type: :runtime
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ - !ruby/object:Gem::Dependency
88
+ name: will_paginate-bootstrap4
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ type: :runtime
95
+ prerelease: false
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ - !ruby/object:Gem::Dependency
102
+ name: rouge
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: '3.1'
108
+ type: :runtime
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - "~>"
113
+ - !ruby/object:Gem::Version
114
+ version: '3.1'
115
+ - !ruby/object:Gem::Dependency
116
+ name: font-awesome-rails
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ type: :runtime
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ - !ruby/object:Gem::Dependency
130
+ name: sqlite3
131
+ requirement: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ type: :development
137
+ prerelease: false
138
+ version_requirements: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ description: Better rails debugger can analyze memory issues only by the moment, but
144
+ performance is planned.
145
+ email:
146
+ - andres.b.dev@gmail.com
147
+ executables: []
148
+ extensions: []
149
+ extra_rdoc_files: []
150
+ files:
151
+ - MIT-LICENSE
152
+ - README.md
153
+ - Rakefile
154
+ - app/assets/config/better_rails_debugger_manifest.js
155
+ - app/assets/images/avatars/1.jpg
156
+ - app/assets/images/avatars/2.jpg
157
+ - app/assets/images/avatars/3.jpg
158
+ - app/assets/images/avatars/4.jpg
159
+ - app/assets/images/avatars/5.jpg
160
+ - app/assets/images/avatars/6.jpg
161
+ - app/assets/images/avatars/7.jpg
162
+ - app/assets/images/avatars/8.jpg
163
+ - app/assets/images/favicon.png
164
+ - app/assets/images/logo-symbol.png
165
+ - app/assets/images/logo.png
166
+ - app/assets/javascripts/better_rails_debugger/Chart.min.js
167
+ - app/assets/javascripts/better_rails_debugger/app.js
168
+ - app/assets/javascripts/better_rails_debugger/application.js
169
+ - app/assets/javascripts/better_rails_debugger/bootstrap.min.js
170
+ - app/assets/javascripts/better_rails_debugger/jquery-3.0.0.min.js
171
+ - app/assets/javascripts/better_rails_debugger/jquery.min.js
172
+ - app/assets/javascripts/better_rails_debugger/moment.min.js
173
+ - app/assets/javascripts/better_rails_debugger/pace.min.js
174
+ - app/assets/javascripts/better_rails_debugger/popper.min.js
175
+ - app/assets/javascripts/better_rails_debugger/popper.min.js.map
176
+ - app/assets/javascripts/better_rails_debugger/prism.js
177
+ - app/assets/javascripts/better_rails_debugger/views/charts.js
178
+ - app/assets/javascripts/better_rails_debugger/views/main.js
179
+ - app/assets/javascripts/better_rails_debugger/views/popovers.js
180
+ - app/assets/javascripts/better_rails_debugger/views/tooltips.js
181
+ - app/assets/javascripts/better_rails_debugger/views/widgets.js
182
+ - app/assets/stylesheets/better_rails_debugger/analysis_group_controller.css
183
+ - app/assets/stylesheets/better_rails_debugger/application.scss
184
+ - app/assets/stylesheets/better_rails_debugger/group_instances_controller.css
185
+ - app/assets/stylesheets/better_rails_debugger/memory.css
186
+ - app/assets/stylesheets/better_rails_debugger/prism.css
187
+ - app/assets/stylesheets/better_rails_debugger/style.min.css
188
+ - app/controllers/better_rails_debugger/analysis_groups_controller.rb
189
+ - app/controllers/better_rails_debugger/application_controller.rb
190
+ - app/controllers/better_rails_debugger/group_instances_controller.rb
191
+ - app/controllers/better_rails_debugger/memory_controller.rb
192
+ - app/helpers/better_rails_debugger/analysis_groups_helper.rb
193
+ - app/helpers/better_rails_debugger/application_helper.rb
194
+ - app/helpers/better_rails_debugger/group_instances_helper.rb
195
+ - app/helpers/better_rails_debugger/memory_helper.rb
196
+ - app/jobs/better_rails_debugger/analysis_recorder_job.rb
197
+ - app/jobs/better_rails_debugger/application_job.rb
198
+ - app/mailers/better_rails_debugger/application_mailer.rb
199
+ - app/models/better_rails_debugger/analysis_group.rb
200
+ - app/models/better_rails_debugger/application_record.rb
201
+ - app/models/better_rails_debugger/group_instance.rb
202
+ - app/models/better_rails_debugger/object_information.rb
203
+ - app/views/better_rails_debugger/analysis_groups/_form.html.haml
204
+ - app/views/better_rails_debugger/analysis_groups/edit.html.haml
205
+ - app/views/better_rails_debugger/analysis_groups/index.html.haml
206
+ - app/views/better_rails_debugger/analysis_groups/new.html.haml
207
+ - app/views/better_rails_debugger/analysis_groups/show.html.haml
208
+ - app/views/better_rails_debugger/group_instances/objects.html.haml
209
+ - app/views/better_rails_debugger/memory/index.html.haml
210
+ - app/views/better_rails_debugger/memory/show.html.haml
211
+ - app/views/better_rails_debugger/shared/_header.html.haml
212
+ - app/views/better_rails_debugger/shared/_sidebar.html.haml
213
+ - app/views/layouts/better_rails_debugger/application.html.erb
214
+ - config/initializers/setup.rb
215
+ - config/mongoid.yml
216
+ - config/routes.rb
217
+ - lib/better_rails_debugger.rb
218
+ - lib/better_rails_debugger/config.rb
219
+ - lib/better_rails_debugger/engine.rb
220
+ - lib/better_rails_debugger/memory_analyzer.rb
221
+ - lib/better_rails_debugger/version.rb
222
+ - lib/tasks/better_rails_debugger_tasks.rake
223
+ homepage: ''
224
+ licenses:
225
+ - MIT
226
+ metadata: {}
227
+ post_install_message:
228
+ rdoc_options: []
229
+ require_paths:
230
+ - lib
231
+ required_ruby_version: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: '2.4'
236
+ required_rubygems_version: !ruby/object:Gem::Requirement
237
+ requirements:
238
+ - - ">="
239
+ - !ruby/object:Gem::Version
240
+ version: '0'
241
+ requirements: []
242
+ rubyforge_project:
243
+ rubygems_version: 2.6.12
244
+ signing_key:
245
+ specification_version: 4
246
+ summary: Tool that helps you to debug memory issues and others.
247
+ test_files: []