stackprof-webnav 0.0.3 → 1.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 (44) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ruby.yml +37 -0
  3. data/.gitignore +2 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +2 -0
  6. data/Procfile +1 -0
  7. data/README.md +27 -18
  8. data/Rakefile +24 -0
  9. data/bin/stackprof-webnav +8 -6
  10. data/lib/stackprof-webnav.rb +1 -1
  11. data/lib/stackprof-webnav/dump.rb +41 -0
  12. data/lib/stackprof-webnav/presenter.rb +1 -18
  13. data/lib/stackprof-webnav/public/css/application.css +18 -0
  14. data/lib/stackprof-webnav/{css → public/css}/code.css +0 -0
  15. data/lib/stackprof-webnav/{css → public/css}/foundation.min.css +0 -0
  16. data/lib/stackprof-webnav/{css → public/css}/normalize.css +0 -0
  17. data/lib/stackprof-webnav/public/flamegraph.js +983 -0
  18. data/lib/stackprof-webnav/server.rb +105 -69
  19. data/lib/stackprof-webnav/version.rb +1 -1
  20. data/lib/stackprof-webnav/views/error.haml +8 -0
  21. data/lib/stackprof-webnav/views/file.haml +7 -4
  22. data/lib/stackprof-webnav/views/flamegraph.haml +77 -0
  23. data/lib/stackprof-webnav/views/graph.haml +5 -0
  24. data/lib/stackprof-webnav/views/index.haml +18 -0
  25. data/lib/stackprof-webnav/views/invalid_dump.haml +4 -0
  26. data/lib/stackprof-webnav/views/layout.haml +5 -4
  27. data/lib/stackprof-webnav/views/method.haml +11 -8
  28. data/lib/stackprof-webnav/views/overview.haml +17 -3
  29. data/screenshots/callgraph.png +0 -0
  30. data/screenshots/directory.png +0 -0
  31. data/screenshots/file.png +0 -0
  32. data/screenshots/flamegraph.png +0 -0
  33. data/screenshots/method.png +0 -0
  34. data/screenshots/overview.png +0 -0
  35. data/spec/fixtures/test-raw.dump +0 -0
  36. data/spec/fixtures/test.dump +0 -0
  37. data/spec/helpers.rb +17 -0
  38. data/spec/integration_spec.rb +79 -0
  39. data/spec/spec_helper.rb +15 -0
  40. data/stackprof-webnav.gemspec +9 -5
  41. metadata +106 -28
  42. data/lib/stackprof-webnav/css/application.css +0 -13
  43. data/lib/stackprof-webnav/views/listing.haml +0 -21
  44. data/screenshots/main.png +0 -0
Binary file
Binary file
data/screenshots/file.png CHANGED
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
data/spec/helpers.rb ADDED
@@ -0,0 +1,17 @@
1
+ require 'rack/test'
2
+
3
+ module Helpers
4
+ def build_app(options={})
5
+ StackProf::Webnav::Server.cmd_options = options
6
+ Rack::Test::Session.new(Rack::MockSession.new(StackProf::Webnav::Server))
7
+ end
8
+
9
+ def fixture_path(name)
10
+ File.join(File.dirname(__FILE__), "fixtures", name)
11
+ end
12
+
13
+ def build_presenter(path)
14
+ report = StackProf::Report.new(Marshal.load(File.read(path)))
15
+ StackProf::Webnav::Presenter.new(report)
16
+ end
17
+ end
@@ -0,0 +1,79 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe "integration tests" do
4
+ let(:app) { build_app }
5
+ let(:presenter) { build_presenter(fixture_path("test.dump")) }
6
+ let(:response) { app.last_response }
7
+
8
+ after(:each) do
9
+ Dir.glob("spec/fixtures/*.flames.json").each {|file| File.delete(file) }
10
+ Dir.glob("spec/fixtures/*.digraph.dot").each {|file| File.delete(file) }
11
+ Dir.glob("spec/fixtures/*.graph.svg").each {|file| File.delete(file) }
12
+ end
13
+
14
+ describe "index" do
15
+ it "lists the files in a folder" do
16
+ app = build_app(directory: "spec/fixtures")
17
+ app.get "/"
18
+ expect(app.last_response.body).to include("test.dump")
19
+ end
20
+
21
+ it "redirects to overview if path is specified" do
22
+ app = build_app(filepath: fixture_path("test.dump"))
23
+ app.get "/"
24
+ app.follow_redirect!
25
+ expect(app.last_response.body).to include("Dummy")
26
+ end
27
+ end
28
+
29
+ it "does not crash on unknown requests" do
30
+ app.get "/favicon.ico"
31
+ expect(response.status).to eq(404)
32
+ end
33
+
34
+ describe "overview" do
35
+ it "works with a valid dump" do
36
+ app.get "/overview", dump: fixture_path("test.dump")
37
+
38
+ frame = presenter.overview_frames.first
39
+ expect(response.body).to include(frame[:method])
40
+ end
41
+
42
+ it "communicates that flamegraph is not available for dump" do
43
+ app.get "/overview", dump: fixture_path("test.dump")
44
+ end
45
+
46
+ it "does not crash if selected file is not a dump" do
47
+ app.get "/overview", dump: "Rakefile"
48
+ expect(response.body).to include("Unable to open")
49
+ end
50
+ end
51
+
52
+ it "is able to generate flames.json file" do
53
+ app.get "/flames.json", dump: fixture_path("test-raw.dump")
54
+ expect(response.body).to include("flamegraph")
55
+ end
56
+
57
+ it "is able to render graph" do
58
+ app.get "/graph.svg", dump: fixture_path("test.dump")
59
+ expect(response.get_header("Content-Type")).to eq("image/svg+xml")
60
+ expect(response.body.size).to_not eq(0)
61
+ end
62
+
63
+ it "method page renders information about a method" do
64
+ frame = presenter.overview_frames.first
65
+ app.get "/method", dump: fixture_path("test.dump"), name: frame[:method]
66
+ expect(response.body).to include("Callers")
67
+ end
68
+
69
+ it "does not crash on a file page" do
70
+ frame = presenter.overview_frames.first
71
+ method_info = presenter.method_info frame[:method]
72
+
73
+ expect {
74
+ app.get "/file",
75
+ dump: fixture_path("test.dump"),
76
+ path: method_info.first[:location]
77
+ }.to_not raise_error
78
+ end
79
+ end
@@ -0,0 +1,15 @@
1
+ ENV['APP_ENV'] = 'test'
2
+ $LOAD_PATH.unshift File.join(Dir.pwd, "lib")
3
+
4
+ require "stackprof-webnav"
5
+ require "rspec"
6
+ require_relative 'helpers'
7
+
8
+ RSpec.configure do |config|
9
+ config.include Helpers
10
+ config.backtrace_exclusion_patterns << /.gem/
11
+
12
+ config.after(:each) do
13
+ StackProf::Webnav::Server.cmd_options = {}
14
+ end
15
+ end
@@ -21,10 +21,14 @@ Gem::Specification.new do |spec|
21
21
  spec.bindir = 'bin'
