stackprofiler 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/Guardfile +3 -0
  3. data/README.md +42 -2
  4. data/bin/stackprofiler +5 -0
  5. data/config.ru +5 -0
  6. data/lib/stackprofiler/data_collector.rb +17 -4
  7. data/lib/stackprofiler/filters/build_tree.rb +49 -0
  8. data/lib/stackprofiler/filters/compress_tree.rb +11 -14
  9. data/lib/stackprofiler/filters/frame_regex_removal.rb +22 -0
  10. data/lib/stackprofiler/filters/gem_removal.rb +16 -0
  11. data/lib/stackprofiler/filters/js_tree.rb +13 -3
  12. data/lib/stackprofiler/filters/quick_method_removal.rb +18 -0
  13. data/lib/stackprofiler/filters/rebase_stack.rb +25 -0
  14. data/lib/stackprofiler/middleware.rb +1 -1
  15. data/lib/stackprofiler/run_data_source.rb +18 -0
  16. data/lib/stackprofiler/utils.rb +50 -0
  17. data/lib/stackprofiler/version.rb +1 -1
  18. data/lib/stackprofiler/web_ui/public/js/stackprofiler.js +103 -0
  19. data/lib/stackprofiler/web_ui/public/{css → vendor/css}/bootstrap-theme.css +0 -0
  20. data/lib/stackprofiler/web_ui/public/{css → vendor/css}/bootstrap-theme.css.map +0 -0
  21. data/lib/stackprofiler/web_ui/public/{css → vendor/css}/bootstrap-theme.min.css +0 -0
  22. data/lib/stackprofiler/web_ui/public/{css → vendor/css}/bootstrap.css +0 -0
  23. data/lib/stackprofiler/web_ui/public/{css → vendor/css}/bootstrap.css.map +0 -0
  24. data/lib/stackprofiler/web_ui/public/{css → vendor/css}/bootstrap.min.css +0 -0
  25. data/lib/stackprofiler/web_ui/public/{css → vendor/css}/coderay.css +0 -0
  26. data/lib/stackprofiler/web_ui/public/{css → vendor/css}/jquery-ui.css +0 -0
  27. data/lib/stackprofiler/web_ui/public/{css → vendor/css}/splitter.css +0 -0
  28. data/lib/stackprofiler/web_ui/public/vendor/d3/d3.min.js +5 -0
  29. data/lib/stackprofiler/web_ui/public/vendor/epoch/epoch.min.css +1 -0
  30. data/lib/stackprofiler/web_ui/public/vendor/epoch/epoch.min.js +114 -0
  31. data/lib/stackprofiler/web_ui/public/{fonts → vendor/fonts}/glyphicons-halflings-regular.eot +0 -0
  32. data/lib/stackprofiler/web_ui/public/{fonts → vendor/fonts}/glyphicons-halflings-regular.svg +0 -0
  33. data/lib/stackprofiler/web_ui/public/{fonts → vendor/fonts}/glyphicons-halflings-regular.ttf +0 -0
  34. data/lib/stackprofiler/web_ui/public/{fonts → vendor/fonts}/glyphicons-halflings-regular.woff +0 -0
  35. data/lib/stackprofiler/web_ui/public/vendor/jquery-ui/.DS_Store +0 -0
  36. data/lib/stackprofiler/web_ui/public/vendor/jquery-ui/jquery-ui.min.css +7 -0
  37. data/lib/stackprofiler/web_ui/public/vendor/jquery-ui/jquery-ui.min.js +13 -0
  38. data/lib/stackprofiler/web_ui/public/{js → vendor/js}/bootstrap.js +0 -0
  39. data/lib/stackprofiler/web_ui/public/{js → vendor/js}/bootstrap.min.js +0 -0
  40. data/lib/stackprofiler/web_ui/public/{js → vendor/js}/jquery.min.js +0 -0
  41. data/lib/stackprofiler/web_ui/public/{js → vendor/js}/splitter.js +0 -0
  42. data/lib/stackprofiler/web_ui/public/{jstree → vendor/jstree}/jstree.js +0 -0
  43. data/lib/stackprofiler/web_ui/public/{jstree → vendor/jstree}/jstree.min.js +0 -0
  44. data/lib/stackprofiler/web_ui/public/{jstree → vendor/jstree}/themes/default/32px.png +0 -0
  45. data/lib/stackprofiler/web_ui/public/{jstree → vendor/jstree}/themes/default/40px.png +0 -0
  46. data/lib/stackprofiler/web_ui/public/{jstree → vendor/jstree}/themes/default/style.css +0 -0
  47. data/lib/stackprofiler/web_ui/public/{jstree → vendor/jstree}/themes/default/style.min.css +0 -0
  48. data/lib/stackprofiler/web_ui/public/{jstree → vendor/jstree}/themes/default/throbber.gif +0 -0
  49. data/lib/stackprofiler/web_ui/public/{jstree → vendor/jstree}/themes/default-dark/32px.png +0 -0
  50. data/lib/stackprofiler/web_ui/public/{jstree → vendor/jstree}/themes/default-dark/40px.png +0 -0
  51. data/lib/stackprofiler/web_ui/public/{jstree → vendor/jstree}/themes/default-dark/style.css +0 -0
  52. data/lib/stackprofiler/web_ui/public/{jstree → vendor/jstree}/themes/default-dark/style.min.css +0 -0
  53. data/lib/stackprofiler/web_ui/public/{jstree → vendor/jstree}/themes/default-dark/throbber.gif +0 -0
  54. data/lib/stackprofiler/web_ui/public/vendor/lodash/lodash.min.js +56 -0
  55. data/lib/stackprofiler/web_ui/public/{octicons → vendor/octicons}/LICENSE.txt +0 -0
  56. data/lib/stackprofiler/web_ui/public/{octicons → vendor/octicons}/README.md +0 -0
  57. data/lib/stackprofiler/web_ui/public/{octicons → vendor/octicons}/octicons-local.ttf +0 -0
  58. data/lib/stackprofiler/web_ui/public/{octicons → vendor/octicons}/octicons.css +0 -0
  59. data/lib/stackprofiler/web_ui/public/{octicons → vendor/octicons}/octicons.eot +0 -0
  60. data/lib/stackprofiler/web_ui/public/{octicons → vendor/octicons}/octicons.less +0 -0
  61. data/lib/stackprofiler/web_ui/public/{octicons → vendor/octicons}/octicons.svg +0 -0
  62. data/lib/stackprofiler/web_ui/public/{octicons → vendor/octicons}/octicons.ttf +0 -0
  63. data/lib/stackprofiler/web_ui/public/{octicons → vendor/octicons}/octicons.woff +0 -0
  64. data/lib/stackprofiler/web_ui/public/{octicons → vendor/octicons}/sprockets-octicons.scss +0 -0
  65. data/lib/stackprofiler/web_ui/public/vendor/tokenfield/.DS_Store +0 -0
  66. data/lib/stackprofiler/web_ui/public/vendor/tokenfield/bootstrap-tokenfield.min.css +5 -0
  67. data/lib/stackprofiler/web_ui/public/vendor/tokenfield/bootstrap-tokenfield.min.js +7 -0
  68. data/lib/stackprofiler/web_ui/views/code.erb +6 -7
  69. data/lib/stackprofiler/web_ui/views/index.erb +106 -26
  70. data/lib/stackprofiler/web_ui/views/layout.erb +33 -9
  71. data/lib/stackprofiler/web_ui.rb +107 -54
  72. data/lib/stackprofiler.rb +9 -2
  73. data/stackprofiler.gemspec +12 -1
  74. metadata +219 -44
  75. data/lib/stackprofiler/filters/stackprofiler_elision.rb +0 -12
