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.
- data/CHANGELOG +559 -0
- data/LICENSE +64 -0
- data/README.rdoc +179 -0
- data/bin/mongrel_rpm +33 -0
- data/bin/newrelic +13 -0
- data/bin/newrelic_cmd +5 -0
- data/cert/cacert.pem +118 -0
- data/cert/oldsite.pem +28 -0
- data/cert/site.pem +27 -0
- data/dolores_rpm-3.3.4.fork.gem +0 -0
- data/install.rb +9 -0
- data/lib/conditional_vendored_dependency_detection.rb +3 -0
- data/lib/conditional_vendored_metric_parser.rb +5 -0
- data/lib/new_relic/agent/agent.rb +1311 -0
- data/lib/new_relic/agent/beacon_configuration.rb +110 -0
- data/lib/new_relic/agent/browser_monitoring.rb +102 -0
- data/lib/new_relic/agent/busy_calculator.rb +99 -0
- data/lib/new_relic/agent/chained_call.rb +13 -0
- data/lib/new_relic/agent/database.rb +203 -0
- data/lib/new_relic/agent/error_collector.rb +251 -0
- data/lib/new_relic/agent/instrumentation/active_merchant.rb +27 -0
- data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +68 -0
- data/lib/new_relic/agent/instrumentation/authlogic.rb +19 -0
- data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +424 -0
- data/lib/new_relic/agent/instrumentation/data_mapper.rb +57 -0
- data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +52 -0
- data/lib/new_relic/agent/instrumentation/memcache.rb +80 -0
- data/lib/new_relic/agent/instrumentation/merb/controller.rb +41 -0
- data/lib/new_relic/agent/instrumentation/merb/errors.rb +29 -0
- data/lib/new_relic/agent/instrumentation/metric_frame/pop.rb +80 -0
- data/lib/new_relic/agent/instrumentation/metric_frame.rb +332 -0
- data/lib/new_relic/agent/instrumentation/net.rb +29 -0
- data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +36 -0
- data/lib/new_relic/agent/instrumentation/queue_time.rb +210 -0
- data/lib/new_relic/agent/instrumentation/rack.rb +98 -0
- data/lib/new_relic/agent/instrumentation/rails/action_controller.rb +114 -0
- data/lib/new_relic/agent/instrumentation/rails/action_web_service.rb +42 -0
- data/lib/new_relic/agent/instrumentation/rails/active_record_instrumentation.rb +115 -0
- data/lib/new_relic/agent/instrumentation/rails/errors.rb +42 -0
- data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +118 -0
- data/lib/new_relic/agent/instrumentation/rails3/active_record_instrumentation.rb +122 -0
- data/lib/new_relic/agent/instrumentation/rails3/errors.rb +37 -0
- data/lib/new_relic/agent/instrumentation/sinatra.rb +58 -0
- data/lib/new_relic/agent/instrumentation/sunspot.rb +29 -0
- data/lib/new_relic/agent/instrumentation/unicorn_instrumentation.rb +21 -0
- data/lib/new_relic/agent/instrumentation.rb +9 -0
- data/lib/new_relic/agent/method_tracer.rb +528 -0
- data/lib/new_relic/agent/sampler.rb +50 -0
- data/lib/new_relic/agent/samplers/cpu_sampler.rb +58 -0
- data/lib/new_relic/agent/samplers/delayed_job_lock_sampler.rb +40 -0
- data/lib/new_relic/agent/samplers/memory_sampler.rb +144 -0
- data/lib/new_relic/agent/samplers/object_sampler.rb +26 -0
- data/lib/new_relic/agent/shim_agent.rb +29 -0
- data/lib/new_relic/agent/sql_sampler.rb +267 -0
- data/lib/new_relic/agent/stats_engine/metric_stats.rb +187 -0
- data/lib/new_relic/agent/stats_engine/samplers.rb +95 -0
- data/lib/new_relic/agent/stats_engine/transactions.rb +208 -0
- data/lib/new_relic/agent/stats_engine.rb +25 -0
- data/lib/new_relic/agent/transaction_sample_builder.rb +101 -0
- data/lib/new_relic/agent/transaction_sampler.rb +397 -0
- data/lib/new_relic/agent/worker_loop.rb +89 -0
- data/lib/new_relic/agent.rb +454 -0
- data/lib/new_relic/collection_helper.rb +75 -0
- data/lib/new_relic/command.rb +85 -0
- data/lib/new_relic/commands/deployments.rb +105 -0
- data/lib/new_relic/commands/install.rb +80 -0
- data/lib/new_relic/control/class_methods.rb +53 -0
- data/lib/new_relic/control/configuration.rb +202 -0
- data/lib/new_relic/control/frameworks/external.rb +16 -0
- data/lib/new_relic/control/frameworks/merb.rb +31 -0
- data/lib/new_relic/control/frameworks/rails.rb +164 -0
- data/lib/new_relic/control/frameworks/rails3.rb +75 -0
- data/lib/new_relic/control/frameworks/ruby.rb +42 -0
- data/lib/new_relic/control/frameworks/sinatra.rb +20 -0
- data/lib/new_relic/control/frameworks.rb +10 -0
- data/lib/new_relic/control/instance_methods.rb +179 -0
- data/lib/new_relic/control/instrumentation.rb +100 -0
- data/lib/new_relic/control/logging_methods.rb +143 -0
- data/lib/new_relic/control/profiling.rb +25 -0
- data/lib/new_relic/control/server_methods.rb +114 -0
- data/lib/new_relic/control.rb +46 -0
- data/lib/new_relic/data_serialization.rb +157 -0
- data/lib/new_relic/delayed_job_injection.rb +46 -0
- data/lib/new_relic/language_support.rb +69 -0
- data/lib/new_relic/local_environment.rb +414 -0
- data/lib/new_relic/merbtasks.rb +6 -0
- data/lib/new_relic/metric_data.rb +51 -0
- data/lib/new_relic/metric_spec.rb +75 -0
- data/lib/new_relic/metrics.rb +9 -0
- data/lib/new_relic/noticed_error.rb +24 -0
- data/lib/new_relic/rack/browser_monitoring.rb +68 -0
- data/lib/new_relic/rack/developer_mode.rb +268 -0
- data/lib/new_relic/recipes.rb +73 -0
- data/lib/new_relic/stats.rb +388 -0
- data/lib/new_relic/timer_lib.rb +27 -0
- data/lib/new_relic/transaction_analysis/segment_summary.rb +49 -0
- data/lib/new_relic/transaction_analysis.rb +77 -0
- data/lib/new_relic/transaction_sample/composite_segment.rb +27 -0
- data/lib/new_relic/transaction_sample/fake_segment.rb +9 -0
- data/lib/new_relic/transaction_sample/segment.rb +201 -0
- data/lib/new_relic/transaction_sample/summary_segment.rb +21 -0
- data/lib/new_relic/transaction_sample.rb +245 -0
- data/lib/new_relic/url_rule.rb +14 -0
- data/lib/new_relic/version.rb +55 -0
- data/lib/newrelic_rpm.rb +49 -0
- data/lib/tasks/all.rb +4 -0
- data/lib/tasks/install.rake +7 -0
- data/lib/tasks/tests.rake +19 -0
- data/newrelic.yml +265 -0
- data/recipes/newrelic.rb +6 -0
- data/test/active_record_fixtures.rb +77 -0
- data/test/config/newrelic.yml +48 -0
- data/test/config/test_control.rb +48 -0
- data/test/new_relic/agent/agent/connect_test.rb +410 -0
- data/test/new_relic/agent/agent/start_test.rb +255 -0
- data/test/new_relic/agent/agent/start_worker_thread_test.rb +153 -0
- data/test/new_relic/agent/agent_test.rb +139 -0
- data/test/new_relic/agent/agent_test_controller.rb +77 -0
- data/test/new_relic/agent/agent_test_controller_test.rb +363 -0
- data/test/new_relic/agent/apdex_from_server_test.rb +9 -0
- data/test/new_relic/agent/beacon_configuration_test.rb +108 -0
- data/test/new_relic/agent/browser_monitoring_test.rb +278 -0
- data/test/new_relic/agent/busy_calculator_test.rb +81 -0
- data/test/new_relic/agent/database_test.rb +162 -0
- data/test/new_relic/agent/error_collector/notice_error_test.rb +257 -0
- data/test/new_relic/agent/error_collector_test.rb +175 -0
- data/test/new_relic/agent/instrumentation/active_record_instrumentation_test.rb +538 -0
- data/test/new_relic/agent/instrumentation/controller_instrumentation_test.rb +36 -0
- data/test/new_relic/agent/instrumentation/instrumentation_test.rb +11 -0
- data/test/new_relic/agent/instrumentation/metric_frame/pop_test.rb +172 -0
- data/test/new_relic/agent/instrumentation/metric_frame_test.rb +50 -0
- data/test/new_relic/agent/instrumentation/net_instrumentation_test.rb +84 -0
- data/test/new_relic/agent/instrumentation/queue_time_test.rb +387 -0
- data/test/new_relic/agent/instrumentation/rack_test.rb +35 -0
- data/test/new_relic/agent/instrumentation/task_instrumentation_test.rb +184 -0
- data/test/new_relic/agent/memcache_instrumentation_test.rb +143 -0
- data/test/new_relic/agent/method_tracer/class_methods/add_method_tracer_test.rb +164 -0
- data/test/new_relic/agent/method_tracer/instance_methods/trace_execution_scoped_test.rb +234 -0
- data/test/new_relic/agent/method_tracer_test.rb +386 -0
- data/test/new_relic/agent/mock_scope_listener.rb +23 -0
- data/test/new_relic/agent/rpm_agent_test.rb +149 -0
- data/test/new_relic/agent/sampler_test.rb +19 -0
- data/test/new_relic/agent/shim_agent_test.rb +20 -0
- data/test/new_relic/agent/sql_sampler_test.rb +160 -0
- data/test/new_relic/agent/stats_engine/metric_stats/harvest_test.rb +150 -0
- data/test/new_relic/agent/stats_engine/metric_stats_test.rb +82 -0
- data/test/new_relic/agent/stats_engine/samplers_test.rb +99 -0
- data/test/new_relic/agent/stats_engine_test.rb +185 -0
- data/test/new_relic/agent/transaction_sample_builder_test.rb +195 -0
- data/test/new_relic/agent/transaction_sampler_test.rb +955 -0
- data/test/new_relic/agent/worker_loop_test.rb +66 -0
- data/test/new_relic/agent_test.rb +175 -0
- data/test/new_relic/collection_helper_test.rb +149 -0
- data/test/new_relic/command/deployments_test.rb +68 -0
- data/test/new_relic/control/class_methods_test.rb +62 -0
- data/test/new_relic/control/configuration_test.rb +72 -0
- data/test/new_relic/control/logging_methods_test.rb +185 -0
- data/test/new_relic/control_test.rb +254 -0
- data/test/new_relic/data_serialization_test.rb +208 -0
- data/test/new_relic/delayed_job_injection_test.rb +16 -0
- data/test/new_relic/local_environment_test.rb +72 -0
- data/test/new_relic/metric_data_test.rb +125 -0
- data/test/new_relic/metric_spec_test.rb +95 -0
- data/test/new_relic/rack/all_test.rb +11 -0
- data/test/new_relic/rack/browser_monitoring_test.rb +84 -0
- data/test/new_relic/rack/developer_mode_helper_test.rb +141 -0
- data/test/new_relic/rack/developer_mode_test.rb +43 -0
- data/test/new_relic/stats_test.rb +426 -0
- data/test/new_relic/transaction_analysis/segment_summary_test.rb +91 -0
- data/test/new_relic/transaction_analysis_test.rb +121 -0
- data/test/new_relic/transaction_sample/composite_segment_test.rb +35 -0
- data/test/new_relic/transaction_sample/fake_segment_test.rb +17 -0
- data/test/new_relic/transaction_sample/segment_test.rb +389 -0
- data/test/new_relic/transaction_sample/summary_segment_test.rb +31 -0
- data/test/new_relic/transaction_sample_subtest_test.rb +56 -0
- data/test/new_relic/transaction_sample_test.rb +164 -0
- data/test/new_relic/version_number_test.rb +89 -0
- data/test/test_contexts.rb +29 -0
- data/test/test_helper.rb +154 -0
- data/ui/helpers/developer_mode_helper.rb +357 -0
- data/ui/helpers/google_pie_chart.rb +48 -0
- data/ui/views/layouts/newrelic_default.rhtml +47 -0
- data/ui/views/newrelic/_explain_plans.rhtml +27 -0
- data/ui/views/newrelic/_sample.rhtml +20 -0
- data/ui/views/newrelic/_segment.rhtml +28 -0
- data/ui/views/newrelic/_segment_limit_message.rhtml +1 -0
- data/ui/views/newrelic/_segment_row.rhtml +12 -0
- data/ui/views/newrelic/_show_sample_detail.rhtml +24 -0
- data/ui/views/newrelic/_show_sample_sql.rhtml +24 -0
- data/ui/views/newrelic/_show_sample_summary.rhtml +3 -0
- data/ui/views/newrelic/_sql_row.rhtml +16 -0
- data/ui/views/newrelic/_stack_trace.rhtml +15 -0
- data/ui/views/newrelic/_table.rhtml +12 -0
- data/ui/views/newrelic/explain_sql.rhtml +43 -0
- data/ui/views/newrelic/file/images/arrow-close.png +0 -0
- data/ui/views/newrelic/file/images/arrow-open.png +0 -0
- data/ui/views/newrelic/file/images/blue_bar.gif +0 -0
- data/ui/views/newrelic/file/images/file_icon.png +0 -0
- data/ui/views/newrelic/file/images/gray_bar.gif +0 -0
- data/ui/views/newrelic/file/images/new-relic-rpm-desktop.gif +0 -0
- data/ui/views/newrelic/file/images/new_relic_rpm_desktop.gif +0 -0
- data/ui/views/newrelic/file/images/textmate.png +0 -0
- data/ui/views/newrelic/file/javascript/jquery-1.4.2.js +6240 -0
- data/ui/views/newrelic/file/javascript/transaction_sample.js +120 -0
- data/ui/views/newrelic/file/stylesheets/style.css +490 -0
- data/ui/views/newrelic/index.rhtml +71 -0
- data/ui/views/newrelic/sample_not_found.rhtml +2 -0
- data/ui/views/newrelic/show_sample.rhtml +80 -0
- data/ui/views/newrelic/show_source.rhtml +3 -0
- data/ui/views/newrelic/threads.rhtml +53 -0
- data/vendor/gems/dependency_detection-0.0.1.build/LICENSE +5 -0
- data/vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection/version.rb +3 -0
- data/vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb +62 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/metric_parser.rb +1 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/action_mailer.rb +14 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/active_merchant.rb +31 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/active_record.rb +33 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/apdex.rb +89 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/background_transaction.rb +7 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/client.rb +46 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/controller.rb +67 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/controller_cpu.rb +43 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/controller_ext.rb +17 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/database.rb +48 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/database_pool.rb +24 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/dot_net.rb +28 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/dot_net_parser.rb +17 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/errors.rb +11 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/external.rb +55 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/frontend.rb +40 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/gc.rb +20 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/hibernate_session.rb +7 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/java.rb +31 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/java_parser.rb +17 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/jsp.rb +34 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/jsp_tag.rb +7 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/mem_cache.rb +55 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/metric_parser.rb +122 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/orm.rb +27 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/other_transaction.rb +40 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/servlet.rb +7 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/servlet_context_listener.rb +7 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/servlet_filter.rb +7 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/solr.rb +27 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/solr_request_handler.rb +15 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/spring.rb +54 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/spring_controller.rb +6 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/spring_view.rb +6 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/struts_action.rb +20 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/struts_result.rb +20 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/version.rb +5 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/view.rb +70 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/web_frontend.rb +18 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/web_service.rb +14 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/web_transaction.rb +133 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser.rb +64 -0
- 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,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> </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,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,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
|