stackprofiler 0.0.1 → 0.0.2

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 (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