@@ -1,32 +1,39 @@
1
1
  module Stackprofiler
2
- module Filter
3
- class QuickMethodElision
4
- def filter root, frames
5
- root.each do |node|
6
- next if node == root
7
-
8
- addr = node.name.to_i
9
- frame = frames[addr]
10
- if frame[:samples] < 10
11
- parent = node.parent
12
- node.remove_from_parent!
13
-
14
- node.children.each do |n|
15
- n.remove_from_parent!
16
- parent << n
17
- end
18
- end
19
- end
20
- root
21
- end
22
- end
23
- end
24
-
25
2
  class WebUI < Sinatra::Base
26
3
  helpers Sinatra::ContentFor
27
4
  set :views, proc { File.join(root, 'web_ui', 'views') }
28
5
  set :public_folder, proc { File.join(root, 'web_ui', 'public') }
29
6
 
7
+ def initialize(options={})
8
+ if options[:file]
9
+ data = File.read options[:file]
10
+ run = Oj.load data
11
+ if run.is_a?(Hash) && run.has_key?(:frames)
12
+ run = Run.new 'unknown', run, Time.now
13
+ end
14
+
15
+ RunDataSource.runs << run
16
+ end
17
+
18
+ super
19
+ end
20
+
21
+ configure :development do
22
+ # require 'better_errors'
23
+ # use BetterErrors::Middleware
24
+ # BetterErrors.application_root = __dir__
25
+ end
26
+
27
+ before do
28
+ puts "starting #{request.path}"
29
+ @start_req = Time.now
30
+ end
31
+
32
+ after do
33
+ duration = Time.now - @start_req
34
+ puts "finished #{request.path} (#{duration})"
35
+ end
36
+
30
37
  get '/' do
