oneapm_rpm 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +30 -0
- data/.rubocop.yml +725 -0
- data/Gemfile +3 -0
- data/Guardfile +7 -0
- data/LICENSE +1 -0
- data/README.md +3 -0
- data/config/cert/cacert.pem +1177 -0
- data/config/database.yml +5 -0
- data/lib/initializers/goliath.rb +11 -0
- data/lib/initializers/other.rb +1 -0
- data/lib/initializers/rails.rb +15 -0
- data/lib/one_apm/agent.rb +253 -0
- data/lib/one_apm/agent/agent.rb +283 -0
- data/lib/one_apm/agent/agent/connect.rb +175 -0
- data/lib/one_apm/agent/agent/container_data_manager.rb +218 -0
- data/lib/one_apm/agent/agent/forkable_dispatcher_functions.rb +96 -0
- data/lib/one_apm/agent/agent/helpers.rb +45 -0
- data/lib/one_apm/agent/agent/start.rb +226 -0
- data/lib/one_apm/agent/agent/start_worker_thread.rb +148 -0
- data/lib/one_apm/agent/busy_calculator.rb +115 -0
- data/lib/one_apm/agent/cross_app/cross_app_monitor.rb +181 -0
- data/lib/one_apm/agent/cross_app/cross_app_tracing.rb +336 -0
- data/lib/one_apm/agent/database.rb +308 -0
- data/lib/one_apm/agent/database/active_record_helper.rb +80 -0
- data/lib/one_apm/agent/database/obfuscation_helpers.rb +76 -0
- data/lib/one_apm/agent/database/obfuscator.rb +78 -0
- data/lib/one_apm/agent/database/postgres_explain_obfuscator.rb +45 -0
- data/lib/one_apm/agent/datastores.rb +175 -0
- data/lib/one_apm/agent/datastores/metric_helper.rb +83 -0
- data/lib/one_apm/agent/datastores/mongo.rb +27 -0
- data/lib/one_apm/agent/datastores/mongo/metric_translator.rb +189 -0
- data/lib/one_apm/agent/datastores/mongo/obfuscator.rb +37 -0
- data/lib/one_apm/agent/datastores/mongo/statement_formatter.rb +51 -0
- data/lib/one_apm/agent/event/event_listener.rb +40 -0
- data/lib/one_apm/agent/event/event_loop.rb +191 -0
- data/lib/one_apm/agent/event/worker_loop.rb +97 -0
- data/lib/one_apm/agent/harvester.rb +48 -0
- data/lib/one_apm/agent/inbound_request_monitor.rb +30 -0
- data/lib/one_apm/agent/javascript_instrumentor.rb +186 -0
- data/lib/one_apm/agent/pipe/pipe_channel_manager.rb +275 -0
- data/lib/one_apm/agent/pipe/pipe_service.rb +81 -0
- data/lib/one_apm/agent/sampler.rb +55 -0
- data/lib/one_apm/agent/sampler_collection.rb +65 -0
- data/lib/one_apm/agent/samplers/cpu_sampler.rb +49 -0
- data/lib/one_apm/agent/samplers/delayed_job_sampler.rb +109 -0
- data/lib/one_apm/agent/samplers/memory_sampler.rb +144 -0
- data/lib/one_apm/agent/samplers/object_sampler.rb +22 -0
- data/lib/one_apm/agent/samplers/vm_sampler.rb +124 -0
- data/lib/one_apm/agent/synthetics_monitor.rb +48 -0
- data/lib/one_apm/agent/threading/agent_thread.rb +74 -0
- data/lib/one_apm/agent/threading/backtrace_node.rb +133 -0
- data/lib/one_apm/agent/threading/backtrace_service.rb +259 -0
- data/lib/one_apm/agent/threading/thread_profile.rb +155 -0
- data/lib/one_apm/collector/collector/helper.rb +139 -0
- data/lib/one_apm/collector/collector/http_connection.rb +254 -0
- data/lib/one_apm/collector/collector/server_methods.rb +71 -0
- data/lib/one_apm/collector/collector_service.rb +123 -0
- data/lib/one_apm/collector/commands/agent_command.rb +17 -0
- data/lib/one_apm/collector/commands/thread_profiler_session.rb +108 -0
- data/lib/one_apm/collector/commands/xray_session.rb +53 -0
- data/lib/one_apm/collector/commands/xray_session_collection.rb +156 -0
- data/lib/one_apm/collector/containers/agent_command_router.rb +153 -0
- data/lib/one_apm/collector/containers/custom_event_aggregator.rb +94 -0
- data/lib/one_apm/collector/containers/error_collector.rb +349 -0
- data/lib/one_apm/collector/containers/sql_sampler.rb +331 -0
- data/lib/one_apm/collector/containers/stats_engine.rb +34 -0
- data/lib/one_apm/collector/containers/transaction_event_aggregator.rb +249 -0
- data/lib/one_apm/collector/containers/transaction_sampler.rb +352 -0
- data/lib/one_apm/collector/containers/utilization_data.rb +36 -0
- data/lib/one_apm/collector/stats_engine/gc_profiler.rb +106 -0
- data/lib/one_apm/collector/stats_engine/metric_stats.rb +243 -0
- data/lib/one_apm/collector/stats_engine/stats_hash.rb +105 -0
- data/lib/one_apm/configuration.rb +429 -0
- data/lib/one_apm/configuration/autostart.rb +41 -0
- data/lib/one_apm/configuration/default_source.rb +1026 -0
- data/lib/one_apm/configuration/environment_source.rb +113 -0
- data/lib/one_apm/configuration/high_security_source.rb +56 -0
- data/lib/one_apm/configuration/manual_source.rb +13 -0
- data/lib/one_apm/configuration/server_source.rb +60 -0
- data/lib/one_apm/configuration/yaml_source.rb +134 -0
- data/lib/one_apm/errors/agent_errors.rb +26 -0
- data/lib/one_apm/errors/internal_agent_error.rb +16 -0
- data/lib/one_apm/errors/noticed_error.rb +79 -0
- data/lib/one_apm/frameworks/external.rb +15 -0
- data/lib/one_apm/frameworks/rails.rb +103 -0
- data/lib/one_apm/frameworks/rails3.rb +37 -0
- data/lib/one_apm/frameworks/rails4.rb +21 -0
- data/lib/one_apm/frameworks/ruby.rb +21 -0
- data/lib/one_apm/frameworks/sinatra.rb +12 -0
- data/lib/one_apm/inst/3rd/active_merchant.rb +35 -0
- data/lib/one_apm/inst/3rd/acts_as_solr.rb +70 -0
- data/lib/one_apm/inst/3rd/authlogic.rb +23 -0
- data/lib/one_apm/inst/3rd/sunspot.rb +31 -0
- data/lib/one_apm/inst/background_job/active_job.rb +88 -0
- data/lib/one_apm/inst/background_job/delayed_job.rb +52 -0
- data/lib/one_apm/inst/background_job/delayed_job_injection.rb +8 -0
- data/lib/one_apm/inst/background_job/resque.rb +107 -0
- data/lib/one_apm/inst/background_job/sidekiq.rb +64 -0
- data/lib/one_apm/inst/dispatcher/passenger.rb +25 -0
- data/lib/one_apm/inst/dispatcher/rainbows.rb +23 -0
- data/lib/one_apm/inst/framework/grape.rb +94 -0
- data/lib/one_apm/inst/framework/padrino.rb +30 -0
- data/lib/one_apm/inst/framework/sinatra.rb +185 -0
- data/lib/one_apm/inst/framework/sinatra/ignorer.rb +50 -0
- data/lib/one_apm/inst/framework/sinatra/transaction_namer.rb +54 -0
- data/lib/one_apm/inst/http_clients/curb.rb +189 -0
- data/lib/one_apm/inst/http_clients/excon.rb +70 -0
- data/lib/one_apm/inst/http_clients/excon/connection.rb +31 -0
- data/lib/one_apm/inst/http_clients/excon/middleware.rb +55 -0
- data/lib/one_apm/inst/http_clients/httpclient.rb +44 -0
- data/lib/one_apm/inst/http_clients/net.rb +34 -0
- data/lib/one_apm/inst/http_clients/typhoeus.rb +76 -0
- data/lib/one_apm/inst/nosql/memcache.rb +134 -0
- data/lib/one_apm/inst/nosql/mongo.rb +126 -0
- data/lib/one_apm/inst/nosql/mongo_moped.rb +85 -0
- data/lib/one_apm/inst/nosql/redis.rb +83 -0
- data/lib/one_apm/inst/orm/active_record.rb +99 -0
- data/lib/one_apm/inst/orm/active_record_4.rb +28 -0
- data/lib/one_apm/inst/orm/data_mapper.rb +180 -0
- data/lib/one_apm/inst/orm/sequel.rb +47 -0
- data/lib/one_apm/inst/rack.rb +38 -0
- data/lib/one_apm/inst/rack/rack.rb +44 -0
- data/lib/one_apm/inst/rack/rack_builder.rb +51 -0
- data/lib/one_apm/inst/rails/action_controller.rb +118 -0
- data/lib/one_apm/inst/rails/action_web_service.rb +44 -0
- data/lib/one_apm/inst/rails/errors.rb +43 -0
- data/lib/one_apm/inst/rails3/action_controller.rb +172 -0
- data/lib/one_apm/inst/rails3/errors.rb +43 -0
- data/lib/one_apm/inst/rails4/action_controller.rb +27 -0
- data/lib/one_apm/inst/rails4/action_controller_subscriber.rb +121 -0
- data/lib/one_apm/inst/rails4/action_view.rb +23 -0
- data/lib/one_apm/inst/rails4/action_view_subscriber.rb +93 -0
- data/lib/one_apm/inst/rails4/active_record_subscriber.rb +96 -0
- data/lib/one_apm/inst/rails4/errors.rb +42 -0
- data/lib/one_apm/inst/rails_middleware.rb +40 -0
- data/lib/one_apm/inst/support/evented_subscriber.rb +98 -0
- data/lib/one_apm/inst/support/ignore_actions.rb +39 -0
- data/lib/one_apm/inst/support/queue_time.rb +76 -0
- data/lib/one_apm/inst/transaction_base.rb +405 -0
- data/lib/one_apm/logger/agent_logger.rb +206 -0
- data/lib/one_apm/logger/audit_logger.rb +78 -0
- data/lib/one_apm/logger/memory_logger.rb +50 -0
- data/lib/one_apm/logger/null_logger.rb +19 -0
- data/lib/one_apm/metrics/metric_data.rb +72 -0
- data/lib/one_apm/metrics/metric_spec.rb +82 -0
- data/lib/one_apm/metrics/stats.rb +173 -0
- data/lib/one_apm/probe.rb +16 -0
- data/lib/one_apm/probe/framework_loader.rb +53 -0
- data/lib/one_apm/probe/instance_methods.rb +105 -0
- data/lib/one_apm/probe/instrumentation.rb +60 -0
- data/lib/one_apm/rack/browser_monitoring.rb +144 -0
- data/lib/one_apm/rack/middleware_base.rb +27 -0
- data/lib/one_apm/rack/middleware_hooks.rb +17 -0
- data/lib/one_apm/rack/middleware_tracing.rb +81 -0
- data/lib/one_apm/rack/middleware_wrapper.rb +86 -0
- data/lib/one_apm/support/chained_call.rb +15 -0
- data/lib/one_apm/support/coerce.rb +81 -0
- data/lib/one_apm/support/collection_helper.rb +79 -0
- data/lib/one_apm/support/dotted_hash.rb +45 -0
- data/lib/one_apm/support/encoders.rb +34 -0
- data/lib/one_apm/support/environment_report.rb +127 -0
- data/lib/one_apm/support/event_buffer.rb +82 -0
- data/lib/one_apm/support/event_buffer/sampled_buffer.rb +45 -0
- data/lib/one_apm/support/event_buffer/sized_buffer.rb +21 -0
- data/lib/one_apm/support/event_buffer/synthetics_event_buffer.rb +40 -0
- data/lib/one_apm/support/helper.rb +49 -0
- data/lib/one_apm/support/hostname.rb +13 -0
- data/lib/one_apm/support/http_clients/curb_wrappers.rb +65 -0
- data/lib/one_apm/support/http_clients/excon_wrappers.rb +63 -0
- data/lib/one_apm/support/http_clients/httpclient_wrappers.rb +61 -0
- data/lib/one_apm/support/http_clients/net_http_wrappers.rb +48 -0
- data/lib/one_apm/support/http_clients/typhoeus_wrappers.rb +73 -0
- data/lib/one_apm/support/http_clients/uri_util.rb +39 -0
- data/lib/one_apm/support/json_marshaller.rb +68 -0
- data/lib/one_apm/support/json_wrapper.rb +130 -0
- data/lib/one_apm/support/language_support.rb +142 -0
- data/lib/one_apm/support/library_detection.rb +119 -0
- data/lib/one_apm/support/local_environment.rb +196 -0
- data/lib/one_apm/support/marshaller.rb +62 -0
- data/lib/one_apm/support/method_tracer.rb +334 -0
- data/lib/one_apm/support/method_tracer/helpers.rb +92 -0
- data/lib/one_apm/support/method_tracer/traced_method_stack.rb +103 -0
- data/lib/one_apm/support/obfuscator.rb +47 -0
- data/lib/one_apm/support/okjson.rb +601 -0
- data/lib/one_apm/support/parameter_filtering.rb +35 -0
- data/lib/one_apm/support/rules_engine.rb +56 -0
- data/lib/one_apm/support/rules_engine/replacement_rule.rb +80 -0
- data/lib/one_apm/support/rules_engine/segment_terms_rule.rb +46 -0
- data/lib/one_apm/support/server.rb +11 -0
- data/lib/one_apm/support/supported_versions.rb +257 -0
- data/lib/one_apm/support/system_info.rb +211 -0
- data/lib/one_apm/support/timer_lib.rb +29 -0
- data/lib/one_apm/support/version_number.rb +51 -0
- data/lib/one_apm/support/vm.rb +30 -0
- data/lib/one_apm/support/vm/jruby_vm.rb +38 -0
- data/lib/one_apm/support/vm/monotonic_gc_profiler.rb +43 -0
- data/lib/one_apm/support/vm/mri_vm.rb +85 -0
- data/lib/one_apm/support/vm/rubinius_vm.rb +129 -0
- data/lib/one_apm/support/vm/snapshot.rb +18 -0
- data/lib/one_apm/transaction.rb +336 -0
- data/lib/one_apm/transaction/class_methods.rb +132 -0
- data/lib/one_apm/transaction/instance_helpers.rb +82 -0
- data/lib/one_apm/transaction/metric_constants.rb +42 -0
- data/lib/one_apm/transaction/sample_buffer/force_persist_sample_buffer.rb +21 -0
- data/lib/one_apm/transaction/sample_buffer/slowest_sample_buffer.rb +21 -0
- data/lib/one_apm/transaction/sample_buffer/synthetics_sample_buffer.rb +21 -0
- data/lib/one_apm/transaction/sample_buffer/transaction_sample_buffer.rb +101 -0
- data/lib/one_apm/transaction/sample_buffer/xray_sample_buffer.rb +60 -0
- data/lib/one_apm/transaction/segment.rb +193 -0
- data/lib/one_apm/transaction/segment_summary.rb +51 -0
- data/lib/one_apm/transaction/thread_local_access.rb +73 -0
- data/lib/one_apm/transaction/transaction_analysis.rb +78 -0
- data/lib/one_apm/transaction/transaction_apdex.rb +20 -0
- data/lib/one_apm/transaction/transaction_cpu.rb +22 -0
- data/lib/one_apm/transaction/transaction_finish_append.rb +67 -0
- data/lib/one_apm/transaction/transaction_ignore.rb +33 -0
- data/lib/one_apm/transaction/transaction_jruby_functions.rb +40 -0
- data/lib/one_apm/transaction/transaction_metrics.rb +53 -0
- data/lib/one_apm/transaction/transaction_name.rb +90 -0
- data/lib/one_apm/transaction/transaction_namer.rb +49 -0
- data/lib/one_apm/transaction/transaction_sample.rb +204 -0
- data/lib/one_apm/transaction/transaction_sample_builder.rb +168 -0
- data/lib/one_apm/transaction/transaction_state.rb +149 -0
- data/lib/one_apm/transaction/transaction_summary.rb +28 -0
- data/lib/one_apm/transaction/transaction_synthetics.rb +40 -0
- data/lib/one_apm/transaction/transaction_timings.rb +54 -0
- data/lib/one_apm/version.rb +13 -0
- data/lib/oneapm_rpm.rb +16 -0
- data/lib/sequel/extensions/oneapm_instrumentation.rb +84 -0
- data/lib/sequel/plugins/oneapm_instrumentation.rb +66 -0
- data/oneapm.yml +135 -0
- data/oneapm_rpm.gemspec +58 -0
- metadata +474 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module OneApm
|
4
|
+
module Support
|
5
|
+
module ParameterFiltering
|
6
|
+
extend self
|
7
|
+
|
8
|
+
def apply_filters(env, params)
|
9
|
+
params = filter_using_rails(env, params)
|
10
|
+
params = filter_rack_file_data(env, params)
|
11
|
+
params
|
12
|
+
end
|
13
|
+
|
14
|
+
def filter_using_rails(env, params)
|
15
|
+
return params unless defined?(ActionDispatch::Http::ParameterFilter) && env.key?("action_dispatch.parameter_filter")
|
16
|
+
filters = env["action_dispatch.parameter_filter"]
|
17
|
+
ActionDispatch::Http::ParameterFilter.new(filters).filter(params)
|
18
|
+
end
|
19
|
+
|
20
|
+
def filter_rack_file_data(env, params)
|
21
|
+
content_type = env["CONTENT_TYPE"]
|
22
|
+
multipart = content_type && content_type.start_with?("multipart")
|
23
|
+
|
24
|
+
params.inject({}) do |memo, (k,v)|
|
25
|
+
if multipart && v.is_a?(Hash) && v[:tempfile]
|
26
|
+
memo[k] = "[FILE]"
|
27
|
+
else
|
28
|
+
memo[k] = v
|
29
|
+
end
|
30
|
+
memo
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'one_apm/support/rules_engine/replacement_rule'
|
4
|
+
require 'one_apm/support/rules_engine/segment_terms_rule'
|
5
|
+
|
6
|
+
module OneApm
|
7
|
+
module Support
|
8
|
+
class RulesEngine
|
9
|
+
SEGMENT_SEPARATOR = '/'.freeze
|
10
|
+
LEADING_SLASH_REGEX = %r{^/}.freeze
|
11
|
+
|
12
|
+
include Enumerable
|
13
|
+
extend Forwardable
|
14
|
+
|
15
|
+
def_delegators :@rules, :size, :inspect, :each, :clear
|
16
|
+
|
17
|
+
def self.create_metric_rules(connect_response)
|
18
|
+
specs = connect_response['metric_name_rules'] || []
|
19
|
+
rules = specs.map { |spec| ReplacementRule.new(spec) }
|
20
|
+
self.new(rules)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.create_transaction_rules(connect_response)
|
24
|
+
txn_name_specs = connect_response['transaction_name_rules'] || []
|
25
|
+
segment_rule_specs = connect_response['transaction_segment_terms'] || []
|
26
|
+
|
27
|
+
txn_name_rules = txn_name_specs.map { |s| ReplacementRule.new(s) }
|
28
|
+
segment_rules = segment_rule_specs.map { |s| SegmentTermsRule.new(s) }
|
29
|
+
|
30
|
+
self.new(txn_name_rules, segment_rules)
|
31
|
+
end
|
32
|
+
|
33
|
+
def initialize(rules=[], segment_term_rules=[])
|
34
|
+
@rules = rules.sort
|
35
|
+
@segment_term_rules = segment_term_rules
|
36
|
+
end
|
37
|
+
|
38
|
+
def apply_rules(rules, string)
|
39
|
+
rules.each do |rule|
|
40
|
+
if rule.matches?(string)
|
41
|
+
string = rule.apply(string)
|
42
|
+
break if rule.terminal?
|
43
|
+
end
|
44
|
+
end
|
45
|
+
string
|
46
|
+
end
|
47
|
+
|
48
|
+
def rename(original_string)
|
49
|
+
renamed = apply_rules(@rules, original_string)
|
50
|
+
return nil unless renamed
|
51
|
+
renamed = apply_rules(@segment_term_rules, renamed)
|
52
|
+
renamed
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module OneApm
|
4
|
+
module Support
|
5
|
+
class RulesEngine
|
6
|
+
class ReplacementRule
|
7
|
+
|
8
|
+
attr_reader :terminate_chain,
|
9
|
+
:each_segment,
|
10
|
+
:ignore,
|
11
|
+
:replace_all,
|
12
|
+
:eval_order,
|
13
|
+
:match_expression,
|
14
|
+
:replacement
|
15
|
+
|
16
|
+
def initialize(options)
|
17
|
+
if !options['match_expression']
|
18
|
+
raise ArgumentError.new('missing required match_expression')
|
19
|
+
end
|
20
|
+
if !options['replacement'] && !options['ignore']
|
21
|
+
raise ArgumentError.new('must specify replacement when ignore is false')
|
22
|
+
end
|
23
|
+
|
24
|
+
@match_expression = Regexp.new(options['match_expression'], Regexp::IGNORECASE)
|
25
|
+
@replacement = options['replacement']
|
26
|
+
@ignore = options['ignore'] || false
|
27
|
+
@eval_order = options['eval_order'] || 0
|
28
|
+
@replace_all = options['replace_all'] || false
|
29
|
+
@each_segment = options['each_segment'] || false
|
30
|
+
@terminate_chain = options['terminate_chain'] || false
|
31
|
+
end
|
32
|
+
|
33
|
+
def terminal?
|
34
|
+
@terminate_chain || @ignore
|
35
|
+
end
|
36
|
+
|
37
|
+
def matches?(string)
|
38
|
+
if @each_segment
|
39
|
+
string.split(SEGMENT_SEPARATOR).any? do |segment|
|
40
|
+
segment.match(@match_expression)
|
41
|
+
end
|
42
|
+
else
|
43
|
+
string.match @match_expression
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def apply(string)
|
48
|
+
if @ignore
|
49
|
+
nil
|
50
|
+
elsif @each_segment
|
51
|
+
apply_to_each_segment(string)
|
52
|
+
else
|
53
|
+
apply_replacement(string)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def apply_replacement(string)
|
58
|
+
method = @replace_all ? :gsub : :sub
|
59
|
+
string.send(method, @match_expression, @replacement)
|
60
|
+
end
|
61
|
+
|
62
|
+
def apply_to_each_segment(string)
|
63
|
+
string = string.dup
|
64
|
+
leading_slash = string.slice!(LEADING_SLASH_REGEX)
|
65
|
+
segments = string.split(SEGMENT_SEPARATOR)
|
66
|
+
|
67
|
+
segments.map! do |segment|
|
68
|
+
apply_replacement(segment)
|
69
|
+
end
|
70
|
+
|
71
|
+
"#{leading_slash}#{segments.join(SEGMENT_SEPARATOR)}"
|
72
|
+
end
|
73
|
+
|
74
|
+
def <=>(other)
|
75
|
+
eval_order <=> other.eval_order
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module OneApm
|
4
|
+
module Support
|
5
|
+
class RulesEngine
|
6
|
+
class SegmentTermsRule
|
7
|
+
SEGMENT_PLACEHOLDER = '*'.freeze
|
8
|
+
ADJACENT_PLACEHOLDERS_REGEX = %r{((?:^|/)\*)(?:/\*)*}.freeze
|
9
|
+
ADJACENT_PLACEHOLDERS_REPLACEMENT = '\1'.freeze
|
10
|
+
|
11
|
+
attr_reader :prefix, :terms
|
12
|
+
|
13
|
+
def initialize(options)
|
14
|
+
@prefix = options['prefix']
|
15
|
+
@terms = options['terms']
|
16
|
+
@trim_range = (@prefix.size..-1)
|
17
|
+
end
|
18
|
+
|
19
|
+
def terminal?
|
20
|
+
true
|
21
|
+
end
|
22
|
+
|
23
|
+
def matches?(string)
|
24
|
+
string.start_with?(@prefix)
|
25
|
+
end
|
26
|
+
|
27
|
+
def apply(string)
|
28
|
+
rest = string[@trim_range]
|
29
|
+
leading_slash = rest.slice!(LEADING_SLASH_REGEX)
|
30
|
+
|
31
|
+
segments = rest.split(SEGMENT_SEPARATOR)
|
32
|
+
segments.map! { |s| @terms.include?(s) ? s : SEGMENT_PLACEHOLDER }
|
33
|
+
transformed_suffix = collapse_adjacent_placeholder_segments(segments)
|
34
|
+
|
35
|
+
"#{@prefix}#{leading_slash}#{transformed_suffix}"
|
36
|
+
end
|
37
|
+
|
38
|
+
def collapse_adjacent_placeholder_segments(segments)
|
39
|
+
joined = segments.join(SEGMENT_SEPARATOR)
|
40
|
+
joined.gsub!(ADJACENT_PLACEHOLDERS_REGEX, ADJACENT_PLACEHOLDERS_REPLACEMENT)
|
41
|
+
joined
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,257 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module OneApm
|
4
|
+
module Agent
|
5
|
+
SUPPORTED_VERSIONS =
|
6
|
+
{
|
7
|
+
# Rubies
|
8
|
+
:mri =>
|
9
|
+
{
|
10
|
+
:type => :ruby,
|
11
|
+
:name => "MRI",
|
12
|
+
:supported => ["1.8.7", "1.9.2", "1.9.3", "2.0.0", "~> 2.1.0", "~> 2.2.0" ],
|
13
|
+
:deprecated => ["1.8.6"],
|
14
|
+
:url => "https://www.ruby-lang.org",
|
15
|
+
:feed => "https://www.ruby-lang.org/en/feeds/news.rss",
|
16
|
+
:notes => [
|
17
|
+
"1.8.7 includes support for Ruby Enterprise Edition (REE)",
|
18
|
+
"Last supported agent on 1.8.6 was 3.6.8.168"]
|
19
|
+
},
|
20
|
+
:jruby =>
|
21
|
+
{
|
22
|
+
:type => :ruby,
|
23
|
+
:name => "JRuby",
|
24
|
+
:supported => ["~> 1.6.0", "~> 1.7.0"],
|
25
|
+
:url => "http://jruby.org",
|
26
|
+
:feed => "http://jruby.org/atom.xml"
|
27
|
+
},
|
28
|
+
:rbx =>
|
29
|
+
{
|
30
|
+
:type => :ruby,
|
31
|
+
:name => "Rubinius",
|
32
|
+
:supported => ["~> 2.2.1"],
|
33
|
+
:url => "http://rubini.us",
|
34
|
+
:feed => "http://rubini.us/feed/atom.xml"
|
35
|
+
},
|
36
|
+
|
37
|
+
# App servers
|
38
|
+
:passenger =>
|
39
|
+
{
|
40
|
+
:type => :app_server,
|
41
|
+
:supported => ["~>2.2", "~>3.0", "~>4.0"],
|
42
|
+
:url => "http://www.phusionpassenger.com/",
|
43
|
+
:feed => "http://rubygems.org/gems/passenger/versions.atom"
|
44
|
+
},
|
45
|
+
:thin =>
|
46
|
+
{
|
47
|
+
:type => :app_server,
|
48
|
+
:supported => ["~>1.0"],
|
49
|
+
:url => "http://code.macournoyer.com/thin/",
|
50
|
+
:feed => "http://rubygems.org/gems/thin/versions.atom"
|
51
|
+
},
|
52
|
+
:unicorn =>
|
53
|
+
{
|
54
|
+
:type => :app_server,
|
55
|
+
:supported => ["~>4.0"],
|
56
|
+
:deprecated => ["~>1.0", "~>2.0", "~>3.0"],
|
57
|
+
:url => "http://unicorn.bogomips.org/",
|
58
|
+
:feed => "http://rubygems.org/gems/unicorn/versions.atom"
|
59
|
+
},
|
60
|
+
:puma =>
|
61
|
+
{
|
62
|
+
:type => :app_server,
|
63
|
+
:supported => ["~>2.0"],
|
64
|
+
:deprecated => ["~>1.0"],
|
65
|
+
:url => "http://puma.io/",
|
66
|
+
:feed => "http://rubygems.org/gems/puma/versions.atom"
|
67
|
+
},
|
68
|
+
:rainbows =>
|
69
|
+
{
|
70
|
+
:type => :app_server,
|
71
|
+
:name => "rainbows!",
|
72
|
+
:experimental=> ["4.5.0"],
|
73
|
+
:url => "http://rainbows.rubyforge.org/",
|
74
|
+
:feed => "http://rubygems.org/gems/rainbows/versions.atom"
|
75
|
+
},
|
76
|
+
:webrick =>
|
77
|
+
{
|
78
|
+
:type => :app_server,
|
79
|
+
:notes => [ "Supported for all agent-supported versions of Ruby" ]
|
80
|
+
},
|
81
|
+
|
82
|
+
# Web frameworks
|
83
|
+
:rails =>
|
84
|
+
{
|
85
|
+
:type => :web,
|
86
|
+
:supported => ["~>2.1.0", "~>2.2.0", "~>2.3.0", "~3.0.0", "~>3.1.0", "~>3.2.0", "~>4.0.0", "~>4.1.0", "~>4.2.0"],
|
87
|
+
:deprecated => ["~>2.0.0"],
|
88
|
+
:url => "https://rubygems.org/gems/rails",
|
89
|
+
:feed => "https://rubygems.org/gems/rails/versions.atom",
|
90
|
+
:notes => ["Last supported agent for 2.0.x was 3.6.8.168"]
|
91
|
+
},
|
92
|
+
:sinatra =>
|
93
|
+
{
|
94
|
+
:type => :web,
|
95
|
+
:supported => ["~>1.2.0", "~>1.3.0", "~>1.4.0"],
|
96
|
+
:url => "https://rubygems.org/gems/sinatra",
|
97
|
+
:feed => "https://rubygems.org/gems/sinatra/versions.atom"
|
98
|
+
},
|
99
|
+
:padrino =>
|
100
|
+
{
|
101
|
+
:type => :web,
|
102
|
+
:supported => ["~>0.10"],
|
103
|
+
:url => "https://rubygems.org/gems/padrino",
|
104
|
+
:feed => "https://rubygems.org/gems/padrino/versions.atom"
|
105
|
+
},
|
106
|
+
:rack =>
|
107
|
+
{
|
108
|
+
:type => :web,
|
109
|
+
:supported => [">= 1.1.0"],
|
110
|
+
:deprecated => ["~>1.0.0"],
|
111
|
+
:url => "https://rubygems.org/gems/rack",
|
112
|
+
:feed => "https://rubygems.org/gems/rack/versions.atom"
|
113
|
+
},
|
114
|
+
:grape =>
|
115
|
+
{
|
116
|
+
:type => :web,
|
117
|
+
:supported => [">= 0.2.0"],
|
118
|
+
:url => "https://rubygems.org/gems/grape",
|
119
|
+
:feed => "https://rubygems.org/gems/grape/versions.atom"
|
120
|
+
},
|
121
|
+
|
122
|
+
# Database
|
123
|
+
:activerecord =>
|
124
|
+
{
|
125
|
+
:type => :database,
|
126
|
+
:supported => ["~>2.1.0", "~>2.2.0", "~>2.3.0", "~3.0.0", "~>3.1.0", "~>3.2.0", "~>4.0.0"],
|
127
|
+
:deprecated => ["~>2.0.0"],
|
128
|
+
:url => "https://rubygems.org/gems/activerecord",
|
129
|
+
:feed => "https://rubygems.org/gems/activerecord/versions.atom",
|
130
|
+
:notes => ["Last supported agent for 2.0.x was 3.6.8.168"]
|
131
|
+
},
|
132
|
+
:datamapper =>
|
133
|
+
{
|
134
|
+
:type => :database,
|
135
|
+
:supported => ["~>1.0"],
|
136
|
+
:url => "https://rubygems.org/gems/datamapper",
|
137
|
+
:feed => "https://rubygems.org/gems/datamapper/versions.atom"
|
138
|
+
},
|
139
|
+
:sequel =>
|
140
|
+
{
|
141
|
+
:type => :database,
|
142
|
+
:supported => ["~>3.37", "~>4.0"],
|
143
|
+
:url => "https://rubygems.org/gems/sequel",
|
144
|
+
:feed => "https://rubygems.org/gems/sequel/versions.atom"
|
145
|
+
},
|
146
|
+
:mongo =>
|
147
|
+
{
|
148
|
+
:type => :database,
|
149
|
+
:supported => ["~>1.8.0", "~>1.9.0", "~>1.10.0"],
|
150
|
+
:url => "https://rubygems.org/gems/mongo",
|
151
|
+
:feed => "https://rubygems.org/gems/mongo/versions.atom"
|
152
|
+
},
|
153
|
+
|
154
|
+
# Background Jobs
|
155
|
+
:resque =>
|
156
|
+
{
|
157
|
+
:type => :background,
|
158
|
+
:supported => ["~>1.23.0"],
|
159
|
+
:deprecated => ["~>1.22.0"],
|
160
|
+
:experimental=> [">= 2.0"],
|
161
|
+
:url => "https://rubygems.org/gems/resque",
|
162
|
+
:feed => "https://rubygems.org/gems/resque/versions.atom"
|
163
|
+
},
|
164
|
+
:sidekiq =>
|
165
|
+
{
|
166
|
+
:type => :background,
|
167
|
+
:supported => ["~>2.8"],
|
168
|
+
:url => "https://rubygems.org/gems/sidekiq",
|
169
|
+
:feed => "https://rubygems.org/gems/sidekiq/versions.atom"
|
170
|
+
},
|
171
|
+
:delayed_job =>
|
172
|
+
{
|
173
|
+
:type => :background,
|
174
|
+
:supported => ["~>2.0", "~>3.0", "~>4.0"],
|
175
|
+
:url => "https://rubygems.org/gems/delayed_job",
|
176
|
+
:feed => "https://rubygems.org/gems/delayed_job/versions.atom"
|
177
|
+
},
|
178
|
+
|
179
|
+
# HTTP Clients
|
180
|
+
:curb =>
|
181
|
+
{
|
182
|
+
:type => :http,
|
183
|
+
:supported => [ ">= 0.8.1" ],
|
184
|
+
:url => "https://rubygems.org/gems/curb",
|
185
|
+
:feed => "https://rubygems.org/gems/curb/versions.atom"
|
186
|
+
},
|
187
|
+
:excon =>
|
188
|
+
{
|
189
|
+
:type => :http,
|
190
|
+
:supported => [ ">= 0.10.1" ],
|
191
|
+
:url => "https://rubygems.org/gems/excon",
|
192
|
+
:feed => "https://rubygems.org/gems/excon/versions.atom"
|
193
|
+
},
|
194
|
+
:httpclient =>
|
195
|
+
{
|
196
|
+
:type => :http,
|
197
|
+
:supported => [ ">= 2.2.0"],
|
198
|
+
:url => "https://rubygems.org/gems/httpclient",
|
199
|
+
:feed => "https://rubygems.org/gems/httpclient/versions.atom"
|
200
|
+
},
|
201
|
+
:typhoeus =>
|
202
|
+
{
|
203
|
+
:type => :http,
|
204
|
+
:supported => [ ">= 0.5.3"],
|
205
|
+
:url => "https://rubygems.org/gems/typhoeus",
|
206
|
+
:feed => "https://rubygems.org/gems/typhoeus/versions.atom"
|
207
|
+
},
|
208
|
+
:net_http =>
|
209
|
+
{
|
210
|
+
:type => :http,
|
211
|
+
:name => "Net::HTTP",
|
212
|
+
:notes => [
|
213
|
+
"Supported for all agent-supported versions of Ruby.",
|
214
|
+
"For more information on supported HTTP clients see http://docs.oneapm.com/docs/ruby/ruby-http-clients."]
|
215
|
+
},
|
216
|
+
|
217
|
+
# Other
|
218
|
+
:sunspot =>
|
219
|
+
{
|
220
|
+
:type => :other,
|
221
|
+
:url => "https://rubygems.org/gems/sunspot",
|
222
|
+
:feed => "https://rubygems.org/gems/sunspot/versions.atom"
|
223
|
+
},
|
224
|
+
:acts_as_solr =>
|
225
|
+
{
|
226
|
+
:type => :other,
|
227
|
+
:url => "https://rubygems.org/gems/acts_as_solr",
|
228
|
+
:feed => "https://rubygems.org/gems/acts_as_solr/versions.atom"
|
229
|
+
},
|
230
|
+
:dalli =>
|
231
|
+
{
|
232
|
+
:type => :other,
|
233
|
+
:url => "https://rubygems.org/gems/dalli",
|
234
|
+
:feed => "https://rubygems.org/gems/dalli/versions.atom"
|
235
|
+
},
|
236
|
+
:'memcache-client' =>
|
237
|
+
{
|
238
|
+
:type => :other,
|
239
|
+
:url => "https://rubygems.org/gems/memcache-client",
|
240
|
+
:feed => "https://rubygems.org/gems/memcache-client/versions.atom"
|
241
|
+
},
|
242
|
+
:authlogic =>
|
243
|
+
{
|
244
|
+
:type => :other,
|
245
|
+
:url => "https://rubygems.org/gems/authlogic",
|
246
|
+
:feed => "https://rubygems.org/gems/authlogic/versions.atom"
|
247
|
+
},
|
248
|
+
:activemerchant =>
|
249
|
+
{
|
250
|
+
:type => :other,
|
251
|
+
:supported => [ ">= 1.25.0"],
|
252
|
+
:url => "https://rubygems.org/gems/activemerchant",
|
253
|
+
:feed => "https://rubygems.org/gems/activemerchant/versions.atom"
|
254
|
+
},
|
255
|
+
}
|
256
|
+
end
|
257
|
+
end
|