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.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/lib/one_apm/agent.rb +4 -4
  3. data/lib/one_apm/agent/agent/connect.rb +3 -49
  4. data/lib/one_apm/agent/agent/container_data_manager.rb +2 -10
  5. data/lib/one_apm/agent/agent/forkable_dispatcher_functions.rb +4 -2
  6. data/lib/one_apm/agent/agent/helpers.rb +2 -0
  7. data/lib/one_apm/agent/agent/start.rb +3 -3
  8. data/lib/one_apm/agent/agent/start_worker_thread.rb +2 -0
  9. data/lib/one_apm/agent/database/active_record_helper.rb +1 -0
  10. data/lib/one_apm/agent/{datastores.rb → datastore.rb} +2 -2
  11. data/lib/one_apm/agent/{datastores → datastore}/metric_helper.rb +1 -1
  12. data/lib/one_apm/agent/{datastores → datastore}/mongo.rb +1 -1
  13. data/lib/one_apm/agent/{datastores → datastore}/mongo/metric_translator.rb +4 -4
  14. data/lib/one_apm/agent/{datastores → datastore}/mongo/obfuscator.rb +1 -1
  15. data/lib/one_apm/agent/{datastores → datastore}/mongo/statement_formatter.rb +2 -2
  16. data/lib/one_apm/agent/threading/agent_thread.rb +50 -50
  17. data/lib/one_apm/agent/threading/thread_profile.rb +1 -4
  18. data/lib/one_apm/collector/commands/thread_profiler_session.rb +1 -1
  19. data/lib/one_apm/collector/containers/agent_command_router.rb +1 -1
  20. data/lib/one_apm/collector/containers/transaction_sampler.rb +7 -1
  21. data/lib/one_apm/collector/containers/utilization_data.rb +3 -4
  22. data/lib/one_apm/{agent → collector}/sampler.rb +1 -1
  23. data/lib/one_apm/{agent → collector}/samplers/cpu_sampler.rb +4 -4
  24. data/lib/one_apm/{agent → collector}/samplers/delayed_job_sampler.rb +3 -14
  25. data/lib/one_apm/{agent → collector}/samplers/memory_sampler.rb +13 -15
  26. data/lib/one_apm/{agent → collector}/samplers/object_sampler.rb +3 -3
  27. data/lib/one_apm/{agent → collector}/samplers/vm_sampler.rb +2 -2
  28. data/lib/one_apm/collector/{forked_process_service.rb → support/forked_process_service.rb} +1 -1
  29. data/lib/one_apm/{agent → collector/support}/sampler_collection.rb +2 -2
  30. data/lib/one_apm/configuration/default_source.rb +7 -2
  31. data/lib/one_apm/frameworks/rails.rb +18 -0
  32. data/lib/one_apm/inst/nosql/memcache.rb +2 -2
  33. data/lib/one_apm/inst/nosql/mongo.rb +6 -6
  34. data/lib/one_apm/inst/nosql/mongo_moped.rb +3 -3
  35. data/lib/one_apm/inst/nosql/redis.rb +4 -4
  36. data/lib/one_apm/manager.rb +38 -6
  37. data/lib/one_apm/metrics/metric_spec.rb +1 -4
  38. data/lib/one_apm/probe/instrumentation.rb +2 -5
  39. data/lib/one_apm/rack/developer_mode.rb +221 -0
  40. data/lib/one_apm/rack/developer_mode/helper.rb +299 -0
  41. data/lib/one_apm/rack/developer_mode/views/oneapm/_explain_plans.html.erb +25 -0
  42. data/lib/one_apm/rack/developer_mode/views/oneapm/_home_right.html.erb +18 -0
  43. data/lib/one_apm/rack/developer_mode/views/oneapm/_sample.html.erb +20 -0
  44. data/lib/one_apm/rack/developer_mode/views/oneapm/_segment.html.erb +24 -0
  45. data/lib/one_apm/rack/developer_mode/views/oneapm/_segment_limit_message.html.erb +1 -0
  46. data/lib/one_apm/rack/developer_mode/views/oneapm/_segment_row.html.erb +11 -0
  47. data/lib/one_apm/rack/developer_mode/views/oneapm/_show_sample_detail.html.erb +30 -0
  48. data/lib/one_apm/rack/developer_mode/views/oneapm/_show_sample_sql.html.erb +19 -0
  49. data/lib/one_apm/rack/developer_mode/views/oneapm/_show_sample_summary.html.erb +25 -0
  50. data/lib/one_apm/rack/developer_mode/views/oneapm/_sql_row.html.erb +15 -0
  51. data/lib/one_apm/rack/developer_mode/views/oneapm/_stack_trace.html.erb +14 -0
  52. data/lib/one_apm/rack/developer_mode/views/oneapm/_summary_table.html.erb +12 -0
  53. data/lib/one_apm/rack/developer_mode/views/oneapm/assets/images/arrow-close.png +0 -0
  54. data/lib/one_apm/rack/developer_mode/views/oneapm/assets/images/arrow-open.png +0 -0
  55. data/lib/one_apm/rack/developer_mode/views/oneapm/assets/images/oneapm_logo.png +0 -0
  56. data/lib/one_apm/rack/developer_mode/views/oneapm/assets/javascript/c3.min.js +5 -0
  57. data/lib/one_apm/rack/developer_mode/views/oneapm/assets/javascript/d3.min.js +5 -0
  58. data/lib/one_apm/rack/developer_mode/views/oneapm/assets/javascript/jquery.min.js +4 -0
  59. data/lib/one_apm/rack/developer_mode/views/oneapm/assets/javascript/transaction_sample.js +120 -0
  60. data/lib/one_apm/rack/developer_mode/views/oneapm/assets/stylesheets/bootstrap.min.css +5 -0
  61. data/lib/one_apm/rack/developer_mode/views/oneapm/assets/stylesheets/c3.css +158 -0
  62. data/lib/one_apm/rack/developer_mode/views/oneapm/assets/stylesheets/style.css +149 -0
  63. data/lib/one_apm/rack/developer_mode/views/oneapm/explain_sql.html.erb +53 -0
  64. data/lib/one_apm/rack/developer_mode/views/oneapm/index.html.erb +33 -0
  65. data/lib/one_apm/rack/developer_mode/views/oneapm/layout.html.erb +46 -0
  66. data/lib/one_apm/rack/developer_mode/views/oneapm/sample_not_found.html.erb +2 -0
  67. data/lib/one_apm/rack/developer_mode/views/oneapm/show_sample.html.erb +61 -0
  68. data/lib/one_apm/rack/developer_mode/views/oneapm/threads.html.erb +53 -0
  69. data/lib/one_apm/{agent/threading → support/backtrace}/backtrace_node.rb +0 -0
  70. data/lib/one_apm/{agent/threading → support/backtrace}/backtrace_service.rb +0 -0
  71. data/lib/one_apm/support/environment_report.rb +6 -38
  72. data/lib/one_apm/support/system_info.rb +1 -6
  73. data/lib/one_apm/transaction/composite_segment.rb +30 -0
  74. data/lib/one_apm/transaction/sample_buffer/developer_mode_sample_buffer.rb +58 -0
  75. data/lib/one_apm/transaction/segment_summary.rb +0 -5
  76. data/lib/one_apm/transaction/summary_segment.rb +24 -0
  77. data/lib/one_apm/transaction/transaction_sample.rb +2 -0
  78. data/lib/one_apm/version.rb +2 -2
  79. metadata +51 -19
  80. 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
+ &copy; 2008 - <%= Time.now.strftime('%Y') %> OneAPM. All rights reserved.
42
+ </p>
43
+ </div>
44
+ </div>
45
+ </div>
46
+ </body>
@@ -0,0 +1,2 @@
1
+ <p>没有找到相关的性能剖析数据,如果您重启过应用,那么之前的数据已经被清空了,需要您重新向应用发起请求才会有新的数据。 </p>
2
+ <%= link_to "回到首页", ''%>
@@ -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>
@@ -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') { ::OneApm::Agent::SystemInfo.num_logical_processors }
65
- report_on('Physical Cores' ) { ::OneApm::Agent::SystemInfo.num_physical_cores }
66
- report_on('Arch' ) { ::OneApm::Agent::SystemInfo.processor_arch }
67
- report_on('OS version' ) { ::OneApm::Agent::SystemInfo.os_version }
68
- report_on('OS' ) { ::OneApm::Agent::SystemInfo.ruby_os_identifier }
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
- # Generate the report based on the class level logic.
59
+
92
60
  def initialize
93
61
  @data = self.class.registered_reporters.inject(Hash.new) do |data, (key, logic)|
94
62
  begin