stackprof-webnav 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 305d130b32c99816ae9f2d4a2be7275210167cb3
4
- data.tar.gz: 04672a134b7e9a47604937ac19a1dca420f5a706
3
+ metadata.gz: f0b0477364b7de56855e675ddd67faf38ee67c30
4
+ data.tar.gz: 351fabc3894db01a0e7bf7aad98a946698500f1c
5
5
  SHA512:
6
- metadata.gz: fa0a79b4bba3576c8df74448bae0ce025a1d4398767dbee213d44a9af9789dfaef77fb67b8d6c1bc5a74f90f5f05603e0b1439b0a9f051559a5c5be95be00d8a
7
- data.tar.gz: e2bd3561f42d12634a6d143f9ddaa683aa5dfe8a3ab19e5828dc5bf1a72d7c5714b6b47a1c696b6241648af78c2d6ff3b8dca8b0be49bf81305b135e6f0d216f
6
+ metadata.gz: 21b62f009b154a395474d1c56d736f1fe886b72550188c47623bcf558a1c610b62776d6f002cfde25b6d746290b0c528f819da6be459d46020aebac4d9b77e28
7
+ data.tar.gz: 9cb2e6053bf5827c487815004b50f48189a29f2bb069774fb3db1b17339b0e975a73587dae29db97c0e7a82f16b0c98e7b50172af6963278fe6aa503468c2c48
data/README.md CHANGED
@@ -1,7 +1,11 @@
1
1
  # StackProf Web navigator
2
2
 
3
+ __WARNING__: early version, no tests, may have bugs.
4
+
3
5
  Provides a web ui to inspect stackprof dumps.
4
6
 
7
+ ## Screenshots
8
+
5
9
  ![main screenshot][main-screenshot]
6
10
 
7
11
  ![method screenshot][method-screenshot]
@@ -18,7 +22,9 @@ $ gem install stackprof-webnav
18
22
  ### Pass a dump to it
19
23
  ```bash
20
24
  $ stackprof-webnav /path/to/stackprof.dump
25
+ $ stackprof-webnav http://path/to/stackprof.dump
21
26
  ```
27
+ If the argument passed does not exist locally, it is assumed to be a URI and is treated as such.
22
28
 
23
29
  See [stackprof gem][create-dump] homepage to learn how to create dumps.
24
30
 
@@ -7,7 +7,7 @@ options = {
7
7
  }
8
8
 
9
9
  parser = OptionParser.new(ARGV) do |o|
10
- o.banner = "Usage: stackprof-webnav file.dump [-p NUMBER]"
10
+ o.banner = "Usage: stackprof-webnav file.dump|http://path/to/file.dump [-p NUMBER]"
11
11
  o.on('-p [PORT]', 'Server port') {|port| options[:port] = port }
12
12
  end
13
13
 
@@ -15,7 +15,12 @@ parser.parse!
15
15
  parser.abort(parser.help) if ARGV.empty?
16
16
 
17
17
  file = ARGV.pop
18
-
19
18
  server = StackProf::Webnav::Server
20
- server.report_dump_path = File.expand_path(file)
21
- server.run! options[:port]
19
+
20
+ if File.exists?(file)
21
+ server.report_dump_path = File.expand_path(file)
22
+ else
23
+ server.report_dump_url = file
24
+ end
25
+
26
+ server.run! options[:port]
@@ -82,4 +82,4 @@ module StackProf
82
82
  end
83
83
  end
84
84
  end
85
- end
85
+ end
@@ -1,17 +1,28 @@
1
1
  require 'nyny'
2
2
  require 'haml'
3
3
  require "stackprof"
4
- require 'sprockets'
4
+ require 'sprockets/nyny'
5
+ require 'net/http'
5
6
  require_relative 'presenter'
6
7
 
7
8
  module StackProf
8
9
  module Webnav
9
10
  class Server < NYNY::App
11
+ register Sprockets::NYNY
12
+ config.assets.paths << File.join(__dir__, 'css')
13
+
10
14
  class << self
11
- attr_accessor :report_dump_path
15
+ attr_accessor :report_dump_path, :report_dump_url
12
16
 
13
17
  def presenter
14
- report = StackProf::Report.new(Marshal.load(File.open(report_dump_path).read))
18
+ return @presenter unless @presenter.nil?
19
+ content = if report_dump_path.nil?
20
+ Net::HTTP.get(URI.parse(report_dump_url))
21
+ else
22
+ File.open(report_dump_path).read
23
+ end
24
+
25
+ report = StackProf::Report.new(Marshal.load(content))
15
26
  @presenter ||= Presenter.new(report)
16
27
  end
17
28
  end
@@ -39,13 +50,8 @@ module StackProf
39
50
  end
40
51
  end
41
52
 
