dolores_rpm 3.2.0.2

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 (257) hide show
  1. data/CHANGELOG +559 -0
  2. data/LICENSE +64 -0
  3. data/README.rdoc +179 -0
  4. data/bin/mongrel_rpm +33 -0
  5. data/bin/newrelic +13 -0
  6. data/bin/newrelic_cmd +5 -0
  7. data/cert/cacert.pem +118 -0
  8. data/cert/oldsite.pem +28 -0
  9. data/cert/site.pem +27 -0
  10. data/dolores_rpm-3.3.4.fork.gem +0 -0
  11. data/install.rb +9 -0
  12. data/lib/conditional_vendored_dependency_detection.rb +3 -0
  13. data/lib/conditional_vendored_metric_parser.rb +5 -0
  14. data/lib/new_relic/agent/agent.rb +1311 -0
  15. data/lib/new_relic/agent/beacon_configuration.rb +110 -0
  16. data/lib/new_relic/agent/browser_monitoring.rb +102 -0
  17. data/lib/new_relic/agent/busy_calculator.rb +99 -0
  18. data/lib/new_relic/agent/chained_call.rb +13 -0
  19. data/lib/new_relic/agent/database.rb +203 -0
  20. data/lib/new_relic/agent/error_collector.rb +251 -0
  21. data/lib/new_relic/agent/instrumentation/active_merchant.rb +27 -0
  22. data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +68 -0
  23. data/lib/new_relic/agent/instrumentation/authlogic.rb +19 -0
  24. data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +424 -0
  25. data/lib/new_relic/agent/instrumentation/data_mapper.rb +57 -0
  26. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +52 -0
  27. data/lib/new_relic/agent/instrumentation/memcache.rb +80 -0
  28. data/lib/new_relic/agent/instrumentation/merb/controller.rb +41 -0
  29. data/lib/new_relic/agent/instrumentation/merb/errors.rb +29 -0
  30. data/lib/new_relic/agent/instrumentation/metric_frame/pop.rb +80 -0
  31. data/lib/new_relic/agent/instrumentation/metric_frame.rb +332 -0
  32. data/lib/new_relic/agent/instrumentation/net.rb +29 -0
  33. data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +36 -0
  34. data/lib/new_relic/agent/instrumentation/queue_time.rb +210 -0
  35. data/lib/new_relic/agent/instrumentation/rack.rb +98 -0
  36. data/lib/new_relic/agent/instrumentation/rails/action_controller.rb +114 -0
  37. data/lib/new_relic/agent/instrumentation/rails/action_web_service.rb +42 -0
  38. data/lib/new_relic/agent/instrumentation/rails/active_record_instrumentation.rb +115 -0
  39. data/lib/new_relic/agent/instrumentation/rails/errors.rb +42 -0
  40. data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +118 -0
  41. data/lib/new_relic/agent/instrumentation/rails3/active_record_instrumentation.rb +122 -0
  42. data/lib/new_relic/agent/instrumentation/rails3/errors.rb +37 -0
  43. data/lib/new_relic/agent/instrumentation/sinatra.rb +58 -0
  44. data/lib/new_relic/agent/instrumentation/sunspot.rb +29 -0
  45. data/lib/new_relic/agent/instrumentation/unicorn_instrumentation.rb +21 -0
  46. data/lib/new_relic/agent/instrumentation.rb +9 -0
  47. data/lib/new_relic/agent/method_tracer.rb +528 -0
  48. data/lib/new_relic/agent/sampler.rb +50 -0
  49. data/lib/new_relic/agent/samplers/cpu_sampler.rb +58 -0
  50. data/lib/new_relic/agent/samplers/delayed_job_lock_sampler.rb +40 -0
  51. data/lib/new_relic/agent/samplers/memory_sampler.rb +144 -0
  52. data/lib/new_relic/agent/samplers/object_sampler.rb +26 -0
  53. data/lib/new_relic/agent/shim_agent.rb +29 -0
  54. data/lib/new_relic/agent/sql_sampler.rb +267 -0
  55. data/lib/new_relic/agent/stats_engine/metric_stats.rb +187 -0
  56. data/lib/new_relic/agent/stats_engine/samplers.rb +95 -0
  57. data/lib/new_relic/agent/stats_engine/transactions.rb +208 -0
  58. data/lib/new_relic/agent/stats_engine.rb +25 -0
  59. data/lib/new_relic/agent/transaction_sample_builder.rb +101 -0
  60. data/lib/new_relic/agent/transaction_sampler.rb +397 -0
  61. data/lib/new_relic/agent/worker_loop.rb +89 -0
  62. data/lib/new_relic/agent.rb +454 -0
  63. data/lib/new_relic/collection_helper.rb +75 -0
  64. data/lib/new_relic/command.rb +85 -0
  65. data/lib/new_relic/commands/deployments.rb +105 -0
  66. data/lib/new_relic/commands/install.rb +80 -0
  67. data/lib/new_relic/control/class_methods.rb +53 -0
  68. data/lib/new_relic/control/configuration.rb +202 -0
  69. data/lib/new_relic/control/frameworks/external.rb +16 -0
  70. data/lib/new_relic/control/frameworks/merb.rb +31 -0
  71. data/lib/new_relic/control/frameworks/rails.rb +164 -0
  72. data/lib/new_relic/control/frameworks/rails3.rb +75 -0
  73. data/lib/new_relic/control/frameworks/ruby.rb +42 -0
  74. data/lib/new_relic/control/frameworks/sinatra.rb +20 -0
  75. data/lib/new_relic/control/frameworks.rb +10 -0
  76. data/lib/new_relic/control/instance_methods.rb +179 -0
  77. data/lib/new_relic/control/instrumentation.rb +100 -0
  78. data/lib/new_relic/control/logging_methods.rb +143 -0
  79. data/lib/new_relic/control/profiling.rb +25 -0
  80. data/lib/new_relic/control/server_methods.rb +114 -0
  81. data/lib/new_relic/control.rb +46 -0
  82. data/lib/new_relic/data_serialization.rb +157 -0
  83. data/lib/new_relic/delayed_job_injection.rb +46 -0
  84. data/lib/new_relic/language_support.rb +69 -0
  85. data/lib/new_relic/local_environment.rb +414 -0
  86. data/lib/new_relic/merbtasks.rb +6 -0
  87. data/lib/new_relic/metric_data.rb +51 -0
  88. data/lib/new_relic/metric_spec.rb +75 -0
  89. data/lib/new_relic/metrics.rb +9 -0
  90. data/lib/new_relic/noticed_error.rb +24 -0
  91. data/lib/new_relic/rack/browser_monitoring.rb +68 -0
  92. data/lib/new_relic/rack/developer_mode.rb +268 -0
  93. data/lib/new_relic/recipes.rb +73 -0
  94. data/lib/new_relic/stats.rb +388 -0
  95. data/lib/new_relic/timer_lib.rb +27 -0
  96. data/lib/new_relic/transaction_analysis/segment_summary.rb +49 -0
  97. data/lib/new_relic/transaction_analysis.rb +77 -0
  98. data/lib/new_relic/transaction_sample/composite_segment.rb +27 -0
  99. data/lib/new_relic/transaction_sample/fake_segment.rb +9 -0
  100. data/lib/new_relic/transaction_sample/segment.rb +201 -0
  101. data/lib/new_relic/transaction_sample/summary_segment.rb +21 -0
  102. data/lib/new_relic/transaction_sample.rb +245 -0
  103. data/lib/new_relic/url_rule.rb +14 -0
  104. data/lib/new_relic/version.rb +55 -0
  105. data/lib/newrelic_rpm.rb +49 -0
  106. data/lib/tasks/all.rb +4 -0
  107. data/lib/tasks/install.rake +7 -0
  108. data/lib/tasks/tests.rake +19 -0
  109. data/newrelic.yml +265 -0
  110. data/recipes/newrelic.rb +6 -0
  111. data/test/active_record_fixtures.rb +77 -0
  112. data/test/config/newrelic.yml +48 -0
  113. data/test/config/test_control.rb +48 -0
  114. data/test/new_relic/agent/agent/connect_test.rb +410 -0
  115. data/test/new_relic/agent/agent/start_test.rb +255 -0
  116. data/test/new_relic/agent/agent/start_worker_thread_test.rb +153 -0
  117. data/test/new_relic/agent/agent_test.rb +139 -0
  118. data/test/new_relic/agent/agent_test_controller.rb +77 -0
  119. data/test/new_relic/agent/agent_test_controller_test.rb +363 -0
  120. data/test/new_relic/agent/apdex_from_server_test.rb +9 -0
  121. data/test/new_relic/agent/beacon_configuration_test.rb +108 -0
  122. data/test/new_relic/agent/browser_monitoring_test.rb +278 -0
  123. data/test/new_relic/agent/busy_calculator_test.rb +81 -0
  124. data/test/new_relic/agent/database_test.rb +162 -0
  125. data/test/new_relic/agent/error_collector/notice_error_test.rb +257 -0
  126. data/test/new_relic/agent/error_collector_test.rb +175 -0
  127. data/test/new_relic/agent/instrumentation/active_record_instrumentation_test.rb +538 -0
  128. data/test/new_relic/agent/instrumentation/controller_instrumentation_test.rb +36 -0
  129. data/test/new_relic/agent/instrumentation/instrumentation_test.rb +11 -0
  130. data/test/new_relic/agent/instrumentation/metric_frame/pop_test.rb +172 -0
  131. data/test/new_relic/agent/instrumentation/metric_frame_test.rb +50 -0
  132. data/test/new_relic/agent/instrumentation/net_instrumentation_test.rb +84 -0
  133. data/test/new_relic/agent/instrumentation/queue_time_test.rb +387 -0
  134. data/test/new_relic/agent/instrumentation/rack_test.rb +35 -0
  135. data/test/new_relic/agent/instrumentation/task_instrumentation_test.rb +184 -0
  136. data/test/new_relic/agent/memcache_instrumentation_test.rb +143 -0
  137. data/test/new_relic/agent/method_tracer/class_methods/add_method_tracer_test.rb +164 -0
  138. data/test/new_relic/agent/method_tracer/instance_methods/trace_execution_scoped_test.rb +234 -0
  139. data/test/new_relic/agent/method_tracer_test.rb +386 -0
  140. data/test/new_relic/agent/mock_scope_listener.rb +23 -0
  141. data/test/new_relic/agent/rpm_agent_test.rb +149 -0
  142. data/test/new_relic/agent/sampler_test.rb +19 -0
  143. data/test/new_relic/agent/shim_agent_test.rb +20 -0
  144. data/test/new_relic/agent/sql_sampler_test.rb +160 -0
  145. data/test/new_relic/agent/stats_engine/metric_stats/harvest_test.rb +150 -0
  146. data/test/new_relic/agent/stats_engine/metric_stats_test.rb +82 -0
  147. data/test/new_relic/agent/stats_engine/samplers_test.rb +99 -0
  148. data/test/new_relic/agent/stats_engine_test.rb +185 -0
  149. data/test/new_relic/agent/transaction_sample_builder_test.rb +195 -0
  150. data/test/new_relic/agent/transaction_sampler_test.rb +955 -0
  151. data/test/new_relic/agent/worker_loop_test.rb +66 -0
  152. data/test/new_relic/agent_test.rb +175 -0
  153. data/test/new_relic/collection_helper_test.rb +149 -0
  154. data/test/new_relic/command/deployments_test.rb +68 -0
  155. data/test/new_relic/control/class_methods_test.rb +62 -0
  156. data/test/new_relic/control/configuration_test.rb +72 -0
  157. data/test/new_relic/control/logging_methods_test.rb +185 -0
  158. data/test/new_relic/control_test.rb +254 -0
  159. data/test/new_relic/data_serialization_test.rb +208 -0
  160. data/test/new_relic/delayed_job_injection_test.rb +16 -0
  161. data/test/new_relic/local_environment_test.rb +72 -0
  162. data/test/new_relic/metric_data_test.rb +125 -0
  163. data/test/new_relic/metric_spec_test.rb +95 -0
  164. data/test/new_relic/rack/all_test.rb +11 -0
  165. data/test/new_relic/rack/browser_monitoring_test.rb +84 -0
  166. data/test/new_relic/rack/developer_mode_helper_test.rb +141 -0
  167. data/test/new_relic/rack/developer_mode_test.rb +43 -0
  168. data/test/new_relic/stats_test.rb +426 -0
  169. data/test/new_relic/transaction_analysis/segment_summary_test.rb +91 -0
  170. data/test/new_relic/transaction_analysis_test.rb +121 -0
  171. data/test/new_relic/transaction_sample/composite_segment_test.rb +35 -0
  172. data/test/new_relic/transaction_sample/fake_segment_test.rb +17 -0
  173. data/test/new_relic/transaction_sample/segment_test.rb +389 -0
  174. data/test/new_relic/transaction_sample/summary_segment_test.rb +31 -0
  175. data/test/new_relic/transaction_sample_subtest_test.rb +56 -0
  176. data/test/new_relic/transaction_sample_test.rb +164 -0
  177. data/test/new_relic/version_number_test.rb +89 -0
  178. data/test/test_contexts.rb +29 -0
  179. data/test/test_helper.rb +154 -0
  180. data/ui/helpers/developer_mode_helper.rb +357 -0
  181. data/ui/helpers/google_pie_chart.rb +48 -0
  182. data/ui/views/layouts/newrelic_default.rhtml +47 -0
  183. data/ui/views/newrelic/_explain_plans.rhtml +27 -0
  184. data/ui/views/newrelic/_sample.rhtml +20 -0
  185. data/ui/views/newrelic/_segment.rhtml +28 -0
  186. data/ui/views/newrelic/_segment_limit_message.rhtml +1 -0
  187. data/ui/views/newrelic/_segment_row.rhtml +12 -0
  188. data/ui/views/newrelic/_show_sample_detail.rhtml +24 -0
  189. data/ui/views/newrelic/_show_sample_sql.rhtml +24 -0
  190. data/ui/views/newrelic/_show_sample_summary.rhtml +3 -0
  191. data/ui/views/newrelic/_sql_row.rhtml +16 -0
  192. data/ui/views/newrelic/_stack_trace.rhtml +15 -0
  193. data/ui/views/newrelic/_table.rhtml +12 -0
  194. data/ui/views/newrelic/explain_sql.rhtml +43 -0
  195. data/ui/views/newrelic/file/images/arrow-close.png +0 -0
  196. data/ui/views/newrelic/file/images/arrow-open.png +0 -0
  197. data/ui/views/newrelic/file/images/blue_bar.gif +0 -0
  198. data/ui/views/newrelic/file/images/file_icon.png +0 -0
  199. data/ui/views/newrelic/file/images/gray_bar.gif +0 -0
  200. data/ui/views/newrelic/file/images/new-relic-rpm-desktop.gif +0 -0
  201. data/ui/views/newrelic/file/images/new_relic_rpm_desktop.gif +0 -0
  202. data/ui/views/newrelic/file/images/textmate.png +0 -0
  203. data/ui/views/newrelic/file/javascript/jquery-1.4.2.js +6240 -0
  204. data/ui/views/newrelic/file/javascript/transaction_sample.js +120 -0
  205. data/ui/views/newrelic/file/stylesheets/style.css +490 -0
  206. data/ui/views/newrelic/index.rhtml +71 -0
  207. data/ui/views/newrelic/sample_not_found.rhtml +2 -0
  208. data/ui/views/newrelic/show_sample.rhtml +80 -0
  209. data/ui/views/newrelic/show_source.rhtml +3 -0
  210. data/ui/views/newrelic/threads.rhtml +53 -0
  211. data/vendor/gems/dependency_detection-0.0.1.build/LICENSE +5 -0
  212. data/vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection/version.rb +3 -0
  213. data/vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb +62 -0
  214. data/vendor/gems/metric_parser-0.1.0.pre1/lib/metric_parser.rb +1 -0
  215. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/action_mailer.rb +14 -0
  216. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/active_merchant.rb +31 -0
  217. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/active_record.rb +33 -0
  218. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/apdex.rb +89 -0
  219. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/background_transaction.rb +7 -0
  220. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/client.rb +46 -0
  221. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/controller.rb +67 -0
  222. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/controller_cpu.rb +43 -0
  223. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/controller_ext.rb +17 -0
  224. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/database.rb +48 -0
  225. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/database_pool.rb +24 -0
  226. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/dot_net.rb +28 -0
  227. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/dot_net_parser.rb +17 -0
  228. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/errors.rb +11 -0
  229. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/external.rb +55 -0
  230. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/frontend.rb +40 -0
  231. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/gc.rb +20 -0
  232. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/hibernate_session.rb +7 -0
  233. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/java.rb +31 -0
  234. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/java_parser.rb +17 -0
  235. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/jsp.rb +34 -0
  236. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/jsp_tag.rb +7 -0
  237. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/mem_cache.rb +55 -0
  238. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/metric_parser.rb +122 -0
  239. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/orm.rb +27 -0
  240. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/other_transaction.rb +40 -0
  241. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/servlet.rb +7 -0
  242. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/servlet_context_listener.rb +7 -0
  243. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/servlet_filter.rb +7 -0
  244. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/solr.rb +27 -0
  245. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/solr_request_handler.rb +15 -0
  246. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/spring.rb +54 -0
  247. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/spring_controller.rb +6 -0
  248. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/spring_view.rb +6 -0
  249. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/struts_action.rb +20 -0
  250. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/struts_result.rb +20 -0
  251. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/version.rb +5 -0
  252. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/view.rb +70 -0
  253. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/web_frontend.rb +18 -0
  254. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/web_service.rb +14 -0
  255. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/web_transaction.rb +133 -0
  256. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser.rb +64 -0
  257. metadata +398 -0
