rackprof 0.1.0
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 +7 -0
- data/.gitignore +9 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +53 -0
- data/Rakefile +1 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/rackprof.rb +14 -0
- data/lib/rackprof/engine.rb +5 -0
- data/lib/rackprof/gc_notify.rb +21 -0
- data/lib/rackprof/gc_observer.rb +7 -0
- data/lib/rackprof/middleware.rb +17 -0
- data/lib/rackprof/observer.rb +9 -0
- data/lib/rackprof/rails.rb +8 -0
- data/lib/rackprof/request_notify.rb +27 -0
- data/lib/rackprof/request_observer.rb +12 -0
- data/lib/rackprof/templates/assets/dashboard.css +105 -0
- data/lib/rackprof/templates/assets/index.js +152 -0
- data/lib/rackprof/templates/assets/main.css +3 -0
- data/lib/rackprof/templates/assets/request.js +9 -0
- data/lib/rackprof/templates/assets/viz.js +1302 -0
- data/lib/rackprof/templates/views/index.erb +30 -0
- data/lib/rackprof/templates/views/layout.erb +51 -0
- data/lib/rackprof/templates/views/request.erb +15 -0
- data/lib/rackprof/version.rb +3 -0
- data/lib/rackprof/web.rb +43 -0
- data/rackprof.gemspec +26 -0
- metadata +157 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
<% content_for :javascript do %>
|
2
|
+
<script src='/rackprof/index.js'></script>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
|
6
|
+
<div class="row">
|
7
|
+
<div class="col-xs-6 col-sm-6">
|
8
|
+
<h4>GC count</h4>
|
9
|
+
<canvas id='gc_chart' width='500' height='280'></canvas>
|
10
|
+
<ul id='gc_legend'></ul>
|
11
|
+
</div>
|
12
|
+
<div class="col-xs-6 col-sm-6">
|
13
|
+
<h4>Total object count</h4>
|
14
|
+
<canvas id='total_object' width='500' height='280'></canvas>
|
15
|
+
<ul id='total_object_legend'></ul>
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
<div class="row">
|
19
|
+
<div class="col-xs-6 col-sm-6">
|
20
|
+
<h4>malloc increase count</h4>
|
21
|
+
<canvas id='malloc_increase' width='500' height='280'></canvas>
|
22
|
+
<ul id='malloc_increase_legend'></ul>
|
23
|
+
</div>
|
24
|
+
<div class="col-xs-6 col-sm-6">
|
25
|
+
<h4>old object count</h4>
|
26
|
+
<canvas id='old_objects' width='500' height='280'></canvas>
|
27
|
+
<ul id='old_objects_legend'></ul>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
</div>
|
@@ -0,0 +1,51 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<title>rack profiler</title>
|
5
|
+
<meta charset="utf-8">
|
6
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
8
|
+
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
|
9
|
+
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">
|
10
|
+
<link rel="stylesheet" href="/rackprof/dashboard.css">
|
11
|
+
<link rel="stylesheet" href="/rackprof/main.css" type="text/css" media="all">
|
12
|
+
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
13
|
+
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
14
|
+
<!--[if lt IE 9]>
|
15
|
+
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
|
16
|
+
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
17
|
+
<![endif]-->
|
18
|
+
</head>
|
19
|
+
<body>
|
20
|
+
<nav class="navbar navbar-inverse navbar-fixed-top">
|
21
|
+
<div class="container-fluid">
|
22
|
+
<div class="navbar-header">
|
23
|
+
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
|
24
|
+
<span class="sr-only">Toggle navigation</span>
|
25
|
+
<span class="icon-bar"></span>
|
26
|
+
<span class="icon-bar"></span>
|
27
|
+
<span class="icon-bar"></span>
|
28
|
+
</button>
|
29
|
+
<a class="navbar-brand" href="/rackprof">rack profiler</a>
|
30
|
+
</div>
|
31
|
+
</div>
|
32
|
+
</nav>
|
33
|
+
|
34
|
+
<div class="container-fluid">
|
35
|
+
<div class="row">
|
36
|
+
<div class="col-sm-3 col-md-2 sidebar">
|
37
|
+
<ul class="nav nav-sidebar">
|
38
|
+
<li class="<%= active_class('/') %>"><a href="/rackprof">GC Profile<span class="sr-only">(current)</span></a></li>
|
39
|
+
<li class="<%= active_class('/request') %>"><a href="/rackprof/request">Request Profile</a></li>
|
40
|
+
</ul>
|
41
|
+
</div>
|
42
|
+
<%= yield %>
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
|
46
|
+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
|
47
|
+
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
|
48
|
+
<script src='https://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.0.2/Chart.min.js'></script>
|
49
|
+
<%= yield_content :javascript %>
|
50
|
+
</body>
|
51
|
+
</html>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<% content_for :javascript do %>
|
2
|
+
<script src='/rackprof/request.js'></script>
|
3
|
+
<script src='/rackprof/viz.js'></script>
|
4
|
+
<% end %>
|
5
|
+
|
6
|
+
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
|
7
|
+
<div class="row">
|
8
|
+
<div class="col-xs-12 col-sm-12">
|
9
|
+
<h4>Request</h4>
|
10
|
+
|
11
|
+
<pre id='profile'></pre>
|
12
|
+
<script type="text/vnd.graphviz" id="profile"></script>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
</div>
|
data/lib/rackprof/web.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'sinatra/base'
|
2
|
+
require 'sinatra/content_for'
|
3
|
+
|
4
|
+
module Rackprof
|
5
|
+
class Web < Sinatra::Base
|
6
|
+
helpers Sinatra::ContentFor
|
7
|
+
|
8
|
+
set :root, File.expand_path(File.dirname(__FILE__) + '/templates')
|
9
|
+
set :public_folder, proc { "#{root}/assets" }
|
10
|
+
set :views, proc { "#{root}/views" }
|
11
|
+
|
12
|
+
helpers do
|
13
|
+
def active_class(path)
|
14
|
+
'active' if @env['PATH_INFO'] == path
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
get '/' do
|
19
|
+
GCNotify.instance.start
|
20
|
+
erb :index
|
21
|
+
end
|
22
|
+
|
23
|
+
get '/gc_stream', provides: 'text/event-stream' do
|
24
|
+
stream :keep_open do |out|
|
25
|
+
observer = GCObserver.new(out)
|
26
|
+
GCNotify.instance.add_observer(observer)
|
27
|
+
out.callback { GCNotify.instance.delete_observer(observer) }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
get '/request' do
|
32
|
+
erb :request
|
33
|
+
end
|
34
|
+
|
35
|
+
get '/request_stream', provides: 'text/event-stream' do
|
36
|
+
stream :keep_open do |out|
|
37
|
+
observer = RequestObserver.new(out)
|
38
|
+
RequestNotify.instance.add_observer(observer)
|
39
|
+
out.callback { RequestNotify.instance.delete_observer(observer) }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/rackprof.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'rackprof/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "rackprof"
|
8
|
+
spec.version = Rackprof::VERSION
|
9
|
+
spec.authors = ["Norimasa Ando"]
|
10
|
+
spec.email = ["norimasa.ando@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Profile ruby code for Rails and other Rack apps.}
|
13
|
+
spec.description = %q{Provides a profiler page of the ruby execution which has infomation of gc and object allocation.}
|
14
|
+
spec.homepage = "https://github.com/hbd225/rackprof"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_dependency 'sinatra'
|
21
|
+
spec.add_dependency 'sinatra-contrib'
|
22
|
+
spec.add_dependency 'eventmachine'
|
23
|
+
spec.add_dependency 'stackprof'
|
24
|
+
spec.add_development_dependency 'bundler', '~> 1.9'
|
25
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rackprof
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Norimasa Ando
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: sinatra
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sinatra-contrib
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: eventmachine
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
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: stackprof
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
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: bundler
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.9'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.9'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '10.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '10.0'
|
97
|
+
description: Provides a profiler page of the ruby execution which has infomation of
|
98
|
+
gc and object allocation.
|
99
|
+
email:
|
100
|
+
- norimasa.ando@gmail.com
|
101
|
+
executables: []
|
102
|
+
extensions: []
|
103
|
+
extra_rdoc_files: []
|
104
|
+
files:
|
105
|
+
- ".gitignore"
|
106
|
+
- ".travis.yml"
|
107
|
+
- Gemfile
|
108
|
+
- LICENSE.txt
|
109
|
+
- README.md
|
110
|
+
- Rakefile
|
111
|
+
- bin/console
|
112
|
+
- bin/setup
|
113
|
+
- lib/rackprof.rb
|
114
|
+
- lib/rackprof/engine.rb
|
115
|
+
- lib/rackprof/gc_notify.rb
|
116
|
+
- lib/rackprof/gc_observer.rb
|
117
|
+
- lib/rackprof/middleware.rb
|
118
|
+
- lib/rackprof/observer.rb
|
119
|
+
- lib/rackprof/rails.rb
|
120
|
+
- lib/rackprof/request_notify.rb
|
121
|
+
- lib/rackprof/request_observer.rb
|
122
|
+
- lib/rackprof/templates/assets/dashboard.css
|
123
|
+
- lib/rackprof/templates/assets/index.js
|
124
|
+
- lib/rackprof/templates/assets/main.css
|
125
|
+
- lib/rackprof/templates/assets/request.js
|
126
|
+
- lib/rackprof/templates/assets/viz.js
|
127
|
+
- lib/rackprof/templates/views/index.erb
|
128
|
+
- lib/rackprof/templates/views/layout.erb
|
129
|
+
- lib/rackprof/templates/views/request.erb
|
130
|
+
- lib/rackprof/version.rb
|
131
|
+
- lib/rackprof/web.rb
|
132
|
+
- rackprof.gemspec
|
133
|
+
homepage: https://github.com/hbd225/rackprof
|
134
|
+
licenses:
|
135
|
+
- MIT
|
136
|
+
metadata: {}
|
137
|
+
post_install_message:
|
138
|
+
rdoc_options: []
|
139
|
+
require_paths:
|
140
|
+
- lib
|
141
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - ">="
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
151
|
+
requirements: []
|
152
|
+
rubyforge_project:
|
153
|
+
rubygems_version: 2.4.5
|
154
|
+
signing_key:
|
155
|
+
specification_version: 4
|
156
|
+
summary: Profile ruby code for Rails and other Rack apps.
|
157
|
+
test_files: []
|