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,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,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,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,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,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
|