@@ -0,0 +1,80 @@
1
+ <script type="text/javascript" src="/newrelic/file/javascript/transaction_sample.js"></script>
2
+ <div id='summary_table'>
3
+ <table class="light_background">
4
+ <tr>
5
+ <th>URL:</th>
6
+ <td><%= @sample.params[:uri]%></td>
7
+ </tr>
8
+ <tr>
9
+ <th>Controller:</th>
10
+ <td><%= @sample_controller_name%></td>
11
+ </tr>
12
+ <tr>
13
+ <th>Action:</th>
14
+ <td><%= @sample_action_name%></td>
15
+ </tr>
16
+ <tr>
17
+ <th>Start Time:</th>
18
+ <td><%= format_timestamp(@sample.start_time) %></td>
19
+ </tr>
20
+ <tr>
21
+ <th>Duration:</th>
22
+ <td><%= colorize(@sample.duration, 1, 2) %> ms</td>
23
+ </tr>
24
+ <tr>
25
+ <th>CPU Burn:</th>
26
+ <td><%= to_ms(@sample.params[:cpu_time]) if @sample.params[:cpu_time] %> ms</td>
27
+ </tr>
28
+
29
+ <% unless @custom_params.empty? %>
30
+ <tr>
31
+ <th valign="top">Custom Params:</th>
32
+ <td>
33
+ <small>
34
+ <% @custom_params.each do |k,v| %>
35
+ <b><%= h k %>: </b><%=h v%><br/>
36
+ <% end %>
37
+ </small>
38
+ </td>
39
+ </tr>
40
+ <% end %>
41
+
42
+ <% unless @request_params.empty? %>
43
+ <tr>
44
+ <th valign="top">HTTP Params:</th>
45
+ <td>
46
+ <a href="#" onClick="show_request_params()" id="params_link"><%= @request_params.length %>...</a>
47
+
48
+ <div id='request_params' style="display: none;">
49
+ <small>
50
+ <% @request_params.each do |k,v| %>
51
+ <b><%= h k %>: </b><%=h v%><br/>
52
+ <% end %>
53
+ </small>
54
+ </div>
55
+ </td>
56
+ </tr>
57
+ <% end %>
58
+
59
+ </table>
60
+ </div>
61
+
62
+ <br/>
63
+ <div id="view_sample">
64
+ <% if @sample.profile %>
65
+ <%= profile_table(@sample.profile) %>
66
+ <% else %>
67
+ <div align=center width="100%">
68
+ <%= show_view_link 'Summary', 'show_sample_summary' %>
69
+ <%= show_view_link 'Details', 'show_sample_detail' %>
70
+ <%= show_view_link 'SQL', 'show_sample_sql' %>
71
+ </div>
72
+ <br/>
73
+
74
+ <%= %w[show_sample_summary show_sample_sql show_sample_detail].collect do |p|
75
+ options = {:align => 'center', :id => p}
76
+ options[:style] = 'display: none' unless @req.path.include?(p)
77
+ content_tag('div', render(:partial => p), options)
78
+ end.join(' ') %>
79
+ <% end %>
80
+ </div>
@@ -0,0 +1,3 @@
1
+
2
+ <h2>File: <%= @filename %></h2>
3
+ <%= @source %>
@@ -0,0 +1,53 @@
1
+
2
+ <h2>Thread List</h2>
3
+ <p><%= link_to 'Back', 'index' %></p>
4
+ <table>
5
+ <thead><th class="title" colspan="5">Application Threads</th></thead>
6
+ <thead>
7
+ <th class="left">Name</th>
8
+ <th class="left">Status</th>
9
+ <th class="left">Group</th>
10
+ <th class="left">Priority</th>
11
+ <th class="left">Locals</th>
12
+ </thead>
13
+ <%
14
+ main = Thread.main
15
+ threads = Thread.list - [ main ]
16
+ nr_threads = []
17
+ threads.delete_if { | thread | nr_threads << thread if thread.key? 'newrelic_label' }
18
+ ([ main ] + threads).each_with_index do | thread, i | %>
19
+ <tr class="odd_row">
20
+ <td valign="top"><%= h(thread == main ? 'main' : thread.to_s) %></td>
21
+ <td valign="top"><%= h(thread.status || 'terminated with exception') %></td>
22
+ <td valign="top"><%= h(thread.group || 'none') %></td>
23
+ <td valign="top"><%= h thread.priority %></td>
24
+ <td class="locals">
25
+ <%= thread.keys.map{|k| h k}.join("</br>") %>
26
+ </td>
27
+ </tr>
28
+ <% end %>
29
+ <% if nr_threads.size > 0 %>
30
+ <tr><td>&nbsp;</td></tr>
31
+ <thead><th class="title" colspan="5">New Relic Agent Threads</th></thead>
32
+ <thead>
33
+ <th class="left">Name</th>
34
+ <th class="left">Status</th>
35
+ <th class="left">Group</th>
36
+ <th class="left">Priority</th>
37
+ <th class="left">Locals</th>
38
+ </thead>
39
+
40
+ <% nr_threads.each_with_index do | thread, i | %>
41
+ <tr class="odd_row">
42
+ <td valign="top"><%= h thread['newrelic_label'] %></td>
43
+ <td valign="top"><%= h(thread.status || 'terminated with exception') %></td>
44
+ <td valign="top"><%= h(thread.group || 'none') %></td>
45
+ <td valign="top"><%= h thread.priority %></td>
46
+ <td class="locals">
47
+ <%= (thread.keys - ['newrelic_label']).map{|k| h k}.join("</br>") %>
48
+ </td>
49
+ </tr>
50
+ <% end %>
51
+ <% end %>
52
+
53
+ </table>
@@ -0,0 +1,5 @@
1
+ Copyright (c) 2010-2011 New Relic, Inc. All rights reserved.
2
+
3
+ This code is, and has always been, copyright New Relic and licensed
4
+ under our license terms that can be found in master license file
5
+ located here: ../../../../LICENSE
@@ -0,0 +1,3 @@
1
+ module DependencyDetection
2
+ VERSION='0.0.1.build'
3
+ end
@@ -0,0 +1,62 @@
1
+ require 'dependency_detection/version'
2
+ module DependencyDetection
3
+
4
+ module_function
5
+ @@items = []
6
+ def defer(&block)
7
+ item = Dependent.new
8
+ item.instance_eval(&block)
9
+ @@items << item
10
+ end
11
+
12
+ def detect!
13
+ @@items.each do |item|
14
+ if item.dependencies_satisfied?
15
+ item.execute
16
+ end
17
+ end
18
+ end
19
+
20
+ def dependency_by_name(name)
21
+ @@items.find {|i| i.name == name }
22
+ end
23
+
24
+ class Dependent
25
+ attr_reader :executed
26
+ attr_reader :name
27
+ def executed!
28
+ @executed = true
29
+ end
30
+
31
+ attr_reader :dependencies
32
+
33
+ def initialize
34
+ @dependencies = []
35
+ @executes = []
36
+ end
37
+
38
+ def dependencies_satisfied?
39
+ !executed and check_dependencies
40
+ end
41
+
42
+ def execute
43
+ @executes.each do |x|
44
+ x.call
45
+ end
46
+ ensure
47
+ executed!
48
+ end
49
+
50
+ def check_dependencies
51
+ dependencies && dependencies.all? { |d| d.call }
52
+ end
53
+
54
+ def depends_on
55
+ @dependencies << Proc.new
56
+ end
57
+
58
+ def executes
59
+ @executes << Proc.new
60
+ end
61
+ end
62
+ end
@@ -0,0 +1 @@
1
+ require 'new_relic/metric_parser'
@@ -0,0 +1,14 @@
1
+ require 'new_relic/metric_parser'
2
+ module NewRelic
3
+ module MetricParser
4
+ class ActionMailer < NewRelic::MetricParser::MetricParser
5
+
6
+ def is_action_mailer?; true; end
7
+
8
+ def short_name
9
+ "ActionMailer - #{segments[1]}"
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,31 @@
1
+ require 'new_relic/metric_parser'
2
+ module NewRelic
3
+ module MetricParser
4
+ class ActiveMerchant < NewRelic::MetricParser::MetricParser
5
+
6
+ def is_active_merchant?; true; end
7
+
8
+ def is_active_merchant_gateway?
9
+ segments[1] == 'gateway'
10
+ end
11
+
12
+ def is_active_merchant_operation?
13
+ segments[1] == 'operation'
14
+ end
15
+
16
+ def gateway_name
17
+ # ends in "Gateway" - trim that off
18
+ segments[2][0..-8].titleize
19
+ end
20
+
21
+ def operation_name
22
+ segments[2]
23
+ end
24
+
25
+ def short_name
26
+ segments[2]
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,33 @@
1
+ require 'new_relic/metric_parser'
2
+ module NewRelic
3
+ module MetricParser
4
+ class ActiveRecord < NewRelic::MetricParser::MetricParser
5
+ def is_active_record? ; true; end
6
+
7
+ def model_class
8
+ return segments[1]
9
+ end
10
+
11
+ def is_database?
12
+ true
13
+ end
14
+ def legend_name
15
+ if name == 'ActiveRecord/all'
16
+ 'Database'
17
+ else
18
+ super
19
+ end
20
+ end
21
+ def tooltip_name
22
+ if name == 'ActiveRecord/all'
23
+ 'all SQL execution'
24
+ else
25
+ super
26
+ end
27
+ end
28
+ def developer_name
29
+ "#{model_class}##{segments.last}"
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,89 @@
1
+ require 'new_relic/metric_parser'
2
+ module NewRelic
3
+ module MetricParser
4
+ class Apdex < NewRelic::MetricParser::MetricParser
5
+
6
+ CLIENT = 'Client'
7
+
8
+ # Convenience method for creating the appropriate client
9
+ # metric name.
10
+ def self.client_metric(apdex_t)
11
+ "Apdex/#{CLIENT}/#{apdex_t}"
12
+ end
13
+ def self.browser_client_metric(os, browser, version, apdex_t)
14
+ "#{self.client_metric(apdex_t)}/#{os}/#{browser}/#{version}"
15
+ end
16
+
17
+ def is_apdex?; true; end
18
+ def is_client?
19
+ segments[1] == CLIENT
20
+ end
21
+ def is_client_summary?
22
+ is_client? && segments.size == 3
23
+ end
24
+ def is_browser_summary?
25
+ is_client? && segments.size == 6
26
+ end
27
+ def is_summary?
28
+ segments.size == 1
29
+ end
30
+
31
+ # Apdex/Client/N
32
+ def apdex_t
33
+ is_client? && segments[2].to_f
34
+ end
35
+
36
+ def platform
37
+ is_browser_summary? && segments[3]
38
+ end
39
+
40
+ def browser
41
+ is_browser_summary? && segments[4]
42
+ end
43
+
44
+ def browser_version
45
+ is_browser_summary? && segments[5]
46
+ end
47
+
48
+ def user_agent
49
+ is_browser_summary? && segments[4..-1].join(" ")
50
+ end
51
+
52
+ def platform_and_user_agent
53
+ is_browser_summary? && segments[3..-1].join(" ")
54
+ end
55
+
56
+ def developer_name
57
+ case
58
+ when is_client? then "Apdex Client (#{apdex_t})"
59
+ when is_browser_summary? then "Apdex Client for #{os_and_browser} (#{apdex_t})"
60
+ when is_summary? then "Apdex"
61
+ else "Apdex #{segments[1..-1].join("/")}"
62
+ end
63
+ end
64
+
65
+ def short_name
66
+ # standard controller actions
67
+ if segments.length > 1
68
+ url
69
+ else
70
+ 'All Frontend Urls'
71
+ end
72
+ end
73
+
74
+ def url
75
+ '/' + segments[1..-1].join('/')
76
+ end
77
+
78
+ # this is used to match transaction traces to controller actions.
79
+ # TT's don't have a preceding slash :P
80
+ def tt_path
81
+ segments[1..-1].join('/')
82
+ end
83
+
84
+ def call_rate_suffix
85
+ 'rpm'
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,7 @@
1
+ require 'new_relic/metric_parser/java'
2
+ class NewRelic::MetricParser::BackgroundTransaction < NewRelic::MetricParser::Java
3
+
4
+ def call_rate_suffix
5
+ 'cpm'
6
+ end
7
+ end
@@ -0,0 +1,46 @@
1
+ class NewRelic::MetricParser::Client < NewRelic::MetricParser::MetricParser
2
+
3
+ def measure
4
+ segments[1]
5
+ end
6
+
7
+ def frontend?; measure == 'frontend'; end
8
+ def backend?; measure == 'backend'; end
9
+ def totaltime?; measure == 'totaltime'; end
10
+
11
+ def all?
12
+ segments[1].index('all') == 0
13
+ end
14
+
15
+ def operation
16
+ all? ? 'All Operations' : segments[1].titleize.gsub(/(load|ready|time|end)$/,' \1')
17
+ end
18
+
19
+ def legend_name
20
+ if frontend?
21
+ "Browser Rendering and Asset Download"
22
+ elsif backend?
23
+ "Backend and Network"
24
+ else
25
+ segments[1..-1].join(" ")
26
+ end
27
+ end
28
+
29
+ def platform
30
+ segments[2]
31
+ end
32
+
33
+ def user_agent
34
+ segments[3..-1].join(" ")
35
+ end
36
+
37
+ def platform_and_user_agent
38
+ segments[2..-1].join(" ")
39
+ end
40
+
41
+ def developer_name
42
+ name = segments[1].capitalize
43
+ name << " (#{segments[2..-1].join(" ")})" if segments.length > 2
44
+ name
45
+ end
46
+ end
@@ -0,0 +1,67 @@
1
+ require 'new_relic/metric_parser'
2
+ module NewRelic
3
+ module MetricParser
4
+ class Controller < NewRelic::MetricParser::MetricParser
5
+
6
+ def is_controller?; true; end
7
+ def is_transaction?; true; end
8
+
9
+ # If the controller name segments look like a file path, convert it to the controller
10
+ # class name. If it begins with a capital letter, assume it's already a class name.
11
+ # We only expect a lower case letter with Rails, so we'll be able to use camelize for
12
+ # that.
13
+ def controller_name
14
+ path = segments[1..-2].join('/')
15
+ path < 'a' ? path : path.camelize+"Controller"
16
+ end
17
+
18
+ def action_name
19
+ if segments[-1] =~ /^\(other\)$/
20
+ '(template only)'
21
+ else
22
+ segments[-1]
23
+ end
24
+ end
25
+
26
+ def developer_name
27
+ "#{controller_name}##{action_name}"
28
+ end
29
+
30
+ def is_web_transaction?
31
+ true
32
+ end
33
+ # return the cpu measuring equivalent. It may be nil since this metric was not
34
+ # present in earlier versions of the agent.
35
+ def cpu_metric
36
+ Metric.lookup((["ControllerCPU"] + segments[1..-1]).join('/'), :create => false)
37
+ end
38
+
39
+ def short_name
40
+ # standard controller actions
41
+ if segments.length > 1
42
+ url
43
+ else
44
+ 'All Controller Actions'
45
+ end
46
+ end
47
+
48
+ def url
49
+ '/' + segments[1..-1].join('/')
50
+ end
51
+
52
+ # this is used to match transaction traces to controller actions.
53
+ # TT's don't have a preceding slash :P
54
+ def tt_path
55
+ segments[1..-1].join('/')
56
+ end
57
+
58
+ def call_rate_suffix
59
+ 'rpm'
60
+ end
61
+
62
+ def summary_metrics
63
+ %w[HttpDispatcher]
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,43 @@
1
+ require 'new_relic/metric_parser'
2
+ module NewRelic
3
+ module MetricParser
4
+ class ControllerCPU < NewRelic::MetricParser::MetricParser
5
+
6
+ def is_controller_cpu?; true; end
7
+
8
+ def controller_name
9
+ segments[1..-2].join('/').camelize+"Controller"
10
+ end
11
+
12
+ def action_name
13
+ segments[-1]
14
+ end
15
+
16
+ def developer_name
17
+ "#{controller_name}##{action_name}"
18
+ end
19
+
20
+ def base_metric_name
21
+ "Controller/" + segments[1..-1].join('/')
22
+ end
23
+
24
+ def short_name
25
+ # standard controller actions
26
+ if segments.length > 1
27
+ url
28
+ else
29
+ 'All Controller Actions'
30
+ end
31
+ end
32
+
33
+ def url
34
+ '/' + segments[1..-1].join('/')
35
+ end
36
+
37
+ def call_rate_suffix
38
+ 'rpm'
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,17 @@
1
+ # Extend the controller with extra behavior from web transactions
2
+ # This is just temporary until we switchover to WebTransaction from Controller.
3
+
4
+ NewRelic::MetricParser::Controller.class_eval do
5
+
6
+ def initialize(name)
7
+ super
8
+ if %w[Sinatra Rack Task].include?(segment_1)
9
+ self.extend NewRelic::MetricParser::WebTransaction.const_get(segment_1)
10
+ end
11
+ end
12
+
13
+ # default to v2 Web Transactions tab
14
+ def drilldown_url(metric_id)
15
+ {:controller => '/v2/transactions', :action => 'index', :anchor => "id=#{metric_id}"}
16
+ end
17
+ end
@@ -0,0 +1,48 @@
1
+ class NewRelic::MetricParser::Database < NewRelic::MetricParser::MetricParser
2
+ def is_database?; true; end
3
+
4
+ def database
5
+ segments[1]
6
+ end
7
+
8
+ def operation
9
+ op = segments.last
10
+ case
11
+ when op == 'Join Table Columns'
12
+ op.upcase
13
+ when op == 'all'
14
+ op
15
+ else
16
+ op.split(' ').last.upcase
17
+ end
18
+ end
19
+
20
+ def developer_name
21
+ if segments.size == 3
22
+ "#{database} - #{operation}"
23
+ else
24
+ operation
25
+ end
26
+ end
27
+
28
+ def legend_name
29
+ if all?
30
+ 'Database'
31
+ else
32
+ super
33
+ end
34
+ end
35
+
36
+ def tooltip_name
37
+ if all?
38
+ 'all SQL execution'
39
+ else
40
+ super
41
+ end
42
+ end
43
+
44
+ private
45
+ def all?
46
+ name == 'Database/all' || name == 'Database/allWeb' || name == 'Database/allOther'
47
+ end
48
+ end
@@ -0,0 +1,24 @@
1
+ class NewRelic::MetricParser::DatabasePool < NewRelic::MetricParser::MetricParser
2
+
3
+ def developer_name
4
+ segs = segments
5
+ if segs.length > 3
6
+ segs[2,segs.length - 3].join("/")
7
+ else
8
+ name
9
+ end
10
+ end
11
+
12
+ def pie_chart_label
13
+ short_name
14
+ end
15
+
16
+ def tooltip_name
17
+ developer_name + " " + last_segment
18
+ end
19
+
20
+ # class name with/out package name and method name
21
+ def short_name
22
+ developer_name
23
+ end
24
+ end
@@ -0,0 +1,28 @@
1
+ require 'new_relic/metric_parser/dot_net_parser'
2
+
3
+ class NewRelic::MetricParser::DotNet < NewRelic::MetricParser::MetricParser
4
+
5
+ def initialize(name)
6
+ super
7
+ if segments.length > 2
8
+ self.extend DotNetParser
9
+ end
10
+ end
11
+
12
+ def pie_chart_label
13
+ short_name
14
+ end
15
+
16
+ def tooltip_name
17
+ developer_name
18
+ end
19
+
20
+ def full_class_name
21
+ segment_1
22
+ end
23
+
24
+ def method_name
25
+ segment_2
26
+ end
27
+
28
+ end
@@ -0,0 +1,17 @@
1
+ module NewRelic
2
+ module MetricParser
3
+ module DotNetParser
4
+ def class_name_without_package
5
+ full_class_name =~ /(.*\.)(.*)$/ ? $2 : full_class_name
6
+ end
7
+
8
+ def developer_name
9
+ "#{full_class_name}.#{method_name}()"
10
+ end
11
+
12
+ def short_name
13
+ "#{class_name_without_package}.#{method_name}()"
14
+ end
15
+ end
16
+ end
17
+ end