31
38
  @runs = RunDataSource.runs
32
39
  @run_id = params[:run_id].try(:to_i) || (@runs.count - 1)
@@ -45,7 +52,7 @@ module Stackprofiler
45
52
  content_type 'application/json'
46
53
  run_id = params[:run_id].to_i
47
54
  run = RunDataSource.runs[run_id]
48
- run.profile[:frames].to_json
55
+ run.profile[:frames].sort_by {|addr, frame| frame[:samples] }.to_json
49
56
  end
50
57
 
51
58
  get '/code/:addr' do
@@ -60,51 +67,97 @@ module Stackprofiler
60
67
  frame = frames[addr]
61
68
  halt 404 if frame.nil?
62
69
 
63
- file, first_line = frame.values_at :file, :line
64
- first_line ||= 1
65
-
66
- last_line = frame[:lines].keys.max || first_line + 5
67
- line_range = first_line..last_line
70
+ @file, @first_line = frame.values_at :file, :line
71
+ @first_line ||= 1
68
72
 
69
- @source = File.readlines(file).select.with_index {|line, idx| line_range.include? (idx + 1) }.join
73
+ @source = MethodSource::source_helper([@file, @first_line]).strip_heredoc
70
74
  @output = CodeRay.scan(@source, :ruby).div(wrap: nil).lines.map.with_index do |code, idx|
71
- line_index = idx + first_line
75
+ line_index = idx + @first_line
72
76
  samples = frame[:lines][line_index] || []
73
- {code: code, samples: samples.first}
77
+ {code: code, samples: samples.join('/') }
74
78
  end
75
79
 
76
- erb :code, layout: nil
80
+ erb :code, layout: nil, trim: '-'
81
+ end
82
+
83
+ get '/save' do
84
+ run_id = params[:run_id].to_i
85
+ run = RunDataSource.runs[run_id]
86
+
87
+ content_type 'application/octet-stream'
88
+ Marshal.dump(run.profile)
89
+ # Oj.dump(run)
77
90
  end
78
91
 
79
- get '/json' do
92
+ get '/frame_names' do
93
+ name = params[:term]
94
+ run_id = params[:run_id].to_i
95
+
96
+ run = RunDataSource.runs[run_id]
97
+ frames = run.profile[:frames]
98
+
99
+ matching = frames.select {|addr, f| f[:name].include? name }
100
+ results = matching.map {|addr, f| f[:name] }
101
+
102
+ content_type 'application/json'
103
+ Oj.dump(results, mode: :compat)
104
+ end
105
+
106
+ post '/receive' do
107
+ data = request.body.read
108
+ json = Oj.load(data)
109
+ run = Run.new 'unknown', json, Time.now
110
+ RunDataSource.runs << run
111
+
112
+ # if they sent us a profile, they probably changed something and want that reflected
113
+ # todo: remove hack
114
+ MethodSource::instance_variable_get(:@lines_for_file).try(:clear)
115
+
80
116
  content_type 'application/json'
117
+ {run_id: RunDataSource.runs.count - 1 }.to_json
118
+ end
119
+
120
+ get '/gem_breakdown' do
121
+ run_id = params[:run_id].to_i
122
+ run = RunDataSource.runs[run_id]
123
+
124
+ content_type 'application/json'
125
+ run.gem_breakdown.to_json
126
+ end
127
+
128
+ post '/json' do
129
+ json_params = Oj.strict_load(request.body.read, nil)
130
+ params.merge!(json_params)
81
131
 