22
22
  spec.executables << 'stackprof-webnav'
23
23
 
24
- spec.add_dependency "nyny", "~> 3.4"
25
- spec.add_dependency "haml", "~> 4.0"
26
- spec.add_dependency "stackprof", "~> 0.2"
27
- spec.add_dependency "sprockets-nyny", "0.0.3"
28
- spec.add_development_dependency "bundler", "~> 1.5"
24
+ spec.add_dependency "sinatra", "~> 2.0.7"
25
+ spec.add_dependency "haml", "~> 5.1.2"
26
+ spec.add_dependency "stackprof", ">= 0.2.13"
27
+ spec.add_dependency "better_errors", "~> 1.1.0"
28
+ spec.add_dependency "ruby-graphviz", "~> 1.2.4"
29
+ spec.add_dependency "sinatra-contrib", "~> 2.0.5"
30
+ spec.add_development_dependency "bundler", "~> 2.2"
29
31
  spec.add_development_dependency "rake", "~> 10.1"
32
+ spec.add_development_dependency "rspec", "~> 3.9.0"
33
+ spec.add_development_dependency "rack-test", "~> 1.1.0"
30
34
  end
metadata CHANGED
@@ -1,85 +1,113 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stackprof-webnav
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrei Lisnic
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-06 00:00:00.000000000 Z
11
+ date: 2021-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: nyny
14
+ name: sinatra
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.4'
19
+ version: 2.0.7
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '3.4'
26
+ version: 2.0.7
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: haml
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '4.0'
33
+ version: 5.1.2
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '4.0'
40
+ version: 5.1.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: stackprof
43
43
  requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.2.13
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.2.13
55
+ - !ruby/object:Gem::Dependency
56
+ name: better_errors
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.1.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
44
65
  requirements:
45
66
  - - "~>"
46
67
  - !ruby/object:Gem::Version
47
- version: '0.2'
68
+ version: 1.1.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: ruby-graphviz
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 1.2.4
48
76
  type: :runtime
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
80
  - - "~>"
53
81
  - !ruby/object:Gem::Version
54
- version: '0.2'
82
+ version: 1.2.4
55
83
  - !ruby/object:Gem::Dependency
56
- name: sprockets-nyny
84
+ name: sinatra-contrib
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
- - - '='
87
+ - - "~>"
60
88
  - !ruby/object:Gem::Version
61
- version: 0.0.3
89
+ version: 2.0.5
62
90
  type: :runtime
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
- - - '='
94
+ - - "~>"
67
95
  - !ruby/object:Gem::Version
68
- version: 0.0.3
96
+ version: 2.0.5
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: bundler
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
101
  - - "~>"
74
102
  - !ruby/object:Gem::Version
