oneapm_rpm 1.1.3 → 1.2.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 +4 -4
- data/lib/one_apm/agent.rb +4 -4
- data/lib/one_apm/agent/agent/connect.rb +3 -49
- data/lib/one_apm/agent/agent/container_data_manager.rb +2 -10
- data/lib/one_apm/agent/agent/forkable_dispatcher_functions.rb +4 -2
- data/lib/one_apm/agent/agent/helpers.rb +2 -0
- data/lib/one_apm/agent/agent/start.rb +3 -3
- data/lib/one_apm/agent/agent/start_worker_thread.rb +2 -0
- data/lib/one_apm/agent/database/active_record_helper.rb +1 -0
- data/lib/one_apm/agent/{datastores.rb → datastore.rb} +2 -2
- data/lib/one_apm/agent/{datastores → datastore}/metric_helper.rb +1 -1
- data/lib/one_apm/agent/{datastores → datastore}/mongo.rb +1 -1
- data/lib/one_apm/agent/{datastores → datastore}/mongo/metric_translator.rb +4 -4
- data/lib/one_apm/agent/{datastores → datastore}/mongo/obfuscator.rb +1 -1
- data/lib/one_apm/agent/{datastores → datastore}/mongo/statement_formatter.rb +2 -2
- data/lib/one_apm/agent/threading/agent_thread.rb +50 -50
- data/lib/one_apm/agent/threading/thread_profile.rb +1 -4
- data/lib/one_apm/collector/commands/thread_profiler_session.rb +1 -1
- data/lib/one_apm/collector/containers/agent_command_router.rb +1 -1
- data/lib/one_apm/collector/containers/transaction_sampler.rb +7 -1
- data/lib/one_apm/collector/containers/utilization_data.rb +3 -4
- data/lib/one_apm/{agent → collector}/sampler.rb +1 -1
- data/lib/one_apm/{agent → collector}/samplers/cpu_sampler.rb +4 -4
- data/lib/one_apm/{agent → collector}/samplers/delayed_job_sampler.rb +3 -14
- data/lib/one_apm/{agent → collector}/samplers/memory_sampler.rb +13 -15
- data/lib/one_apm/{agent → collector}/samplers/object_sampler.rb +3 -3
- data/lib/one_apm/{agent → collector}/samplers/vm_sampler.rb +2 -2
- data/lib/one_apm/collector/{forked_process_service.rb → support/forked_process_service.rb} +1 -1
- data/lib/one_apm/{agent → collector/support}/sampler_collection.rb +2 -2
- data/lib/one_apm/configuration/default_source.rb +7 -2
- data/lib/one_apm/frameworks/rails.rb +18 -0
- data/lib/one_apm/inst/nosql/memcache.rb +2 -2
- data/lib/one_apm/inst/nosql/mongo.rb +6 -6
- data/lib/one_apm/inst/nosql/mongo_moped.rb +3 -3
- data/lib/one_apm/inst/nosql/redis.rb +4 -4
- data/lib/one_apm/manager.rb +38 -6
- data/lib/one_apm/metrics/metric_spec.rb +1 -4
- data/lib/one_apm/probe/instrumentation.rb +2 -5
- data/lib/one_apm/rack/developer_mode.rb +221 -0
- data/lib/one_apm/rack/developer_mode/helper.rb +299 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/_explain_plans.html.erb +25 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/_home_right.html.erb +18 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/_sample.html.erb +20 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/_segment.html.erb +24 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/_segment_limit_message.html.erb +1 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/_segment_row.html.erb +11 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/_show_sample_detail.html.erb +30 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/_show_sample_sql.html.erb +19 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/_show_sample_summary.html.erb +25 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/_sql_row.html.erb +15 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/_stack_trace.html.erb +14 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/_summary_table.html.erb +12 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/assets/images/arrow-close.png +0 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/assets/images/arrow-open.png +0 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/assets/images/oneapm_logo.png +0 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/assets/javascript/c3.min.js +5 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/assets/javascript/d3.min.js +5 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/assets/javascript/jquery.min.js +4 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/assets/javascript/transaction_sample.js +120 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/assets/stylesheets/bootstrap.min.css +5 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/assets/stylesheets/c3.css +158 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/assets/stylesheets/style.css +149 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/explain_sql.html.erb +53 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/index.html.erb +33 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/layout.html.erb +46 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/sample_not_found.html.erb +2 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/show_sample.html.erb +61 -0
- data/lib/one_apm/rack/developer_mode/views/oneapm/threads.html.erb +53 -0
- data/lib/one_apm/{agent/threading → support/backtrace}/backtrace_node.rb +0 -0
- data/lib/one_apm/{agent/threading → support/backtrace}/backtrace_service.rb +0 -0
- data/lib/one_apm/support/environment_report.rb +6 -38
- data/lib/one_apm/support/system_info.rb +1 -6
- data/lib/one_apm/transaction/composite_segment.rb +30 -0
- data/lib/one_apm/transaction/sample_buffer/developer_mode_sample_buffer.rb +58 -0
- data/lib/one_apm/transaction/segment_summary.rb +0 -5
- data/lib/one_apm/transaction/summary_segment.rb +24 -0
- data/lib/one_apm/transaction/transaction_sample.rb +2 -0
- data/lib/one_apm/version.rb +2 -2
- metadata +51 -19
- data/lib/one_apm/configuration/autostart.rb +0 -41
@@ -0,0 +1,149 @@
|
|
1
|
+
#pie_chart_image
|
2
|
+
{
|
3
|
+
margin: 15px 0px 15px 0px;
|
4
|
+
}
|
5
|
+
|
6
|
+
#reset_transactions, #reset_transactions a
|
7
|
+
{
|
8
|
+
color:red;
|
9
|
+
text-align:right;
|
10
|
+
}
|
11
|
+
|
12
|
+
.code {
|
13
|
+
font-family: monospace;
|
14
|
+
font-size: 13px;
|
15
|
+
}
|
16
|
+
|
17
|
+
.application_stack_trace, .full_stack_trace
|
18
|
+
{
|
19
|
+
margin-top: 10px;
|
20
|
+
margin-left: 20px;
|
21
|
+
overflow: auto;
|
22
|
+
}
|
23
|
+
|
24
|
+
.sql_statement
|
25
|
+
{
|
26
|
+
overflow: auto;
|
27
|
+
}
|
28
|
+
|
29
|
+
.selected {
|
30
|
+
background: url(/oneapm/image?file=arrow-close.png) no-repeat;
|
31
|
+
}
|
32
|
+
|
33
|
+
.expand {
|
34
|
+
background-image:url(/oneapm/image?file=arrow-open.png);
|
35
|
+
width:16px;
|
36
|
+
background-position: top left;
|
37
|
+
padding-left: 20px;
|
38
|
+
background-repeat:no-repeat;
|
39
|
+
text-decoration: none;
|
40
|
+
}
|
41
|
+
|
42
|
+
.collapse {
|
43
|
+
background-image:url(/oneapm/image?file=arrow-close.png);
|
44
|
+
text-decoration: none;
|
45
|
+
width:16px;
|
46
|
+
padding-left: 20px;
|
47
|
+
background-position: top left;
|
48
|
+
background-repeat:no-repeat;
|
49
|
+
}
|
50
|
+
|
51
|
+
|
52
|
+
/*
|
53
|
+
new style
|
54
|
+
*/
|
55
|
+
|
56
|
+
html, body {
|
57
|
+
height: 100%;
|
58
|
+
background: #fcfcfc;
|
59
|
+
}
|
60
|
+
|
61
|
+
.header {
|
62
|
+
background: #393939;
|
63
|
+
padding-top: 15px;
|
64
|
+
padding-bottom: 15px;
|
65
|
+
color: #eee;
|
66
|
+
line-height: 44px;
|
67
|
+
}
|
68
|
+
|
69
|
+
.header a.goto-oneapm-ruby {
|
70
|
+
color: #fff;
|
71
|
+
text-decoration: underline;
|
72
|
+
}
|
73
|
+
|
74
|
+
.header a.goto-oneapm-ruby:hover {
|
75
|
+
background: #fff;
|
76
|
+
color: #333;
|
77
|
+
}
|
78
|
+
|
79
|
+
.footer {
|
80
|
+
border-top: 4px solid #666;
|
81
|
+
padding-top: 15px;
|
82
|
+
padding-bottom: 15px;
|
83
|
+
background: #fcfcfc;
|
84
|
+
}
|
85
|
+
|
86
|
+
span.application_title {
|
87
|
+
font-weight: bold;
|
88
|
+
font-size: 18px;
|
89
|
+
color: #eee;
|
90
|
+
display: inline-block;
|
91
|
+
padding-left: 20px;
|
92
|
+
}
|
93
|
+
|
94
|
+
.main-container {
|
95
|
+
padding-top: 15px;
|
96
|
+
padding-bottom: 15px;
|
97
|
+
background: #fff;
|
98
|
+
}
|
99
|
+
|
100
|
+
.sample-table td {
|
101
|
+
text-align: left;
|
102
|
+
}
|
103
|
+
|
104
|
+
.current-url {
|
105
|
+
background: #f9f9f9;
|
106
|
+
margin: 0px;
|
107
|
+
padding: 0px;
|
108
|
+
}
|
109
|
+
|
110
|
+
.current-url h3 {
|
111
|
+
margin: 0px;
|
112
|
+
padding: 10px 8px;
|
113
|
+
}
|
114
|
+
|
115
|
+
.current-request {
|
116
|
+
font-size: 14px;
|
117
|
+
background: #333;
|
118
|
+
color: #fff;
|
119
|
+
}
|
120
|
+
|
121
|
+
.table caption {
|
122
|
+
font-size: 18px;
|
123
|
+
color: #333;
|
124
|
+
}
|
125
|
+
|
126
|
+
#chart-legend ul {
|
127
|
+
list-style-type: none;
|
128
|
+
}
|
129
|
+
|
130
|
+
#chart-legend ul li {
|
131
|
+
text-align: left;
|
132
|
+
line-height: 20px;
|
133
|
+
padding: 2px;
|
134
|
+
border-radius: 2px;
|
135
|
+
}
|
136
|
+
|
137
|
+
#chart-legend ul li:hover {
|
138
|
+
background: #eee;
|
139
|
+
cursor: pointer;
|
140
|
+
}
|
141
|
+
|
142
|
+
#chart-legend li span{
|
143
|
+
display: inline-block;
|
144
|
+
width: 20px;
|
145
|
+
height: 20px;
|
146
|
+
margin-right: 5px;
|
147
|
+
border-radius: 2px;
|
148
|
+
line-height: 20px;
|
149
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
<script src="/oneapm/assets/javascript/transaction_sample.js" type="text/javascript"></script>
|
2
|
+
<div class="rows">
|
3
|
+
<div class="col-lg-12">
|
4
|
+
<h3> 数据库查询分析(Explain) </h3>
|
5
|
+
|
6
|
+
<table class="table table-striped sample-table">
|
7
|
+
<% colspan = @explanation ? @explanation.length : 1 %>
|
8
|
+
<% if @sql %>
|
9
|
+
<tr>
|
10
|
+
<th width="100">
|
11
|
+
查询
|
12
|
+
</th>
|
13
|
+
<td colspan=<%= colspan %>>
|
14
|
+
<div class="sql_statement code">
|
15
|
+
<%= line_wrap_sql(@sql) %>
|
16
|
+
</div>
|
17
|
+
</td>
|
18
|
+
</tr>
|
19
|
+
<% end %>
|
20
|
+
|
21
|
+
<% if @obfuscated_sql %>
|
22
|
+
<tr>
|
23
|
+
<th width="100">
|
24
|
+
Obfuscated Query
|
25
|
+
</th>
|
26
|
+
<td colspan=<%= colspan %>>
|
27
|
+
<small>
|
28
|
+
<div class="sql_statement code">
|
29
|
+
<%= line_wrap_sql(@obfuscated_sql) %>
|
30
|
+
</div>
|
31
|
+
</small>
|
32
|
+
</td>
|
33
|
+
</tr>
|
34
|
+
<% end %>
|
35
|
+
<tr>
|
36
|
+
<th align=right>
|
37
|
+
耗时
|
38
|
+
</th>
|
39
|
+
<td colspan=<%= colspan %>>
|
40
|
+
<%= with_delimiter(to_ms(@segment.duration)) %>ms
|
41
|
+
</td>
|
42
|
+
</tr>
|
43
|
+
</table>
|
44
|
+
<hr>
|
45
|
+
<table class="table table-striped sample-table">
|
46
|
+
<% if @explanation %>
|
47
|
+
<%= render :partial => 'explain_plans' %>
|
48
|
+
<% end %>
|
49
|
+
</table>
|
50
|
+
<hr />
|
51
|
+
<%= render_backtrace %>
|
52
|
+
</div>
|
53
|
+
</div>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<div class="row">
|
2
|
+
<div class="col-lg-8">
|
3
|
+
<div class="btn-group">
|
4
|
+
<a href="/oneapm/reset" class="btn btn-default">清除数据 (<%= @samples.size %>)</a>
|
5
|
+
<a href="/oneapm/threads" class="btn btn-default">线程列表</a>
|
6
|
+
</div>
|
7
|
+
<hr />
|
8
|
+
<table class="table table-striped sample-table">
|
9
|
+
<thead>
|
10
|
+
<tr>
|
11
|
+
<th>
|
12
|
+
<%= link_to_if (params[:h] ||params[:u]), '请求时间' %>
|
13
|
+
</th>
|
14
|
+
<th>
|
15
|
+
<%= link_to_unless_current('响应时间', :h => 'y') %>
|
16
|
+
</th>
|
17
|
+
<th>
|
18
|
+
<%= link_to_unless_current('请求地址', :u =>'y') %>
|
19
|
+
</th>
|
20
|
+
<th>
|
21
|
+
详细信息
|
22
|
+
</th>
|
23
|
+
</tr>
|
24
|
+
</thead>
|
25
|
+
<% @samples.each do |sample| %>
|
26
|
+
<%= render :partial => :sample, :object => sample %>
|
27
|
+
<% end %>
|
28
|
+
</table>
|
29
|
+
</div>
|
30
|
+
<div class="col-lg-4">
|
31
|
+
<%= render :partial => :home_right %>
|
32
|
+
</div>
|
33
|
+
</div>
|
@@ -0,0 +1,46 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<script type="text/javascript" src="/oneapm/assets/javascript/jquery.min.js"></script>
|
5
|
+
<script type="text/javascript" src="/oneapm/assets/javascript/d3.min.js"></script>
|
6
|
+
<script type="text/javascript" src="/oneapm/assets/javascript/c3.min.js"></script>
|
7
|
+
<meta charset="utf-8" />
|
8
|
+
<title>OneAPM 开发模式</title>
|
9
|
+
<link rel="stylesheet" href="/oneapm/assets/stylesheets/bootstrap.min.css">
|
10
|
+
<link rel="stylesheet" href="/oneapm/assets/stylesheets/c3.css" media="screen" type="text/css" />
|
11
|
+
<link rel="stylesheet" href="/oneapm/assets/stylesheets/style.css" media="screen" type="text/css" />
|
12
|
+
</head>
|
13
|
+
<body>
|
14
|
+
<div class="container-fluid header">
|
15
|
+
<div class="row">
|
16
|
+
<div class="col-lg-6">
|
17
|
+
<div class="pull-left">
|
18
|
+
<a href="/oneapm">
|
19
|
+
<img src="/oneapm/assets/images/oneapm_logo.png" alt="OneAPM" />
|
20
|
+
<span class="application_title">开发模式</span>
|
21
|
+
</a>
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
<div class="col-lg-6">
|
25
|
+
<div class="pull-right">
|
26
|
+
在生产环境下监控您应用程序的性能。<a href="http://www.oneapm.com/ai/ruby.html" class="goto-oneapm-ruby">点击这里查看如何设置</a>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
</div>
|
31
|
+
<div class="container-fluid main-container">
|
32
|
+
<%= yield %>
|
33
|
+
</div>
|
34
|
+
<div class="container-fluid footer">
|
35
|
+
<div class="row">
|
36
|
+
<div class="col-lg-6">
|
37
|
+
<p>
|
38
|
+
在生产环境下监控您应用程序的性能。<a href="http://www.oneapm.com/ai/ruby.html">点击这里查看如何设置
|
39
|
+
</p>
|
40
|
+
<p>
|
41
|
+
© 2008 - <%= Time.now.strftime('%Y') %> OneAPM. All rights reserved.
|
42
|
+
</p>
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
</body>
|
@@ -0,0 +1,61 @@
|
|
1
|
+
<script type="text/javascript" src="/oneapm/assets/javascript/transaction_sample.js"></script>
|
2
|
+
|
3
|
+
<div class="row">
|
4
|
+
<div class="col-lg-12 code">
|
5
|
+
<div class="current-url">
|
6
|
+
<h3><%= @sample.params[:uri]%></h3>
|
7
|
+
</div>
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
<div class="row">
|
11
|
+
<div class="col-lg-12">
|
12
|
+
<table class="table sample_table code current-request">
|
13
|
+
<tr>
|
14
|
+
<td>
|
15
|
+
<%= @sample_controller_name%>
|
16
|
+
</td>
|
17
|
+
<td>
|
18
|
+
<%= format_timestamp(Time.at(@sample.start_time)) %>
|
19
|
+
</td>
|
20
|
+
<td>
|
21
|
+
<%= colorize(@sample.duration, 1, 2) %> ms
|
22
|
+
</td>
|
23
|
+
<td>
|
24
|
+
CPU:<%= to_ms(@sample.params[:cpu_time]) if @sample.params[:cpu_time] %> ms
|
25
|
+
</td>
|
26
|
+
</tr>
|
27
|
+
</table>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
|
31
|
+
<div class="row">
|
32
|
+
<div class="col-lg-12">
|
33
|
+
<% if @sample.profile %>
|
34
|
+
<%= profile_table(@sample, @profile_options) %>
|
35
|
+
<% else %>
|
36
|
+
<div class="row">
|
37
|
+
<div class="col-lg-offset-3 col-lg-6">
|
38
|
+
<div class="btn-group btn-group-justified" style="padding-bottom: 20px;">
|
39
|
+
<a href="show_sample_summary?id=<%= params['id'] %>" class="btn btn-primary show_sample_summary">概 览</a>
|
40
|
+
<a href="show_sample_detail?id=<%= params['id'] %>" class="btn btn-primary show_sample_detail">详 细</a>
|
41
|
+
<a href="show_sample_sql?id=<%= params['id'] %>" class="btn btn-primary show_sample_sql">数据库</a>
|
42
|
+
</div>
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
|
46
|
+
<%
|
47
|
+
current_partial = nil
|
48
|
+
|
49
|
+
%w[show_sample_summary show_sample_sql show_sample_detail].select do |p|
|
50
|
+
current_partial = p if @req.path.include?(p)
|
51
|
+
end
|
52
|
+
|
53
|
+
options = {:align => 'center', :id => current_partial}
|
54
|
+
%>
|
55
|
+
<%= content_tag('div', render(:partial => current_partial), options) %>
|
56
|
+
<script type="text/javascript">
|
57
|
+
$(".<%= current_partial %>").addClass('active');
|
58
|
+
</script>
|
59
|
+
<% end %>
|
60
|
+
</div>
|
61
|
+
</div>
|
@@ -0,0 +1,53 @@
|
|
1
|
+
<div class="row">
|
2
|
+
<div class="col-lg-12">
|
3
|
+
<h2>线程列表</h2>
|
4
|
+
</div>
|
5
|
+
<%
|
6
|
+
main = Thread.main
|
7
|
+
threads = Thread.list - [ main ]
|
8
|
+
oa_threads = []
|
9
|
+
threads.delete_if { | thread | oa_threads << thread if thread.key?(:oneapm_label) }
|
10
|
+
%>
|
11
|
+
<div class="col-lg-6">
|
12
|
+
<table class="table">
|
13
|
+
<caption>应用程序线程列表</caption>
|
14
|
+
<thead>
|
15
|
+
<th>Name</th>
|
16
|
+
<th>Status</th>
|
17
|
+
<th>Group</th>
|
18
|
+
<th>Priority</th>
|
19
|
+
</thead>
|
20
|
+
|
21
|
+
<% ([ main ] + threads).each_with_index do | thread, i | %>
|
22
|
+
<tr>
|
23
|
+
<td><%= h(thread == main ? 'main' : thread.to_s) %></td>
|
24
|
+
<td><%= h(thread.status || 'terminated with exception') %></td>
|
25
|
+
<td><%= h(thread.group || 'none') %></td>
|
26
|
+
<td><%= h thread.priority %></td>
|
27
|
+
</tr>
|
28
|
+
<% end %>
|
29
|
+
</table>
|
30
|
+
</div>
|
31
|
+
<div class="col-lg-6">
|
32
|
+
<table class="table">
|
33
|
+
<caption>OneAPM探针线程列表</caption>
|
34
|
+
<% if oa_threads.size > 0 %>
|
35
|
+
<thead>
|
36
|
+
<th>Name</th>
|
37
|
+
<th>Status</th>
|
38
|
+
<th>Group</th>
|
39
|
+
<th>Priority</th>
|
40
|
+
</thead>
|
41
|
+
|
42
|
+
<% oa_threads.each_with_index do | thread, i | %>
|
43
|
+
<tr>
|
44
|
+
<td><%= h thread[:oneapm_label] %></td>
|
45
|
+
<td><%= h(thread.status || 'terminated with exception') %></td>
|
46
|
+
<td><%= h(thread.group || 'none') %></td>
|
47
|
+
<td><%= h thread.priority %></td>
|
48
|
+
</tr>
|
49
|
+
<% end %>
|
50
|
+
<% end %>
|
51
|
+
</table>
|
52
|
+
</div>
|
53
|
+
</div>
|
File without changes
|
File without changes
|
@@ -1,30 +1,8 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
module OneApm
|
4
|
-
# The EnvironmentReport is responsible for analyzing the application's
|
5
|
-
# environment and generating the data for the Environment Report in OneApm's interface.
|
6
|
-
#
|
7
|
-
# It contains useful system information like Ruby version, OS, loaded gems,
|
8
|
-
# etc.
|
9
|
-
#
|
10
|
-
# Additional logic can be registered by using the EnvironmentReport.report_on
|
11
|
-
# hook.
|
12
4
|
class EnvironmentReport
|
13
5
|
|
14
|
-
# This is the main interface for registering logic that should be included
|
15
|
-
# in the Environment Report. For example:
|
16
|
-
#
|
17
|
-
# EnvironmentReport.report_on "Day of week" do
|
18
|
-
# Time.now.strftime("%A")
|
19
|
-
# end
|
20
|
-
#
|
21
|
-
# The passed blocks will be run in EnvironmentReport instances on #initialize.
|
22
|
-
#
|
23
|
-
# Errors raised in passed blocks will be handled and logged at debug, so it
|
24
|
-
# is safe to report on things that may not work in certain environments.
|
25
|
-
#
|
26
|
-
# The blocks should only return strings or arrays full of strings. Falsey
|
27
|
-
# values will be ignored.
|
28
6
|
def self.report_on(key, &block)
|
29
7
|
registered_reporters[key] = block
|
30
8
|
end
|
@@ -33,21 +11,14 @@ module OneApm
|
|
33
11
|
@registered_reporters ||= Hash.new
|
34
12
|
end
|
35
13
|
|
36
|
-
# allow the logic to be swapped out in tests
|
37
14
|
def self.registered_reporters=(logic)
|
38
15
|
@registered_reporters = logic
|
39
16
|
end
|
40
17
|
|
41
|
-
# register reporting logic
|
42
|
-
####################################
|
43
18
|
report_on('Gems') do
|
44
19
|
begin
|
45
20
|
Bundler.rubygems.all_specs.map { |_gem| "#{_gem.name}(#{_gem.version})" }
|
46
21
|
rescue
|
47
|
-
# There are certain rubygem, bundler, rails combinations (e.g. gem
|
48
|
-
# 1.6.2, rails 2.3, bundler 1.2.3) where the code above throws an error
|
49
|
-
# in bundler because of rails monkey patching gem. The below does work
|
50
|
-
# though so try it if the above fails.
|
51
22
|
Bundler.load.specs.map do |spec|
|
52
23
|
version = (spec.respond_to?(:version) && spec.version)
|
53
24
|
spec.name + (version ? "(#{version})" : "")
|
@@ -61,11 +32,11 @@ module OneApm
|
|
61
32
|
report_on('Ruby patchlevel' ) { RUBY_PATCHLEVEL.to_s }
|
62
33
|
report_on('JRuby version' ) { JRUBY_VERSION }
|
63
34
|
report_on('Java VM version' ) { ENV_JAVA['java.vm.version'] }
|
64
|
-
report_on('Logical Processors') {
|
65
|
-
report_on('Physical Cores' ) {
|
66
|
-
report_on('Arch' ) {
|
67
|
-
report_on('OS version' ) {
|
68
|
-
report_on('OS' ) {
|
35
|
+
report_on('Logical Processors') { OneApm::Support::SystemInfo.num_logical_processors }
|
36
|
+
report_on('Physical Cores' ) { OneApm::Support::SystemInfo.num_physical_cores }
|
37
|
+
report_on('Arch' ) { OneApm::Support::SystemInfo.processor_arch }
|
38
|
+
report_on('OS version' ) { OneApm::Support::SystemInfo.os_version }
|
39
|
+
report_on('OS' ) { OneApm::Support::SystemInfo.ruby_os_identifier }
|
69
40
|
report_on('Database adapter' ) do
|
70
41
|
ActiveRecord::Base.configurations[OneApm::Probe.instance.env]['adapter']
|
71
42
|
end
|
@@ -83,12 +54,9 @@ module OneApm
|
|
83
54
|
ENV['RAILS_ENV']
|
84
55
|
end
|
85
56
|
end
|
86
|
-
# end reporting logic
|
87
|
-
####################################
|
88
|
-
|
89
57
|
|
90
58
|
attr_reader :data
|
91
|
-
|
59
|
+
|
92
60
|
def initialize
|
93
61
|
@data = self.class.registered_reporters.inject(Hash.new) do |data, (key, logic)|
|
94
62
|
begin
|