82
132
  run_id = params[:run_id].to_i
83
133
  run = RunDataSource.runs[run_id]
84
134
  frames = run.profile[:frames]
85
- stacks = run.stacks
86
-
87
- root_addr = stacks[0][0].to_s
88
- root = Tree::TreeNode.new root_addr, {text: 'root', addrs: [root_addr]}
89
-
90
- stacks.each do |stack|
91
- prev = root
92
- stack.each do |addr|
93
- addr = addr.to_s
94
- node = prev[addr]
95
- if node.nil?
96
- hash = {count: 0, text: frames[addr.to_i][:name], addrs: [addr]}
97
- node = Tree::TreeNode.new(addr, hash)
98
- prev << node
99
- end
100
- node.content[:count] +=1
101
- prev = node
135
+
136
+ filter_map = [
137
+ {name: :build_tree, klass: Filter::BuildTree, mandatory: true},
138
+ {name: :rebase_stack, klass: Filter::RebaseStack, mandatory: false},
139
+ {name: :filtered_frames, klass: Filter::FrameRegexRemoval, mandatory: false},
140
+ {name: :remove_gems, klass: Filter::GemRemoval, mandatory: false},
141
+ {name: :quick_method_removal, klass: Filter::QuickMethodRemoval, mandatory: false},
142
+ {name: :compress_tree, klass: Filter::CompressTree, mandatory: false},
143
+ {name: :js_tree, klass: Filter::JsTree, mandatory: true},
144
+ ]
145
+
146
+ filters = filter_map.map do |f|
147
+ name, klass, mandatory = f.values_at :name, :klass, :mandatory
148
+ opts = params[:filters][name.to_s]
149
+ opts = HashWithIndifferentAccess.new(opts) if opts
150
+
151
+ if mandatory
152
+ klass.new(opts || {})
153
+ elsif opts
154
+ klass.new(opts)
102
155
  end
103
- end
156
+ end.compact
104
157
 
105
- filters = [Filter::StackprofilerElision.new, Filter::CompressTree.new, Filter::JsTree.new]
106
- filtered = filters.reduce(root) {|memo, filter| filter.filter(memo, frames) }
158
+ filtered = filters.reduce(run) {|memo, filter| filter.filter(memo, frames) }
107
159
 
160
+ content_type 'application/json'
108
161
  Oj.dump(filtered, mode: :compat)
109
162
  end
110
163
  end
data/lib/stackprofiler.rb CHANGED
@@ -3,19 +3,26 @@ require 'tree'
3
3
  require 'coderay'
4
4
  require 'objspace'
5
5
  require 'stackprof'
6
+ require 'method_source'
6
7
  require 'sinatra/base'
8
+ require 'active_support/all'
7
9
  require 'sinatra/content_for'
10
+ require 'net/http'
8
11
 
9
12
  require 'stackprofiler/version'
10
13
  require 'stackprofiler/web_ui'
11
14
  require 'stackprofiler/middleware'
12
15
  require 'stackprofiler/data_collector'
13
16
  require 'stackprofiler/run_data_source'
17
+ require 'stackprofiler/utils'
14
18
 
15
19
  require 'stackprofiler/filters/js_tree'
20
+ require 'stackprofiler/filters/build_tree'
21
+ require 'stackprofiler/filters/gem_removal'
22
+ require 'stackprofiler/filters/rebase_stack'
16
23
  require 'stackprofiler/filters/compress_tree'
17
- require 'stackprofiler/filters/stackprofiler_elision'
24
+ require 'stackprofiler/filters/frame_regex_removal'
25
+ require 'stackprofiler/filters/quick_method_removal'
18
26
 
19
27
  module Stackprofiler
20
- # Your code goes here...
21
28
  end
@@ -20,9 +20,20 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency 'bundler', '~> 1.7'
22
22
  spec.add_development_dependency 'rake', '~> 10.0'
