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,11 @@
1
+ require 'new_relic/metric_parser'
2
+ module NewRelic
3
+ module MetricParser
4
+ class Errors < NewRelic::MetricParser::MetricParser
5
+ def is_error?; true; end
6
+ def short_name
7
+ segments[2..-1].join(NewRelic::MetricParser::MetricParser::SEPARATOR)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,55 @@
1
+ require 'new_relic/metric_parser'
2
+ module NewRelic
3
+ module MetricParser
4
+ class External < NewRelic::MetricParser::MetricParser
5
+
6
+ def all?
7
+ host == 'all' || host == 'allWeb' || host == 'allOther'
8
+ end
9
+ def hosts_all?
10
+ library == 'all'
11
+ end
12
+ def host
13
+ segments[1]
14
+ end
15
+ def library
16
+ segments[2]
17
+ end
18
+ def operation
19
+ segments[3] && segments[3..-1].join("/")
20
+ end
21
+ def legend_name
22
+ case
23
+ when all?
24
+ "External Services"
25
+ when hosts_all?
26
+ "All #{host} calls"
27
+ else
28
+ developer_name
29
+ end
30
+ end
31
+ def tooltip_name
32
+ case
33
+ when all?
34
+ "calls to external systems"
35
+ when hosts_all?
36
+ "calls to #{host}"
37
+ else
38
+ "calls to #{developer_name}"
39
+ end
40
+ end
41
+ def developer_name
42
+ case
43
+ when all?
44
+ 'All External'
45
+ when hosts_all?
46
+ host
47
+ when operation
48
+ "#{library}[#{host}]: #{operation}"
49
+ else
50
+ "#{library}[#{host}]"
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,40 @@
1
+ class NewRelic::MetricParser::Frontend < NewRelic::MetricParser::MetricParser
2
+
3
+ =begin
4
+ def action_name
5
+ if segments[-1] =~ /^\(other\)$/
6
+ '(template only)'
7
+ else
8
+ segments[-1]
9
+ end
10
+ end
11
+ =end
12
+
13
+ def developer_name
14
+ url
15
+ #"#{controller_name}##{action_name}"
16
+ end
17
+
18
+ def short_name
19
+ # standard controller actions
20
+ if segments.length > 1
21
+ url
22
+ else
23
+ 'All Frontend Urls'
24
+ end
25
+ end
26
+
27
+ def url
28
+ '/' + segments[1..-1].join('/')
29
+ end
30
+
31
+ # this is used to match transaction traces to controller actions.
32
+ # TT's don't have a preceding slash :P
33
+ def tt_path
34
+ segments[1..-1].join('/')
35
+ end
36
+
37
+ def call_rate_suffix
38
+ 'rpm'
39
+ end
40
+ end
@@ -0,0 +1,20 @@
1
+ class NewRelic::MetricParser::GC < NewRelic::MetricParser::MetricParser
2
+
3
+ def developer_name
4
+ if segments.length == 1
5
+ "GC"
6
+ elsif segment_1 == "cumulative"
7
+ "GC Execution"
8
+ else
9
+ "GC - #{segment_1}"
10
+ end
11
+ end
12
+
13
+ def short_name
14
+ if segments.length > 1
15
+ developer_name
16
+ else
17
+ 'All GCs'
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+ require 'new_relic/metric_parser/java'
2
+ class NewRelic::MetricParser::HibernateSession < NewRelic::MetricParser::Java
3
+
4
+ def call_rate_suffix
5
+ 'cpm'
6
+ end
7
+ end
@@ -0,0 +1,31 @@
1
+ require 'new_relic/metric_parser/java_parser'
2
+ module NewRelic
3
+ module MetricParser
4
+ class Java < NewRelic::MetricParser::MetricParser
5
+ JavaParser
6
+ def initialize(name)
7
+ super
8
+ if segments.length > 2
9
+ self.extend NewRelic::MetricParser::JavaParser
10
+ end
11
+ end
12
+
13
+ def pie_chart_label
14
+ short_name
15
+ end
16
+
17
+ def tooltip_name
18
+ developer_name
19
+ end
20
+
21
+ def full_class_name
22
+ segment_1
23
+ end
24
+
25
+ def method_name
26
+ segment_2
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,17 @@
1
+ module NewRelic
2
+ module MetricParser
3
+ module JavaParser
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
@@ -0,0 +1,34 @@
1
+ class NewRelic::MetricParser::Jsp < NewRelic::MetricParser::MetricParser
2
+ def is_view?; true; end
3
+ def pie_chart_label
4
+ short_name
5
+ end
6
+
7
+ def short_name
8
+ segments[-1]
9
+ end
10
+
11
+ def controller_name
12
+ file_name
13
+ end
14
+
15
+ def tooltip_name
16
+ developer_name
17
+ end
18
+
19
+ def action_name
20
+ file_name
21
+ end
22
+
23
+ def developer_name
24
+ file_name
25
+ end
26
+
27
+ def url
28
+ '/' + file_name
29
+ end
30
+ private
31
+ def file_name
32
+ segments[1..-1].join(NewRelic::MetricParser::MetricParser::SEPARATOR)
33
+ end
34
+ end
@@ -0,0 +1,7 @@
1
+ require 'new_relic/metric_parser/java'
2
+ class NewRelic::MetricParser::JspTag < NewRelic::MetricParser::Java
3
+
4
+ def call_rate_suffix
5
+ 'cpm'
6
+ end
7
+ end
@@ -0,0 +1,55 @@
1
+ require 'new_relic/metric_parser'
2
+ module NewRelic
3
+ module MetricParser
4
+ class MemCache < NewRelic::MetricParser::MetricParser
5
+ def is_memcache?; true; end
6
+
7
+ # for Memcache metrics, the short name is actually
8
+ # the full name
9
+ def short_name
10
+ 'Memcache'
11
+ end
12
+ def developer_name
13
+ "Memcache #{segments[1..-1].join '/'}"
14
+ end
15
+
16
+ def all?
17
+ segments[1].index('all') == 0
18
+ end
19
+ def operation
20
+ all? ? 'All Operations' : segments[1]
21
+ end
22
+ def legend_name
23
+ case segments[1]
24
+ when 'allWeb'
25
+ "Memcache"
26
+ when 'allOther'
27
+ "Non-web Memcache"
28
+ else
29
+ "Memcache #{operation} operations"
30
+ end
31
+ end
32
+ def tooltip_name
33
+ case segments[1]
34
+ when 'allWeb'
35
+ "Memcache calls from web transactions"
36
+ when 'allOther'
37
+ "Memcache calls from non-web transactions"
38
+ else
39
+ "MemCache #{operation} operations"
40
+ end
41
+
42
+ end
43
+ def developer_name
44
+ case segments[1]
45
+ when 'allWeb'
46
+ "Web Memcache"
47
+ when 'allOther'
48
+ "Non-web Memcache"
49
+ else
50
+ "Memcache #{operation}"
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,122 @@
1
+ module NewRelic
2
+ module MetricParser
3
+ class MetricParser
4
+
5
+ SEPARATOR = '/' unless defined? SEPARATOR
6
+ attr_reader :name
7
+
8
+ # Load in the parsers classes in the plugin:
9
+ Dir[File.join(File.dirname(__FILE__), "metric_parser", "*.rb")].each { | file | require file }
10
+
11
+ # return a string that is parsable via the Metric parser APIs
12
+ def self.for_metric_named(s)
13
+ category = (s =~ /^([^\/]*)/) && $1
14
+ parser_class = self
15
+ if category
16
+ parser_class = NewRelic::MetricParser.const_get(category) if (NewRelic::MetricParser.const_defined?(category) rescue nil)
17
+ end
18
+ parser_class.new s
19
+ end
20
+
21
+ def self.parse(s)
22
+ for_metric_named(s)
23
+ end
24
+
25
+ def method_missing(method_name, *args)
26
+ return false if method_name.to_s =~ /^is_.*\?/
27
+ super
28
+ end
29
+ # The short name for the metric is defined as all of the segments
30
+ # of the metric name except for its first (its domain).
31
+ def short_name
32
+ if segments.empty?
33
+ ''
34
+ elsif segments.length == 1
35
+ segments[0]
36
+ else
37
+ segments[1..-1].join(SEPARATOR)
38
+ end
39
+ end
40
+
41
+ def pie_chart_label
42
+ developer_name
43
+ end
44
+
45
+ def developer_name
46
+ short_name
47
+ end
48
+
49
+ def tooltip_name
50
+ short_name
51
+ end
52
+
53
+ def apdex_metric_path
54
+ %Q[Apdex/#{segments[1..-1].join('/')}]
55
+ end
56
+
57
+ # A short name for legends in the graphs
58
+ def legend_name
59
+ short_name
60
+ end
61
+
62
+ # Return the name of another metric if the current
63
+ # metric is really add-on data for another metric.
64
+ def base_metric_name
65
+ nil
66
+ end
67
+
68
+ # Category is a UI description of the general
69
+ # category of metrics for this metric.
70
+ def category
71
+ segments[0]
72
+ end
73
+
74
+ def segments
75
+ return [] if !name
76
+ @segments ||= name.split(SEPARATOR).freeze
77
+ end
78
+
79
+ # --
80
+ # These accessors are used to allow chart to use a specific segment in the metric
81
+ # name for label construction as a zero-arg accessor
82
+ # ++
83
+ def segment_0; segments[0]; end
84
+ def segment_1; segments[1]; end
85
+ def segment_2; segments[2]; end
86
+ def segment_3; segments[3]; end
87
+ def segment_4; segments[4]; end
88
+ def segment_5; segments[5]; end
89
+ def last_segment; segments.last; end
90
+
91
+ # This is the suffix used for call rate or throughput. By default, it's cpm
92
+ # but things like controller actions will override to use something like 'rpm'
93
+ # for requests per minute
94
+ def call_rate_suffix
95
+ 'cpm'
96
+ end
97
+
98
+ def url
99
+ ''
100
+ end
101
+ # Return the list of dispatcher metrics that correspond to this metric. That is,
102
+ # the summary metrics which should also be recorded when this metric is recorded.
103
+ def summary_metrics
104
+ []
105
+ end
106
+ # returns a hash of params for url_for(), giving you a drilldown URL to an RPM page for this metric
107
+ # define in subclasses - TB 2009-12-18
108
+ # def drilldown_url(metric_id); end
109
+
110
+ def initialize(name)
111
+ @name = name
112
+ end
113
+
114
+ # These would be reflected properly by method missing; consider
115
+ # this an optimization
116
+ def is_controller?; false; end
117
+ def is_transaction?; false; end
118
+
119
+ end
120
+ end
121
+ end
122
+
@@ -0,0 +1,27 @@
1
+ module NewRelic
2
+ module MetricParser
3
+ class ORM < NewRelic::MetricParser::MetricParser
4
+ module Hibernate
5
+ def self.extended(base)
6
+ if base.segments.length == 4
7
+ base.extend JavaParser
8
+ def base.full_class_name
9
+ segment_2
10
+ end
11
+ def base.method_name
12
+ segment_3
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ def initialize(name)
19
+ super
20
+
21
+ if segment_1 == "Hibernate"
22
+ self.extend NewRelic::MetricParser::ORM::Hibernate
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,40 @@
1
+ require 'new_relic/metric_parser'
2
+ # OtherTransaction metrics must have at least three segments: /OtherTransaction/<task>/*
3
+ # Task is "Background", "Resque", "DelayedJob" etc.
4
+ module NewRelic
5
+ module MetricParser
6
+ class OtherTransaction < NewRelic::MetricParser::MetricParser
7
+
8
+ def is_transaction?
9
+ true
10
+ end
11
+ def task
12
+ segments[1]
13
+ end
14
+
15
+ def developer_name
16
+ segments[2..-1].join(NewRelic::MetricParser::MetricParser::SEPARATOR)
17
+ end
18
+
19
+ def short_name
20
+ developer_name
21
+ end
22
+
23
+ def drilldown_url(metric_id)
24
+ {:controller => '/v2/background_tasks', :action => 'index', :task => task, :anchor => "id=#{metric_id}"}
25
+ end
26
+
27
+ def path
28
+ segments[2..-1].join "/"
29
+ end
30
+
31
+ def summary_metrics
32
+ if segments.size > 2
33
+ %W[OtherTransaction/#{task}/all OtherTransaction/all]
34
+ else
35
+ []
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,7 @@
1
+ require 'new_relic/metric_parser/java'
2
+ class NewRelic::MetricParser::Servlet < NewRelic::MetricParser::Java
3
+
4
+ def call_rate_suffix
5
+ 'cpm'
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'new_relic/metric_parser/java'
2
+ class NewRelic::MetricParser::ServletContextListener < NewRelic::MetricParser::Java
3
+
4
+ def call_rate_suffix
5
+ 'cpm'
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'new_relic/metric_parser/java'
2
+ class NewRelic::MetricParser::ServletFilter < NewRelic::MetricParser::Java
3
+
4
+ def call_rate_suffix
5
+ 'cpm'
6
+ end
7
+ end
@@ -0,0 +1,27 @@
1
+ class NewRelic::MetricParser::Solr < NewRelic::MetricParser::MetricParser
2
+
3
+ def short_name
4
+ if segments[1] == "org.apache.solr.search.SolrIndexSearcher"
5
+ "SolrIndexSearcher"
6
+ elsif segments[1] =~ /org\.apache\.solr\.handler\.component/
7
+ segments[1].split(".")[-1]
8
+ else
9
+ super
10
+ end
11
+ end
12
+
13
+ def legend_name
14
+ if all?
15
+ 'Solr'
16
+ else
17
+ super
18
+ end
19
+ end
20
+
21
+ def category; 'Solr Query'; end
22
+
23
+ private
24
+ def all?
25
+ name == Metric::SOLR_ALL_WEB
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ #require 'new_relic/metric_parser/java'
2
+ class NewRelic::MetricParser::SolrRequestHandler < NewRelic::MetricParser::MetricParser
3
+
4
+ def short_name
5
+ if segments[1] == "org.apache.solr.handler.XmlUpdateRequestHandler"
6
+ "UpdateProcessor"
7
+ else
8
+ super
9
+ end
10
+ end
11
+
12
+ def call_rate_suffix
13
+ 'cpm'
14
+ end
15
+ end
@@ -0,0 +1,54 @@
1
+ class NewRelic::MetricParser::Spring < NewRelic::MetricParser::MetricParser
2
+ def initialize(name)
3
+ super
4
+
5
+ if segment_1 == 'Java'
6
+ self.extend JavaParser
7
+ end
8
+ =begin
9
+ case segment_1
10
+ when 'Controller'
11
+ self.extend NewRelic::MetricParser::Spring::Controller
12
+ when 'View'
13
+ self.extend NewRelic::MetricParser::Spring::View
14
+ end
15
+ =end
16
+ end
17
+
18
+
19
+ def pie_chart_label
20
+ short_name
21
+ end
22
+
23
+ def tooltip_name
24
+ developer_name
25
+ end
26
+
27
+ def component_type
28
+ 'Spring'
29
+ end
30
+
31
+ def short_name
32
+ component_type + ' ' + developer_name
33
+ end
34
+
35
+ def developer_name
36
+ '/' + segments[1..-1].join(SEPARATOR)
37
+ end
38
+
39
+ module JavaParser
40
+ def developer_name
41
+ "#{segment_2}.#{segment_3}()"
42
+ end
43
+
44
+ def class_name_without_package
45
+ segment_2 =~ /(.*\.)(.*)$/ ? $2 : segment_2
46
+ end
47
+
48
+ # class name with/out package name and method name
49
+ def short_name
50
+ "#{component_type} #{class_name_without_package}.#{segment_3}()"
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,6 @@
1
+ require 'new_relic/metric_parser/spring'
2
+ class NewRelic::MetricParser::SpringController < NewRelic::MetricParser::Spring
3
+ def component_type
4
+ "Controller"
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ require 'new_relic/metric_parser/spring'
2
+ class NewRelic::MetricParser::SpringView < NewRelic::MetricParser::Spring
3
+ def component_type
4
+ "View"
5
+ end
6
+ end
@@ -0,0 +1,20 @@
1
+ require 'new_relic/metric_parser/java_parser'
2
+ module NewRelic
3
+ module MetricParser
4
+ class StrutsAction < NewRelic::MetricParser::MetricParser
5
+ include NewRelic::MetricParser::JavaParser
6
+
7
+ def method_name
8
+ "execute"
9
+ end
10
+
11
+ def full_class_name
12
+ segment_1
13
+ end
14
+
15
+ def call_rate_suffix
16
+ 'cpm'
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ require 'new_relic/metric_parser/java_parser'
2
+ module NewRelic
3
+ module MetricParser
4
+ class StrutsResult < NewRelic::MetricParser::MetricParser
5
+ include JavaParser
6
+
7
+ def method_name
8
+ "execute"
9
+ end
10
+
11
+ def full_class_name
12
+ segment_1
13
+ end
14
+
15
+ def call_rate_suffix
16
+ 'cpm'
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,5 @@
1
+ module NewRelic
2
+ module MetricParser
3
+ VERSION = "0.1.0.pre1"
4
+ end
5
+ end