42
- sprockets = Sprockets::Environment.new do |env|
43
- env.append_path(File.join(__dir__, 'css'))
44
- end.index
45
- builder.map('/assets'){ run sprockets }
46
-
47
53
  get '/' do
48
- @file = Server.report_dump_path
54
+ @file = Server.report_dump_path || Server.report_dump_url
49
55
  @action = "overview"
50
56
  @frames = presenter.overview_frames
51
57
  render_with_layout :overview
@@ -1,5 +1,5 @@
1
1
  module StackProf
2
2
  module Webnav
3
- VERSION = '0.0.1'
3
+ VERSION = '0.0.2'
4
4
  end
5
- end
5
+ end
@@ -21,10 +21,10 @@ Gem::Specification.new do |spec|
21
21
  spec.bindir = 'bin'
22
22
  spec.executables << 'stackprof-webnav'
23
23
 
24
- spec.add_dependency "nyny", "~> 3.0"
24
+ spec.add_dependency "nyny", "~> 3.4"
25
25
  spec.add_dependency "haml", "~> 4.0"
26
26
  spec.add_dependency "stackprof", "~> 0.2"
27
- spec.add_dependency "sprockets", "~> 2.10"
27
+ spec.add_dependency "sprockets-nyny", "0.0.3"
28
28
  spec.add_development_dependency "bundler", "~> 1.5"
29
29
  spec.add_development_dependency "rake", "~> 10.1"
30
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stackprof-webnav
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
  - Andrei Lisnic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-18 00:00:00.000000000 Z
11
+ date: 2014-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nyny
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
19
+ version: '3.4'
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.0'
26
+ version: '3.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: haml
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -53,19 +53,19 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.2'
55
55
  - !ruby/object:Gem::Dependency
56
- name: sprockets
56
+ name: sprockets-nyny
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: '2.10'
61
+ version: 0.0.3
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: '2.10'
68
+ version: 0.0.3
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -115,7 +115,6 @@ files:
115
115
  - lib/stackprof-webnav/css/normalize.css
116
116
  - lib/stackprof-webnav/presenter.rb
117
117
  - lib/stackprof-webnav/server.rb
118
- - lib/stackprof-webnav/stackprof_presenter.rb
119
118
  - lib/stackprof-webnav/version.rb
120
119
  - lib/stackprof-webnav/views/file.haml
121
120
  - lib/stackprof-webnav/views/layout.haml
@@ -145,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
144
  version: '0'
146
145
  requirements: []
147
146
  rubyforge_project:
148
- rubygems_version: 2.2.0
147
+ rubygems_version: 2.2.2
149
148
  signing_key:
150
149
  specification_version: 4
151
150
  summary: View stackprof dumps in a web UI
@@ -1,73 +0,0 @@
1
- require 'better_errors'
2
-
3
- module StackProf
4
- module Webnav
5
- class Presenter
6
- attr_reader :report
7
- def initialize report
8
- @report = report
9
- end
10
-
11
- def overview_frames
12
- report.frames.map do |frame, info|
13
- call, total = info.values_at(:samples, :total_samples)
14
- {
15
- :total => total,
16
- :total_pct => percent(total.to_f/report.overall_samples),
17
- :samples => call,
18
- :samples_pct => percent(call.to_f/report.overall_samples),
19
- :method => info[:name]
20
- }
21
- end
22
- end
23
-
24
- def method_info name
25
- name = /#{Regexp.escape name}/ unless Regexp === name
26
- frames = report.frames.select do |frame, info|
27
- info[:name] =~ name
28
- end.map do |frame, info|
29
- file, line = info.values_at(:file, :line)
30
-
31
- {
32
- :callers => callers(frame, info),
33
- :callees => callees(frame, info),
34
- :location => "#{file}:#{line}",
35
- :source => BetterErrors::CodeFormatter::HTML.new(file, line).output
36
- }
37
- end
38
- end
39
-
40
- private
41
-
42
- def percent value
43
- "%2.2f%" % (value*100)
44
- end
45
-
46
- def callers frame, info
47
- report.data[:frames].select do |id, other|
48
- other[:edges] && other[:edges].include?(frame)
49
- end.map do |id, other|
50
- [other[:name], other[:edges][frame]]
51
- end.sort_by(&:last).reverse.map do |name, weight|
52
- {
53
- :weight => weight,
54
- :pct => percent(weight.to_f/info[:total_samples]),
55
- :method => name
56
- }
57
- end
58
- end
59
-
60
- def callees frame, info
61
- (info[:edges] || []).map do |k, weight|
62
- [report.data[:frames][k][:name], weight]
63
- end.sort_by { |k,v| -v }.map do |name, weight|
64
- {
65
- :weight => weight,
66
- :pct => percent(weight.to_f/(info[:total_samples]-info[:samples])),
67
- :method => name
68
- }
69
- end
70
- end
71
- end
72
- end
73
- end