23
+ spec.add_development_dependency 'guard'
24
+ spec.add_development_dependency 'rb-fsevent'
25
+ spec.add_development_dependency 'puma'
26
+ spec.add_development_dependency 'guard-puma'
27
+ spec.add_development_dependency 'better_errors'
28
+ spec.add_development_dependency 'binding_of_caller'
29
+ spec.add_development_dependency 'rb-readline'
30
+ spec.add_development_dependency 'pry-rescue'
31
+ spec.add_development_dependency 'pry-stack_explorer'
23
32
 
24
33
  spec.add_dependency 'stackprof'
25
- spec.add_dependency 'rubytree'
34
+ spec.add_dependency 'method_source'
35
+ spec.add_dependency 'activesupport'
36
+ spec.add_dependency 'rubytree', '>= 0.9.5pre4'
26
37
  spec.add_dependency 'sinatra'
27
38
  spec.add_dependency 'sinatra-contrib'
28
39
  spec.add_dependency 'coderay'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stackprofiler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aidan Steele
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-05 00:00:00.000000000 Z
11
+ date: 2015-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,132 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: guard
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rb-fsevent
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: puma
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: guard-puma
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: better_errors
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: binding_of_caller
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rb-readline
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: pry-rescue
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: pry-stack_explorer
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
41
167
  - !ruby/object:Gem::Dependency
42
168
  name: stackprof
43
169
  requirement: !ruby/object:Gem::Requirement
@@ -53,7 +179,7 @@ dependencies:
53
179
  - !ruby/object:Gem::Version
54
180
  version: '0'
55
181
  - !ruby/object:Gem::Dependency
56
- name: rubytree
182
+ name: method_source
57
183
  requirement: !ruby/object:Gem::Requirement
58
184
  requirements:
59
185
  - - ">="
@@ -66,6 +192,34 @@ dependencies:
66
192
  - - ">="
67
193
  - !ruby/object:Gem::Version
68
194
  version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: activesupport
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: rubytree
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: 0.9.5pre4
216
+ type: :runtime
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: 0.9.5pre4
69
223
  - !ruby/object:Gem::Dependency
70
224
  name: sinatra
71
225
  requirement: !ruby/object:Gem::Requirement
@@ -125,63 +279,83 @@ dependencies:
125
279
  description:
126
280
  email:
127
281
  - aidan.steele@glassechidna.com.au
128
- executables: []
282
+ executables:
283
+ - stackprofiler
129
284
  extensions: []
130
285
  extra_rdoc_files: []
131
286
  files:
132
287
  - ".gitignore"
133
288
  - Gemfile
289
+ - Guardfile
134
290
  - LICENSE.txt
135
291
  - README.md
136
292
  - Rakefile
293
+ - bin/stackprofiler
294
+ - config.ru
137
295
  - lib/stackprofiler.rb
138
296
  - lib/stackprofiler/data_collector.rb
297
+ - lib/stackprofiler/filters/build_tree.rb
139
298
  - lib/stackprofiler/filters/compress_tree.rb
299
+ - lib/stackprofiler/filters/frame_regex_removal.rb
300
+ - lib/stackprofiler/filters/gem_removal.rb
140
301
  - lib/stackprofiler/filters/js_tree.rb
141
- - lib/stackprofiler/filters/stackprofiler_elision.rb
302
+ - lib/stackprofiler/filters/quick_method_removal.rb
303
+ - lib/stackprofiler/filters/rebase_stack.rb
142
304
  - lib/stackprofiler/middleware.rb
143
305
  - lib/stackprofiler/run_data_source.rb
306
+ - lib/stackprofiler/utils.rb
144
307
  - lib/stackprofiler/version.rb
145
308
  - lib/stackprofiler/web_ui.rb
