rack-webprofiler 0.1.0.pre.alpha1 → 0.1.0.pre.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/README.md +2 -0
- data/lib/rack/templates/assets/css/profiler.css +1 -0
- data/lib/rack/templates/assets/css/rwpt.css +1 -0
- data/lib/rack/templates/assets/sass/_fonts.scss +60 -0
- data/lib/rack/templates/assets/sass/_normalize.scss +4 -0
- data/lib/rack/templates/assets/sass/_variables.scss +11 -0
- data/lib/rack/templates/assets/sass/profiler.scss +186 -0
- data/lib/rack/templates/assets/sass/rwpt.scss +266 -0
- data/lib/rack/templates/panel/_sidebar.erb +36 -0
- data/lib/rack/templates/panel/index.erb +26 -28
- data/lib/rack/templates/panel/layout.erb +23 -7
- data/lib/rack/templates/panel/show.erb +6 -17
- data/lib/rack/templates/profiler.erb +12 -58
- data/lib/rack/web_profiler/auto_configure/rails.rb +1 -1
- data/lib/rack/web_profiler/collector/rack/request_collector.rb +221 -5
- data/lib/rack/web_profiler/collector/ruby_collector.rb +39 -3
- data/lib/rack/web_profiler/collector/sinatra/request_collector.rb +186 -8
- data/lib/rack/web_profiler/collector/sinatra/sinatra_collector.rb +2 -2
- data/lib/rack/web_profiler/collector/time_collector.rb +5 -3
- data/lib/rack/web_profiler/collector.rb +5 -4
- data/lib/rack/web_profiler/collectors.rb +10 -2
- data/lib/rack/web_profiler/controller.rb +25 -4
- data/lib/rack/web_profiler/router.rb +40 -5
- data/lib/rack/web_profiler/version.rb +1 -1
- data/rack-webprofiler.gemspec +7 -2
- metadata +30 -38
- data/.editorconfig +0 -27
- data/.gitignore +0 -11
- data/.rspec +0 -2
- data/.rubocop.yml +0 -34
- data/.travis.yml +0 -23
- data/Gemfile +0 -15
- data/Rakefile +0 -17
- data/bin/ci-prepare +0 -16
- data/bin/console +0 -10
- data/bin/setup +0 -8
- data/examples/README.md +0 -56
- data/examples/rack/config.ru +0 -52
- data/examples/sinatra/app.rb +0 -37
- data/examples/sinatra/config.ru +0 -3
- data/lib/rack/templates/assets/rwpt.css +0 -9
- /data/lib/rack/templates/assets/{rwpt.js → js/rwpt.js} +0 -0
- /data/{.rubocop_todo.yml → lib/rack/templates/assets/js/rwpt.min.js} +0 -0
@@ -1,29 +1,27 @@
|
|
1
|
-
# TODO list the 20 lastest requests
|
2
1
|
|
3
|
-
<
|
4
|
-
<
|
5
|
-
<
|
6
|
-
<
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
<
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
</
|
27
|
-
|
28
|
-
|
29
|
-
<a href="<%= WebProfiler::Router.url_for_clean_profiler %>">Cleanup database</a>
|
2
|
+
<div class="block">
|
3
|
+
<table>
|
4
|
+
<thead>
|
5
|
+
<tr>
|
6
|
+
<th>token</th>
|
7
|
+
<th>method</th>
|
8
|
+
<th>status</th>
|
9
|
+
<th>url</th>
|
10
|
+
<th>ip</th>
|
11
|
+
<th>date</th>
|
12
|
+
</tr>
|
13
|
+
</thead>
|
14
|
+
<tbody>
|
15
|
+
<% @collections.each do |r| %>
|
16
|
+
<tr>
|
17
|
+
<td><a href="<%= WebProfiler::Router.url_for_profiler(r.token) %>"><%= r.token %></a></td>
|
18
|
+
<td><%= r.http_method %></td>
|
19
|
+
<td><%= r.http_status %></td>
|
20
|
+
<td><%= r.url %></td>
|
21
|
+
<td><%= r.ip %></td>
|
22
|
+
<td><span title="<%= r.created_at %>"><%= r.created_at.strftime('%Y-%m-%d %H:%M:%S') %></span></td>
|
23
|
+
</tr>
|
24
|
+
<% end %>
|
25
|
+
</tbody>
|
26
|
+
</table>
|
27
|
+
</div>
|
@@ -2,16 +2,32 @@
|
|
2
2
|
<html>
|
3
3
|
<head>
|
4
4
|
<title>Rack WebProfiler</title>
|
5
|
-
<
|
6
|
-
<%= partial 'assets/rwpt.css' %>
|
7
|
-
</style>
|
8
|
-
<script type="text/javascript">
|
9
|
-
<%= partial 'assets/rwpt.js' %>
|
10
|
-
</script>
|
5
|
+
<link rel="stylesheet" href="<%= WebProfiler::Router.url_for_asset('css/rwpt.css') %>" />
|
11
6
|
</head>
|
12
7
|
<body>
|
8
|
+
<div id="rack-webprofiler">
|
9
|
+
<%= partial 'panel/_sidebar.erb' %>
|
13
10
|
|
14
|
-
|
11
|
+
<main id="main">
|
12
|
+
<header id="header">
|
13
|
+
<div class="header__section">
|
14
|
+
<span><a href="<%= !@collection.nil? ? @collection.url : nil %>"><%= !@collection.nil? ? @collection.url : nil %></a></span>
|
15
|
+
</div>
|
16
|
+
<div class="header__section header__section--blank"></div>
|
17
|
+
</header>
|
15
18
|
|
19
|
+
<div id="wrapper">
|
20
|
+
<div class="wrapper__container">
|
21
|
+
<%= yield %>
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
</main>
|
25
|
+
</div>
|
26
|
+
|
27
|
+
<script src="<%= WebProfiler::Router.url_for_asset('js/rwpt.min.js') %>"></script>
|
28
|
+
|
29
|
+
<% unless @collection.nil? %>
|
30
|
+
<%= partial 'profiler.erb' %>
|
31
|
+
<% end %>
|
16
32
|
</body>
|
17
33
|
</html>
|
@@ -1,19 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
<%
|
2
|
+
datas = @collection.datas
|
3
|
+
token = @collection.token
|
4
|
+
%>
|
4
5
|
<div class="">
|
5
|
-
|
6
|
-
|
7
|
-
<table>
|
8
|
-
<% datas[:datas].each do |k, v| %>
|
9
|
-
<tr>
|
10
|
-
<th><%= k %></th>
|
11
|
-
<td><%= v.inspect %></td>
|
12
|
-
</tr>
|
13
|
-
<% end %>
|
14
|
-
</table>
|
6
|
+
<% render_collector(@collector, datas[@collector.name.to_sym][:datas]) %>
|
7
|
+
<%= content_for :panel %>
|
15
8
|
</div>
|
16
|
-
<% end %>
|
17
|
-
|
18
|
-
|
19
|
-
<a href="<%= WebProfiler::Router.url_for_profiler %>">All requests</a>
|
@@ -1,69 +1,23 @@
|
|
1
1
|
<style>
|
2
|
-
|
3
|
-
position: fixed;
|
4
|
-
bottom: 0;
|
5
|
-
left: 0;
|
6
|
-
width: 100%;
|
7
|
-
height: 40px;
|
8
|
-
|
9
|
-
background-color: #1c1f33;
|
10
|
-
color: #f3fcf0;
|
11
|
-
font-family: "Helvetica Neue", Arial, sans-serif;
|
12
|
-
font-size: 14px;
|
13
|
-
}
|
14
|
-
|
15
|
-
#rack-webprofiler * {
|
16
|
-
margin: 0;
|
17
|
-
padding: 0;
|
18
|
-
}
|
19
|
-
|
20
|
-
#rack-webprofiler .rack-webprofiler_collectors {
|
21
|
-
height: 40px;
|
22
|
-
}
|
23
|
-
|
24
|
-
#rack-webprofiler .rack-webprofiler_collectors > .rack-webprofiler_collector {
|
25
|
-
float: left;
|
26
|
-
padding: 0 10px;
|
27
|
-
border: 1px solid #282f4c;
|
28
|
-
height: 38px;
|
29
|
-
line-height: 40px;
|
30
|
-
}
|
31
|
-
|
32
|
-
#rack-webprofiler .rack-webprofiler_collectors .rack-webprofiler_collector img {
|
33
|
-
width: 20px;
|
34
|
-
height: 20px;
|
35
|
-
position: relative;
|
36
|
-
top: 4px;
|
37
|
-
}
|
38
|
-
#rack-webprofiler .rack-webprofiler_collectors .rack-webprofiler_collector.error,
|
39
|
-
#rack-webprofiler .rack-webprofiler_collectors .rack-webprofiler_collector.success {
|
40
|
-
height: 35px;
|
41
|
-
border-bottom-style: solid;
|
42
|
-
border-bottom-width: 4px;
|
43
|
-
}
|
44
|
-
#rack-webprofiler .rack-webprofiler_collectors .rack-webprofiler_collector.error {
|
45
|
-
border-bottom-color: #ff2851;
|
46
|
-
}
|
47
|
-
#rack-webprofiler .rack-webprofiler_collectors .rack-webprofiler_collector.success {
|
48
|
-
border-bottom-color: #44db5e;
|
49
|
-
}
|
2
|
+
<%= partial 'assets/css/profiler.css' %>
|
50
3
|
</style>
|
51
4
|
<%
|
52
5
|
datas = @collection.datas
|
53
6
|
token = @collection.token
|
54
7
|
%>
|
55
|
-
<div id="rack-webprofiler">
|
56
|
-
<div class="rack-
|
57
|
-
|
8
|
+
<div id="rack-webprofiler-bar" class="rack-webprofiler--long">
|
9
|
+
<div class="rack-webprofiler__wrapper">
|
58
10
|
<% @collectors.each do |name, collector| %>
|
59
|
-
<div class="rack-
|
60
|
-
|
61
|
-
|
62
|
-
|
11
|
+
<div class="rack-webprofiler__item rack-webprofiler_collectors_<%= name %>">
|
12
|
+
<a href="<%= WebProfiler::Router.url_for_profiler(token, name) %>">
|
13
|
+
<% unless collector.icon.nil? %>
|
14
|
+
<i class="icn"><img alt="" src="<%= collector.icon %>" /></i>
|
15
|
+
<% end %>
|
63
16
|
|
64
|
-
|
65
|
-
|
66
|
-
|
17
|
+
<% render_collector(collector, datas[name.to_sym][:datas]) %>
|
18
|
+
<span class="rack-webprofiler__item__value"><%= content_for :tab %></span>
|
19
|
+
<span class="rack-webprofiler__item__status-color <%= datas[name.to_sym][:status] %>"></span>
|
20
|
+
</a>
|
67
21
|
</div>
|
68
22
|
<% end %>
|
69
23
|
</div>
|
@@ -4,7 +4,7 @@ module Rack
|
|
4
4
|
class Engine < ::Rails::Engine # :nodoc:
|
5
5
|
initializer "rack-web_profiler.configure_middleware" do |app|
|
6
6
|
app.middleware.use Rack::WebProfiler do |c|
|
7
|
-
c.tmp_dir = File.expand_path(File.join(Rails.root, "tmp"), __FILE__)
|
7
|
+
c.tmp_dir = ::File.expand_path(::File.join(Rails.root, "tmp"), __FILE__)
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
@@ -2,15 +2,30 @@ module Rack
|
|
2
2
|
class WebProfiler::Collector::Rack::RequestCollector
|
3
3
|
include Rack::WebProfiler::Collector::DSL
|
4
4
|
|
5
|
-
icon
|
5
|
+
icon <<-'ICON'
|
6
|
+
data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+ICAgICAgICA8dGl0bGU+T3ZhbCA3IENvcHkgMjwvdGl0bGU+ICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiAgICA8ZGVmcz48L2RlZnM+ICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPiAgICAgICAgPGcgaWQ9IkRlc2t0b3AtMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwLjAwMDAwMCwgLTEzMC4wMDAwMDApIiBmaWxsPSIjNTg1NDczIj4gICAgICAgICAgICA8ZyBpZD0iUmVxdWVzdCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDEyMC4wMDAwMDApIj4gICAgICAgICAgICAgICAgPHBhdGggZD0iTTE3LjY3OTE5MTIsMTMuNDA2NDMyMiBDMTguMTAzNzAxMiwxMy4yNTUzNzMzIDE4LjU0NzA4OSwxMy4xNDQ1ODY0IDE5LjAwNDgzMTcsMTMuMDc4NjI3OCBMMTkuMDA0ODMxNywxMCBMMjAuOTk1MTY4MywxMCBMMjAuOTk1MTY4MywxMy4wNzg2Mjc4IEMyMS40NTI5MTEsMTMuMTQ0NTg2NCAyMS44OTYyOTg4LDEzLjI1NTM3MzMgMjIuMzIwODA4OCwxMy40MDY0MzIyIEwyMy43NjY1Mzg2LDEwLjY4NzQxIEwyNS41MjM5MDE1LDExLjYyMTgxNjUgTDI0LjA4MDM0MDcsMTQuMzM2NzU5NiBDMjQuNDU0NDUyLDE0LjYwOTU2NTUgMjQuODAwNTkwMywxNC45MTg5MDYzIDI1LjExMzU5ODIsMTUuMjU5NTg2NCBMMjcuNjI0NzkyLDEzLjUwMTIyOTYgTDI4Ljc2NjQwMjIsMTUuMTMxNjE3OSBMMjYuMjM5NDcyLDE2LjkwMDk5MzUgQzI2LjQ0Mjk1ODQsMTcuMzEyNjE1IDI2LjYwNzQ4OTQsMTcuNzQ3MjEzIDI2LjcyODIwMjgsMTguMTk5ODg5MyBMMjkuNzc1NjgxNCwxNy44MjU3MDU5IEwzMC4wMTgyNDI0LDE5LjgwMTIwNjkgTDI2Ljk2NDU5ODcsMjAuMTc2MTQ3MiBDMjYuOTU0Njg2MiwyMC42NDkzNjI3IDI2Ljg5ODI3NTUsMjEuMTExMDU1NiAyNi43OTk3ODQxLDIxLjU1Njc3NTkgTDI5LjY3NTIwODQsMjIuNjYwNTQ3OSBMMjguOTYxOTM1NiwyNC41MTg2ODcyIEwyNi4wOTg1NTE3LDIzLjQxOTUzNzEgQzI1Ljg3MzU5ODcsMjMuODI4ODI2IDI1LjYwOTIyNDgsMjQuMjEzMDczNSAyNS4zMTA1OTI0LDI0LjU2NzA3OTEgTDI3LjM2NTk4NjQsMjYuODQ5ODI1NCBMMjUuODg2ODc4LDI4LjE4MTYyMDYgTDIzLjgyNDc3MTQsMjUuODkxNDE5MSBDMjMuNDQ1Mzk3NywyNi4xNDI5NDcyIDIzLjA0MDE3MDgsMjYuMzU4MTMyMyAyMi42MTM5NzI3LDI2LjUzMjA1NjQgTDIzLjM1ODEzMTgsMjkuNTE2NzE1NCBMMjEuNDI2OTE2NiwyOS45OTgyMjE0IEwyMC42ODE3ODQ0LDI3LjAwOTY1OTQgQzIwLjQ1NzQ2NzgsMjcuMDMxNjA5MyAyMC4yMzAwMzYsMjcuMDQyODQxNiAyMCwyNy4wNDI4NDE2IEMxOS43Njk5NjQsMjcuMDQyODQxNiAxOS41NDI1MzIyLDI3LjAzMTYwOTMgMTkuMzE4MjE1NiwyNy4wMDk2NTk0IEwxOC41NzMwODM0LDI5Ljk5ODIyMTQgTDE2LjY0MTg2ODIsMjkuNTE2NzE1NCBMMTcuMzg2MDI3MywyNi41MzIwNTY0IEMxNi45NTk4MjkyLDI2LjM1ODEzMjMgMTYuNTU0NjAyMywyNi4xNDI5NDcyIDE2LjE3NTIyODYsMjUuODkxNDE5MSBMMTQuMTEzMTIyLDI4LjE4MTYyMDYgTDEyLjYzNDAxMzYsMjYuODQ5ODI1NCBMMTQuNjg5NDA3NiwyNC41NjcwNzkxIEMxNC4zOTA3NzUyLDI0LjIxMzA3MzUgMTQuMTI2NDAxMywyMy44Mjg4MjYgMTMuOTAxNDQ4MywyMy40MTk1MzcxIEwxMS4wMzgwNjQ0LDI0LjUxODY4NzIgTDEwLjMyNDc5MTYsMjIuNjYwNTQ3OSBMMTMuMjAwMjE1OSwyMS41NTY3NzU5IEMxMy4xMDE3MjQ1LDIxLjExMTA1NTYgMTMuMDQ1MzEzOCwyMC42NDkzNjI4IDEzLjAzNTQwMTMsMjAuMTc2MTQ3MyBMOS45ODE3NTc1OSwxOS44MDEyMDY5IEwxMC4yMjQzMTg2LDE3LjgyNTcwNTkgTDEzLjI3MTc5NzIsMTguMTk5ODg5MyBDMTMuMzkyNTEwNiwxNy43NDcyMTMgMTMuNTU3MDQxNiwxNy4zMTI2MTUgMTMuNzYwNTI4LDE2LjkwMDk5MzUgTDExLjIzMzU5NzgsMTUuMTMxNjE3OSBMMTIuMzc1MjA4LDEzLjUwMTIyOTYgTDE0Ljg4NjQwMTgsMTUuMjU5NTg2NCBDMTUuMTk5NDA5NywxNC45MTg5MDYzIDE1LjU0NTU0OCwxNC42MDk1NjU1IDE1LjkxOTY1OTMsMTQuMzM2NzU5NiBMMTQuNDc2MDk4NSwxMS42MjE4MTY1IEwxNi4yMzM0NjE0LDEwLjY4NzQxIEwxNy42NzkxOTEyLDEzLjQwNjQzMjIgWiBNMjAsMjMuMDMyNzYxMiBDMjEuNjQ4ODQ4OSwyMy4wMzI3NjEyIDIyLjk4NTUwNSwyMS42ODYyMzA2IDIyLjk4NTUwNSwyMC4wMjUyMDA5IEMyMi45ODU1MDUsMTguMzY0MTcxMyAyMS42NDg4NDg5LDE3LjAxNzY0MDYgMjAsMTcuMDE3NjQwNiBDMTguMzUxMTUxMSwxNy4wMTc2NDA2IDE3LjAxNDQ5NSwxOC4zNjQxNzEzIDE3LjAxNDQ5NSwyMC4wMjUyMDA5IEMxNy4wMTQ0OTUsMjEuNjg2MjMwNiAxOC4zNTExNTExLDIzLjAzMjc2MTIgMjAsMjMuMDMyNzYxMiBaIiBpZD0iT3ZhbC03LUNvcHktMiI+PC9wYXRoPiAgICAgICAgICAgIDwvZz4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==
|
7
|
+
ICON
|
6
8
|
|
7
9
|
collector_name "rack_request"
|
10
|
+
# collector_key "rack_request"
|
11
|
+
# collector_name "Request"
|
8
12
|
position 2
|
9
13
|
|
10
14
|
collect do |request, response|
|
15
|
+
store :request_headers, get_request_headers(request)
|
11
16
|
store :request_path, request.path
|
12
17
|
store :request_method, request.request_method
|
13
|
-
store :
|
18
|
+
store :request_cookies, request.cookies
|
19
|
+
store :request_get, request.GET
|
20
|
+
store :request_post, get_request_post(request)
|
21
|
+
store :request_session, request.session
|
22
|
+
store :request_cookies, request.cookies
|
23
|
+
store :request_body, get_request_body(request)
|
24
|
+
|
25
|
+
store :rack_env, {} # request.env.each { |k, v| v.inspect }
|
26
|
+
|
27
|
+
store :response_status, response.status
|
28
|
+
store :response_headers, response.headers
|
14
29
|
|
15
30
|
if response.successful?
|
16
31
|
status :success
|
@@ -23,11 +38,212 @@ module Rack
|
|
23
38
|
|
24
39
|
template __FILE__, type: :DATA
|
25
40
|
|
26
|
-
is_enabled? -> { !defined?(Rails) && !defined?(Sinatra) }
|
41
|
+
is_enabled? -> { defined?(Rack) && !defined?(Rails) && !defined?(Sinatra) }
|
42
|
+
|
43
|
+
class << self
|
44
|
+
# Get request headers.
|
45
|
+
#
|
46
|
+
# @return [Hash]
|
47
|
+
def get_request_headers(request)
|
48
|
+
request.env.select {|k,v| k.start_with? 'HTTP_'}
|
49
|
+
.collect {|k,v| [k.sub(/^HTTP_/, ''), v]}
|
50
|
+
.collect {|k,v| [k.split('_').collect(&:capitalize).join('-'), v]}
|
51
|
+
end
|
52
|
+
|
53
|
+
def get_request_post(request)
|
54
|
+
request.POST if request.POST && !request.POST.empty?
|
55
|
+
rescue Exception
|
56
|
+
nil
|
57
|
+
end
|
58
|
+
|
59
|
+
def get_request_body(request)
|
60
|
+
return nil if request.body.nil?
|
61
|
+
request.body.gets
|
62
|
+
end
|
63
|
+
end
|
27
64
|
end
|
28
65
|
end
|
29
66
|
|
30
67
|
__END__
|
31
|
-
|
68
|
+
<% content_for :tab do %>
|
32
69
|
<%= data[:response_status] %> | <%= data[:request_method] %> <%= data[:request_path] %>
|
33
|
-
|
70
|
+
<% end %>
|
71
|
+
|
72
|
+
<% content_for :panel do %>
|
73
|
+
<div class="block">
|
74
|
+
<h3>GET</h3>
|
75
|
+
<% unless data[:request_get].empty? %>
|
76
|
+
<table>
|
77
|
+
<thead>
|
78
|
+
<tr>
|
79
|
+
<th>Key</th>
|
80
|
+
<th>Value</th>
|
81
|
+
</tr>
|
82
|
+
<thead>
|
83
|
+
<tbody>
|
84
|
+
<% data[:request_get].each do |k, v| %>
|
85
|
+
<tr>
|
86
|
+
<th><%= k %></th>
|
87
|
+
<td class="code"><%= v %></td>
|
88
|
+
</tr>
|
89
|
+
<% end %>
|
90
|
+
</tbody>
|
91
|
+
</table>
|
92
|
+
<% else %>
|
93
|
+
<p><span class="text__no-value">No GET parameters</span></p>
|
94
|
+
<% end %>
|
95
|
+
</div>
|
96
|
+
|
97
|
+
<div class="block">
|
98
|
+
<h3>POST</h3>
|
99
|
+
<% if data[:request_post] && !data[:request_post].empty? %>
|
100
|
+
<table>
|
101
|
+
<thead>
|
102
|
+
<tr>
|
103
|
+
<th>Key</th>
|
104
|
+
<th>Value</th>
|
105
|
+
</tr>
|
106
|
+
<thead>
|
107
|
+
<tbody>
|
108
|
+
<% data[:request_post].each do |k, v| %>
|
109
|
+
<tr>
|
110
|
+
<th><%= k %></th>
|
111
|
+
<td class="code"><%= v %></td>
|
112
|
+
</tr>
|
113
|
+
<% end %>
|
114
|
+
</tbody>
|
115
|
+
</table>
|
116
|
+
<% else %>
|
117
|
+
<p><span class="text__no-value">No POST parameters</span></p>
|
118
|
+
<% end %>
|
119
|
+
</div>
|
120
|
+
|
121
|
+
<div class="block">
|
122
|
+
<h3>Request headers</h3>
|
123
|
+
<% unless data[:request_headers].empty? %>
|
124
|
+
<table>
|
125
|
+
<thead>
|
126
|
+
<tr>
|
127
|
+
<th>Name</th>
|
128
|
+
<th>Version</th>
|
129
|
+
</tr>
|
130
|
+
<thead>
|
131
|
+
<tbody>
|
132
|
+
<% data[:request_headers].sort.each do |k, v| %>
|
133
|
+
<tr>
|
134
|
+
<th><%= k %></th>
|
135
|
+
<td class="code"><%= v %></td>
|
136
|
+
</tr>
|
137
|
+
<% end %>
|
138
|
+
</tbody>
|
139
|
+
</table>
|
140
|
+
<% else %>
|
141
|
+
<p><span class="text__no-value">No request headers</span></p>
|
142
|
+
<% end %>
|
143
|
+
</div>
|
144
|
+
|
145
|
+
<div class="block">
|
146
|
+
<h3>Request content</h3>
|
147
|
+
<% unless data[:request_body].nil? %>
|
148
|
+
<code><%= data[:request_body] %></code>
|
149
|
+
<% else %>
|
150
|
+
<p><span class="text__no-value">No request content</span></p>
|
151
|
+
<% end %>
|
152
|
+
</div>
|
153
|
+
|
154
|
+
<div class="block">
|
155
|
+
<h3>Response headers</h3>
|
156
|
+
<% unless data[:response_headers].empty? %>
|
157
|
+
<table>
|
158
|
+
<thead>
|
159
|
+
<tr>
|
160
|
+
<th>Name</th>
|
161
|
+
<th>Version</th>
|
162
|
+
</tr>
|
163
|
+
<thead>
|
164
|
+
<tbody>
|
165
|
+
<% data[:response_headers].sort.each do |k, v| %>
|
166
|
+
<tr>
|
167
|
+
<th><%= k %></th>
|
168
|
+
<td class="code"><%= v %></td>
|
169
|
+
</tr>
|
170
|
+
<% end %>
|
171
|
+
</tbody>
|
172
|
+
</table>
|
173
|
+
<% else %>
|
174
|
+
<p><span class="text__no-value">No response headers</span></p>
|
175
|
+
<% end %>
|
176
|
+
</div>
|
177
|
+
|
178
|
+
<div class="block">
|
179
|
+
<h3>Session</h3>
|
180
|
+
<% unless data[:request_session].empty? %>
|
181
|
+
<table>
|
182
|
+
<thead>
|
183
|
+
<tr>
|
184
|
+
<th>Name</th>
|
185
|
+
<th>Version</th>
|
186
|
+
</tr>
|
187
|
+
<thead>
|
188
|
+
<tbody>
|
189
|
+
<% data[:request_session].each do |k, v| %>
|
190
|
+
<tr>
|
191
|
+
<th><%= k %></th>
|
192
|
+
<td class="code"><%= v %></td>
|
193
|
+
</tr>
|
194
|
+
<% end %>
|
195
|
+
</tbody>
|
196
|
+
</table>
|
197
|
+
<% else %>
|
198
|
+
<p><span class="text__no-value">No session data</span></p>
|
199
|
+
<% end %>
|
200
|
+
</div>
|
201
|
+
|
202
|
+
<div class="block">
|
203
|
+
<h3>Cookies</h3>
|
204
|
+
<% unless data[:request_cookies].empty? %>
|
205
|
+
<table>
|
206
|
+
<thead>
|
207
|
+
<tr>
|
208
|
+
<th>Name</th>
|
209
|
+
<th>Version</th>
|
210
|
+
</tr>
|
211
|
+
<thead>
|
212
|
+
<tbody>
|
213
|
+
<% data[:request_cookies].each do |k, v| %>
|
214
|
+
<tr>
|
215
|
+
<th><%= k %></th>
|
216
|
+
<td class="code"><%= v %></td>
|
217
|
+
</tr>
|
218
|
+
<% end %>
|
219
|
+
</tbody>
|
220
|
+
</table>
|
221
|
+
<% else %>
|
222
|
+
<p><span class="text__no-value">No cookies data</span></p>
|
223
|
+
<% end %>
|
224
|
+
</div>
|
225
|
+
|
226
|
+
<div class="block">
|
227
|
+
<h3>Env</h3>
|
228
|
+
<% if data[:rack_env] && !data[:rack_env].empty? %>
|
229
|
+
<table>
|
230
|
+
<thead>
|
231
|
+
<tr>
|
232
|
+
<th>Key</th>
|
233
|
+
<th>Value</th>
|
234
|
+
</tr>
|
235
|
+
<thead>
|
236
|
+
<tbody>
|
237
|
+
<% data[:rack_env].each do |k, v| %>
|
238
|
+
<tr>
|
239
|
+
<th><%= k %></th>
|
240
|
+
<td class="code"><%= v %></td>
|
241
|
+
</tr>
|
242
|
+
<% end %>
|
243
|
+
</tbody>
|
244
|
+
</table>
|
245
|
+
<% else %>
|
246
|
+
<p><span class="text__no-value">No rack env datas</span></p>
|
247
|
+
<% end %>
|
248
|
+
</div>
|
249
|
+
<% end %>
|
@@ -3,7 +3,7 @@ module Rack
|
|
3
3
|
include Rack::WebProfiler::Collector::DSL
|
4
4
|
|
5
5
|
icon <<-'ICON'
|
6
|
-
data:image/
|
6
|
+
data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+ICAgICAgICA8dGl0bGU+VHJpYW5nbGUgMTwvdGl0bGU+ICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiAgICA8ZGVmcz48L2RlZnM+ICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPiAgICAgICAgPGcgaWQ9IkRlc2t0b3AtMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTcxLjAwMDAwMCwgLTEwLjAwMDAwMCkiIGZpbGw9IiM1ODU0NzMiPiAgICAgICAgICAgIDxwYXRoIGQ9Ik04MSwzMCBMNzEsMTUgTDkxLDE1IEw4MSwzMCBaIE05MSwxNCBMNzEsMTQgTDc1LDEwIEw4NywxMCBMOTEsMTQgWiIgaWQ9IlRyaWFuZ2xlLTEiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==
|
7
7
|
ICON
|
8
8
|
|
9
9
|
collector_name "ruby"
|
@@ -41,6 +41,42 @@ ICON
|
|
41
41
|
end
|
42
42
|
|
43
43
|
__END__
|
44
|
-
|
44
|
+
<% content_for :tab do %>
|
45
45
|
<%= data[:ruby_version] %>
|
46
|
-
|
46
|
+
<% end %>
|
47
|
+
|
48
|
+
<% content_for :panel do %>
|
49
|
+
<div class="block">
|
50
|
+
<h3>Ruby informations</h3>
|
51
|
+
<table>
|
52
|
+
<tr>
|
53
|
+
<th>Version</th>
|
54
|
+
<td><%= "#{data[:ruby_version]}p#{data[:ruby_patchlevel]} (#{data[:ruby_release_date]} revision #{data[:ruby_revision]}) [#{data[:ruby_platform]}]" %></td>
|
55
|
+
</tr>
|
56
|
+
<tr>
|
57
|
+
<th>Documentation</th>
|
58
|
+
<td><a href="<%= data[:ruby_doc_url] %>"><%= data[:ruby_doc_url] %></a></td>
|
59
|
+
</tr>
|
60
|
+
</table>
|
61
|
+
</div>
|
62
|
+
|
63
|
+
<div class="block">
|
64
|
+
<h3>Gems</h3>
|
65
|
+
<table>
|
66
|
+
<thead>
|
67
|
+
<tr>
|
68
|
+
<th>Name</th>
|
69
|
+
<th>Version</th>
|
70
|
+
</tr>
|
71
|
+
<thead>
|
72
|
+
<tbody>
|
73
|
+
<% data[:gems_list].sort!{|a,b| a[:name] <=> b[:name] }.each do |g| %>
|
74
|
+
<tr>
|
75
|
+
<th><%= g[:name] %></th>
|
76
|
+
<td><%= g[:version] %></td>
|
77
|
+
</tr>
|
78
|
+
<% end %>
|
79
|
+
</tbody>
|
80
|
+
</table>
|
81
|
+
</div>
|
82
|
+
<% end %>
|