better_rails_debugger 0.0.2 → 0.0.3
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.
- checksums.yaml +4 -4
- data/README.md +7 -0
- data/app/controllers/better_rails_debugger/group_instances_controller.rb +22 -15
- data/app/jobs/better_rails_debugger/analysis_recorder_job.rb +7 -5
- data/app/models/better_rails_debugger/group_instance.rb +10 -2
- data/app/views/better_rails_debugger/group_instances/_stats_summary.html.haml +28 -0
- data/app/views/better_rails_debugger/group_instances/objects.html.haml +2 -0
- data/lib/better_rails_debugger.rb +0 -1
- data/lib/better_rails_debugger/memory_analyzer.rb +1 -1
- data/lib/better_rails_debugger/version.rb +1 -1
- metadata +3 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 378633b02ace347f31f2e5350248b08903e24e87
|
4
|
+
data.tar.gz: cf4e8e7b1614196b194ef32060c46a24237bac98
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 454b43fb094ea115cb30bdd1aa700dcb73b5cf5aaae41bbce2019e2c7e9c0cb62c0c2e497ba5fc91f2ffe5ebee5426a595f202f4d23cc13538963a2999474933
|
7
|
+
data.tar.gz: ea0d02c5e10418a224e075d0e9eab163b3bc57e9fa4a31f204c6a1d9f1c18e6990ece288207baa946e8c0f671173b134d27a414d86e01c4b3e548e88b7fc7443
|
data/README.md
CHANGED
@@ -43,6 +43,13 @@ bundle exec sidekiq
|
|
43
43
|
|
44
44
|
3) Set MongoID database.yml file:
|
45
45
|
|
46
|
+
In rails 5 run:
|
47
|
+
```ruby
|
48
|
+
rails g mongoid:config
|
49
|
+
```
|
50
|
+
|
51
|
+
change the file configuration and/or rename it.
|
52
|
+
|
46
53
|
Create an initializer to configure like `config/initializers/better_ruby_debugger.rb`
|
47
54
|
|
48
55
|
```ruby
|
@@ -10,6 +10,28 @@ module BetterRailsDebugger
|
|
10
10
|
return
|
11
11
|
end
|
12
12
|
@objects = @instance.objects.order(created_at: 'desc').limit(20)
|
13
|
+
filter
|
14
|
+
@objects = @objects.paginate(page: (params[:page] || 1), per_page: 20)
|
15
|
+
|
16
|
+
@file_allocations = @instance.files_with_more_allocations(4)
|
17
|
+
end
|
18
|
+
|
19
|
+
def code
|
20
|
+
begin
|
21
|
+
@object = ObjectInformation.find(params[:object_id])
|
22
|
+
rescue Mongoid::Errors::DocumentNotFound
|
23
|
+
redirect_to group_instance_path(params[:id]), flash: {error: 'Object not found'}
|
24
|
+
return
|
25
|
+
end
|
26
|
+
# Verify object existence
|
27
|
+
theme = Rouge::Themes::Github.new
|
28
|
+
formatter = Rouge::Formatters::HTMLInline.new theme
|
29
|
+
lexer = Rouge::Lexers::Ruby.new
|
30
|
+
render plain: formatter.format(lexer.lex(@object.source_code || ""))
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
def filter
|
13
35
|
if ['asc', 'desc'].include? params[:order] and ['location', 'memsize', 'class'].include? params[:column]
|
14
36
|
if params[:column] == 'location'
|
15
37
|
@objects = @objects.order({source_file: params[:order], source_line: params[:order]})
|
@@ -26,21 +48,6 @@ module BetterRailsDebugger
|
|
26
48
|
{class_name: /.*#{params[:filter]}.*/i})
|
27
49
|
pp @objects
|
28
50
|
end
|
29
|
-
@objects = @objects.paginate(page: (params[:page] || 1), per_page: 20)
|
30
|
-
end
|
31
|
-
|
32
|
-
def code
|
33
|
-
begin
|
34
|
-
@object = ObjectInformation.find(params[:object_id])
|
35
|
-
rescue Mongoid::Errors::DocumentNotFound
|
36
|
-
redirect_to group_instance_path(params[:id]), flash: {error: 'Object not found'}
|
37
|
-
return
|
38
|
-
end
|
39
|
-
# Verify object existence
|
40
|
-
theme = Rouge::Themes::Github.new
|
41
|
-
formatter = Rouge::Formatters::HTMLInline.new theme
|
42
|
-
lexer = Rouge::Lexers::Ruby.new
|
43
|
-
render plain: formatter.format(lexer.lex(@object.source_code || ""))
|
44
51
|
end
|
45
52
|
end
|
46
53
|
end
|
@@ -18,17 +18,19 @@ module BetterRailsDebugger
|
|
18
18
|
# Now, with the group present... we can start to work on it
|
19
19
|
# group = instance.analysis_group
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
lexer = Rouge::Lexers::Ruby.new
|
24
|
-
|
21
|
+
allocations_per_file = Hash.new(0)
|
22
|
+
memsize_per_file = Hash.new(0)
|
25
23
|
instance.objects.all.each do |object|
|
24
|
+
allocations_per_file[object.source_file] += 1
|
25
|
+
memsize_per_file[object.source_file] += object.memsize
|
26
26
|
start = (l = object.source_line - 4) >= 0 ? l : 0
|
27
27
|
# TODO: Optimize this
|
28
28
|
object.source_code = IO.readlines(object.source_file)[start..(object.source_line + 4)].join("\n")
|
29
|
-
# object.formatted_source_code = formatter.format(lexer.lex(object.source_code || ""))
|
30
29
|
object.save
|
31
30
|
end
|
31
|
+
instance.allocations_per_file = allocations_per_file.to_json
|
32
|
+
instance.memsize_per_file = memsize_per_file.to_json
|
33
|
+
instance.save
|
32
34
|
|
33
35
|
end
|
34
36
|
end
|
@@ -15,17 +15,25 @@ module BetterRailsDebugger
|
|
15
15
|
field :total_classes, type: Integer # Total number of used Classes
|
16
16
|
field :total_memory, type: Integer # Total memory used in bytes
|
17
17
|
field :total_files, type: Integer # Total file used on allocation
|
18
|
-
field :allocations_per_file, type: Hash # Hash with `file => num_allocations`
|
19
|
-
field :inverse_allocation_per_file, type: Hash # Hash with `allocations => Array<files>`
|
20
18
|
|
21
19
|
# Internal use
|
22
20
|
field :caller_file, type: String
|
21
|
+
field :allocations_per_file, type: String
|
22
|
+
field :memsize_per_file, type: String
|
23
23
|
|
24
24
|
def track_allocation_of?(path)
|
25
25
|
return true if match_file_list?(path) or called_from_caller_file?(path)
|
26
26
|
false
|
27
27
|
end
|
28
28
|
|
29
|
+
def files_with_more_allocations(n)
|
30
|
+
JSON.parse(allocations_per_file).to_a.sort_by do |a| a[1] end.reverse[0..n]
|
31
|
+
end
|
32
|
+
|
33
|
+
def files_that_use_more_memory(n)
|
34
|
+
JSON.parse(memsize_per_file).to_a.sort_by do |a| a[1] end.reverse[0..n]
|
35
|
+
end
|
36
|
+
|
29
37
|
private
|
30
38
|
def match_file_list?(path)
|
31
39
|
analysis_group.analise_paths.any? do |regexp|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
.stats.d-flex
|
2
|
+
.card.col-6
|
3
|
+
.card-body
|
4
|
+
%h4.card-title Files with more allocations
|
5
|
+
%table.table
|
6
|
+
%thead.bg-secondary.text-white
|
7
|
+
%tr.d-flex
|
8
|
+
%th.col-10 File
|
9
|
+
%th.col-2 Allocations
|
10
|
+
%tbody
|
11
|
+
- @instance.files_with_more_allocations(4).each do |file|
|
12
|
+
%tr.d-flex
|
13
|
+
%td.col-10.text-primary= file[0]
|
14
|
+
%td.col-2= file[1]
|
15
|
+
|
16
|
+
.card.col-6
|
17
|
+
.card-body
|
18
|
+
%h4.card-title Files that consume more memory
|
19
|
+
%table.table
|
20
|
+
%thead.bg-secondary.text-white
|
21
|
+
%tr.d-flex
|
22
|
+
%th.col-10 File
|
23
|
+
%th.col-2 Allocations
|
24
|
+
%tbody
|
25
|
+
- @instance.files_that_use_more_memory(4).each do |file|
|
26
|
+
%tr.d-flex
|
27
|
+
%td.col-10.text-primary= file[0]
|
28
|
+
%td.col-2= "~ #{number_to_human_size file[1]}"
|
@@ -36,6 +36,8 @@
|
|
36
36
|
those objects that are created from the moment that a request arrive to a controller. Everythinng else, like
|
37
37
|
objects created by Middlewares, are not been tracked because performance.
|
38
38
|
|
39
|
+
= render partial: 'better_rails_debugger/group_instances/stats_summary'
|
40
|
+
|
39
41
|
%h3 Filter
|
40
42
|
%form{url: objects_group_instance_path(@instance, column: params[:column], order: params[:order]), method: "get"}
|
41
43
|
.form-group.d-flex
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: better_rails_debugger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andres Jose Borek
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -98,20 +98,6 @@ dependencies:
|
|
98
98
|
- - ">="
|
99
99
|
- !ruby/object:Gem::Version
|
100
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
101
|
- !ruby/object:Gem::Dependency
|
116
102
|
name: font-awesome-rails
|
117
103
|
requirement: !ruby/object:Gem::Requirement
|
@@ -205,6 +191,7 @@ files:
|
|
205
191
|
- app/views/better_rails_debugger/analysis_groups/index.html.haml
|
206
192
|
- app/views/better_rails_debugger/analysis_groups/new.html.haml
|
207
193
|
- app/views/better_rails_debugger/analysis_groups/show.html.haml
|
194
|
+
- app/views/better_rails_debugger/group_instances/_stats_summary.html.haml
|
208
195
|
- app/views/better_rails_debugger/group_instances/objects.html.haml
|
209
196
|
- app/views/better_rails_debugger/memory/index.html.haml
|
210
197
|
- app/views/better_rails_debugger/memory/show.html.haml
|