146
- - lib/stackprofiler/web_ui/public/css/bootstrap-theme.css
147
- - lib/stackprofiler/web_ui/public/css/bootstrap-theme.css.map
148
- - lib/stackprofiler/web_ui/public/css/bootstrap-theme.min.css
149
- - lib/stackprofiler/web_ui/public/css/bootstrap.css
150
- - lib/stackprofiler/web_ui/public/css/bootstrap.css.map
151
- - lib/stackprofiler/web_ui/public/css/bootstrap.min.css
152
- - lib/stackprofiler/web_ui/public/css/coderay.css
153
- - lib/stackprofiler/web_ui/public/css/jquery-ui.css
154
- - lib/stackprofiler/web_ui/public/css/splitter.css
155
- - lib/stackprofiler/web_ui/public/fonts/glyphicons-halflings-regular.eot
156
- - lib/stackprofiler/web_ui/public/fonts/glyphicons-halflings-regular.svg
157
- - lib/stackprofiler/web_ui/public/fonts/glyphicons-halflings-regular.ttf
158
- - lib/stackprofiler/web_ui/public/fonts/glyphicons-halflings-regular.woff
159
- - lib/stackprofiler/web_ui/public/js/bootstrap.js
160
- - lib/stackprofiler/web_ui/public/js/bootstrap.min.js
161
- - lib/stackprofiler/web_ui/public/js/jquery.min.js
162
- - lib/stackprofiler/web_ui/public/js/splitter.js
163
- - lib/stackprofiler/web_ui/public/jstree/jstree.js
164
- - lib/stackprofiler/web_ui/public/jstree/jstree.min.js
165
- - lib/stackprofiler/web_ui/public/jstree/themes/default-dark/32px.png
166
- - lib/stackprofiler/web_ui/public/jstree/themes/default-dark/40px.png
167
- - lib/stackprofiler/web_ui/public/jstree/themes/default-dark/style.css
168
- - lib/stackprofiler/web_ui/public/jstree/themes/default-dark/style.min.css
169
- - lib/stackprofiler/web_ui/public/jstree/themes/default-dark/throbber.gif
170
- - lib/stackprofiler/web_ui/public/jstree/themes/default/32px.png
171
- - lib/stackprofiler/web_ui/public/jstree/themes/default/40px.png
172
- - lib/stackprofiler/web_ui/public/jstree/themes/default/style.css
173
- - lib/stackprofiler/web_ui/public/jstree/themes/default/style.min.css
174
- - lib/stackprofiler/web_ui/public/jstree/themes/default/throbber.gif
175
- - lib/stackprofiler/web_ui/public/octicons/LICENSE.txt
176
- - lib/stackprofiler/web_ui/public/octicons/README.md
177
- - lib/stackprofiler/web_ui/public/octicons/octicons-local.ttf
178
- - lib/stackprofiler/web_ui/public/octicons/octicons.css
179
- - lib/stackprofiler/web_ui/public/octicons/octicons.eot
180
- - lib/stackprofiler/web_ui/public/octicons/octicons.less
181
- - lib/stackprofiler/web_ui/public/octicons/octicons.svg
182
- - lib/stackprofiler/web_ui/public/octicons/octicons.ttf
183
- - lib/stackprofiler/web_ui/public/octicons/octicons.woff
184
- - lib/stackprofiler/web_ui/public/octicons/sprockets-octicons.scss
309
+ - lib/stackprofiler/web_ui/public/js/stackprofiler.js
310
+ - lib/stackprofiler/web_ui/public/vendor/css/bootstrap-theme.css
311
+ - lib/stackprofiler/web_ui/public/vendor/css/bootstrap-theme.css.map
312
+ - lib/stackprofiler/web_ui/public/vendor/css/bootstrap-theme.min.css
313
+ - lib/stackprofiler/web_ui/public/vendor/css/bootstrap.css
314
+ - lib/stackprofiler/web_ui/public/vendor/css/bootstrap.css.map
315
+ - lib/stackprofiler/web_ui/public/vendor/css/bootstrap.min.css
316
+ - lib/stackprofiler/web_ui/public/vendor/css/coderay.css
317
+ - lib/stackprofiler/web_ui/public/vendor/css/jquery-ui.css
318
+ - lib/stackprofiler/web_ui/public/vendor/css/splitter.css
319
+ - lib/stackprofiler/web_ui/public/vendor/d3/d3.min.js
320
+ - lib/stackprofiler/web_ui/public/vendor/epoch/epoch.min.css
321
+ - lib/stackprofiler/web_ui/public/vendor/epoch/epoch.min.js
322
+ - lib/stackprofiler/web_ui/public/vendor/fonts/glyphicons-halflings-regular.eot
323
+ - lib/stackprofiler/web_ui/public/vendor/fonts/glyphicons-halflings-regular.svg
324
+ - lib/stackprofiler/web_ui/public/vendor/fonts/glyphicons-halflings-regular.ttf
325
+ - lib/stackprofiler/web_ui/public/vendor/fonts/glyphicons-halflings-regular.woff
326
+ - lib/stackprofiler/web_ui/public/vendor/jquery-ui/.DS_Store
327
+ - lib/stackprofiler/web_ui/public/vendor/jquery-ui/jquery-ui.min.css
328
+ - lib/stackprofiler/web_ui/public/vendor/jquery-ui/jquery-ui.min.js
329
+ - lib/stackprofiler/web_ui/public/vendor/js/bootstrap.js
330
+ - lib/stackprofiler/web_ui/public/vendor/js/bootstrap.min.js
331
+ - lib/stackprofiler/web_ui/public/vendor/js/jquery.min.js
332
+ - lib/stackprofiler/web_ui/public/vendor/js/splitter.js
333
+ - lib/stackprofiler/web_ui/public/vendor/jstree/jstree.js
334
+ - lib/stackprofiler/web_ui/public/vendor/jstree/jstree.min.js
335
+ - lib/stackprofiler/web_ui/public/vendor/jstree/themes/default-dark/32px.png
336
+ - lib/stackprofiler/web_ui/public/vendor/jstree/themes/default-dark/40px.png
337
+ - lib/stackprofiler/web_ui/public/vendor/jstree/themes/default-dark/style.css
338
+ - lib/stackprofiler/web_ui/public/vendor/jstree/themes/default-dark/style.min.css
339
+ - lib/stackprofiler/web_ui/public/vendor/jstree/themes/default-dark/throbber.gif
340
+ - lib/stackprofiler/web_ui/public/vendor/jstree/themes/default/32px.png
341
+ - lib/stackprofiler/web_ui/public/vendor/jstree/themes/default/40px.png
342
+ - lib/stackprofiler/web_ui/public/vendor/jstree/themes/default/style.css
343
+ - lib/stackprofiler/web_ui/public/vendor/jstree/themes/default/style.min.css
344
+ - lib/stackprofiler/web_ui/public/vendor/jstree/themes/default/throbber.gif
345
+ - lib/stackprofiler/web_ui/public/vendor/lodash/lodash.min.js
346
+ - lib/stackprofiler/web_ui/public/vendor/octicons/LICENSE.txt
347
+ - lib/stackprofiler/web_ui/public/vendor/octicons/README.md
348
+ - lib/stackprofiler/web_ui/public/vendor/octicons/octicons-local.ttf
349
+ - lib/stackprofiler/web_ui/public/vendor/octicons/octicons.css
350
+ - lib/stackprofiler/web_ui/public/vendor/octicons/octicons.eot
351
+ - lib/stackprofiler/web_ui/public/vendor/octicons/octicons.less
352
+ - lib/stackprofiler/web_ui/public/vendor/octicons/octicons.svg
353
+ - lib/stackprofiler/web_ui/public/vendor/octicons/octicons.ttf
354
+ - lib/stackprofiler/web_ui/public/vendor/octicons/octicons.woff
355
+ - lib/stackprofiler/web_ui/public/vendor/octicons/sprockets-octicons.scss
356
+ - lib/stackprofiler/web_ui/public/vendor/tokenfield/.DS_Store
357
+ - lib/stackprofiler/web_ui/public/vendor/tokenfield/bootstrap-tokenfield.min.css
358
+ - lib/stackprofiler/web_ui/public/vendor/tokenfield/bootstrap-tokenfield.min.js
185
359
  - lib/stackprofiler/web_ui/views/code.erb
186
360
  - lib/stackprofiler/web_ui/views/index.erb
187
361
  - lib/stackprofiler/web_ui/views/layout.erb
@@ -211,3 +385,4 @@ signing_key:
211
385
  specification_version: 4
212
386
  summary: Web UI wrapper for the awesome stackprof profiler.
213
387
  test_files: []
388
+ has_rdoc:
@@ -1,12 +0,0 @@
1
- module Stackprofiler
2
- module Filter
3
- class StackprofilerElision
4
- def filter root, frames
5
- root.find do |node|
6
- addr = node.content[:addrs].first.to_i
7
- frames[addr][:name] == 'Stackprofiler::DataCollector#call'
8
- end
9
- end
10
- end
11
- end
12
- end