75
- version: '1.5'
103
+ version: '2.2'
76
104
  type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
108
  - - "~>"
81
109
  - !ruby/object:Gem::Version
82
- version: '1.5'
110
+ version: '2.2'
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: rake
85
113
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +122,34 @@ dependencies:
94
122
  - - "~>"
95
123
  - !ruby/object:Gem::Version
96
124
  version: '10.1'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 3.9.0
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 3.9.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: rack-test
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 1.1.0
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 1.1.0
97
153
  description: Provides the ability to analyze StackProf dumps
98
154
  email:
99
155
  - andrei.lisnic@gmail.com
@@ -102,34 +158,52 @@ executables:
102
158
  extensions: []
103
159
  extra_rdoc_files: []
104
160
  files:
161
+ - ".github/workflows/ruby.yml"
105
162
  - ".gitignore"
163
+ - ".travis.yml"
106
164
  - Gemfile
165
+ - Gemfile.lock
107
166
  - LICENSE.txt
167
+ - Procfile
108
168
  - README.md
109
169
  - Rakefile
110
170
  - bin/stackprof-webnav
111
171
  - lib/stackprof-webnav.rb
112
- - lib/stackprof-webnav/css/application.css
113
- - lib/stackprof-webnav/css/code.css
114
- - lib/stackprof-webnav/css/foundation.min.css
115
- - lib/stackprof-webnav/css/normalize.css
172
+ - lib/stackprof-webnav/dump.rb
116
173
  - lib/stackprof-webnav/presenter.rb
174
+ - lib/stackprof-webnav/public/css/application.css
175
+ - lib/stackprof-webnav/public/css/code.css
176
+ - lib/stackprof-webnav/public/css/foundation.min.css
177
+ - lib/stackprof-webnav/public/css/normalize.css
178
+ - lib/stackprof-webnav/public/flamegraph.js
117
179
  - lib/stackprof-webnav/server.rb
118
180
  - lib/stackprof-webnav/version.rb
181
+ - lib/stackprof-webnav/views/error.haml
119
182
  - lib/stackprof-webnav/views/file.haml
183
+ - lib/stackprof-webnav/views/flamegraph.haml
184
+ - lib/stackprof-webnav/views/graph.haml
185
+ - lib/stackprof-webnav/views/index.haml
186
+ - lib/stackprof-webnav/views/invalid_dump.haml
120
187
  - lib/stackprof-webnav/views/layout.haml
121
- - lib/stackprof-webnav/views/listing.haml
122
188
  - lib/stackprof-webnav/views/method.haml
123
189
  - lib/stackprof-webnav/views/overview.haml
190
+ - screenshots/callgraph.png
191
+ - screenshots/directory.png
124
192
  - screenshots/file.png
125
- - screenshots/main.png
193
+ - screenshots/flamegraph.png
126
194
  - screenshots/method.png
195
+ - screenshots/overview.png
196
+ - spec/fixtures/test-raw.dump
197
+ - spec/fixtures/test.dump
198
+ - spec/helpers.rb
199
+ - spec/integration_spec.rb
200
+ - spec/spec_helper.rb
127
201
  - stackprof-webnav.gemspec
128
202
  homepage: https://github.com/alisnic/stackprof-webnav
129
203
  licenses:
130
204
  - MIT
131
205
  metadata: {}
132
- post_install_message:
206
+ post_install_message:
133
207
  rdoc_options: []
134
208
  require_paths:
135
209
  - lib
@@ -144,9 +218,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
218
  - !ruby/object:Gem::Version
145
219
  version: '0'
146
220
  requirements: []
147
- rubyforge_project:
148
- rubygems_version: 2.2.2
149
- signing_key:
221
+ rubygems_version: 3.1.4
222
+ signing_key:
150
223
  specification_version: 4
151
224
  summary: View stackprof dumps in a web UI
152
- test_files: []
225
+ test_files:
226
+ - spec/fixtures/test-raw.dump
227
+ - spec/fixtures/test.dump
228
+ - spec/helpers.rb
229
+ - spec/integration_spec.rb
230
+ - spec/spec_helper.rb
@@ -1,13 +0,0 @@
1
- /*
2
- = require normalize
3
- = require foundation.min
4
- = require code
5
- */
6
-
7
- table {
8
- width: 100%;
9
- }
10
-
11
- pre code {
12
- color: black;
13
- }
@@ -1,21 +0,0 @@
1
- %h3 StackProf Navigator
2
- %hr
3
-
4
- %p
5
- Viewing S3 bucket at
6
- %b= @file
7
-
8
- %table.centered
9
- %thead
10
- %th Key
11
- %th Date
12
- %th Dump
13
-
14
- %tbody
15
- - @dumps.each do |dump|
16
- %tr
17
- %td= dump[:key]
18
- %td= dump[:date]
19
- %td
20
- %a{:href => overview_url(dump[:uri])}
21
- = dump[:uri]
data/screenshots/main.png DELETED
Binary file