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.
Files changed (234) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +30 -0
  3. data/.rubocop.yml +725 -0
  4. data/Gemfile +3 -0
  5. data/Guardfile +7 -0
  6. data/LICENSE +1 -0
  7. data/README.md +3 -0
  8. data/config/cert/cacert.pem +1177 -0
  9. data/config/database.yml +5 -0
  10. data/lib/initializers/goliath.rb +11 -0
  11. data/lib/initializers/other.rb +1 -0
  12. data/lib/initializers/rails.rb +15 -0
  13. data/lib/one_apm/agent.rb +253 -0
  14. data/lib/one_apm/agent/agent.rb +283 -0
  15. data/lib/one_apm/agent/agent/connect.rb +175 -0
  16. data/lib/one_apm/agent/agent/container_data_manager.rb +218 -0
  17. data/lib/one_apm/agent/agent/forkable_dispatcher_functions.rb +96 -0
  18. data/lib/one_apm/agent/agent/helpers.rb +45 -0
  19. data/lib/one_apm/agent/agent/start.rb +226 -0
  20. data/lib/one_apm/agent/agent/start_worker_thread.rb +148 -0
  21. data/lib/one_apm/agent/busy_calculator.rb +115 -0
  22. data/lib/one_apm/agent/cross_app/cross_app_monitor.rb +181 -0
  23. data/lib/one_apm/agent/cross_app/cross_app_tracing.rb +336 -0
  24. data/lib/one_apm/agent/database.rb +308 -0
  25. data/lib/one_apm/agent/database/active_record_helper.rb +80 -0
  26. data/lib/one_apm/agent/database/obfuscation_helpers.rb +76 -0
  27. data/lib/one_apm/agent/database/obfuscator.rb +78 -0
  28. data/lib/one_apm/agent/database/postgres_explain_obfuscator.rb +45 -0
  29. data/lib/one_apm/agent/datastores.rb +175 -0
  30. data/lib/one_apm/agent/datastores/metric_helper.rb +83 -0
  31. data/lib/one_apm/agent/datastores/mongo.rb +27 -0
  32. data/lib/one_apm/agent/datastores/mongo/metric_translator.rb +189 -0
  33. data/lib/one_apm/agent/datastores/mongo/obfuscator.rb +37 -0
  34. data/lib/one_apm/agent/datastores/mongo/statement_formatter.rb +51 -0
  35. data/lib/one_apm/agent/event/event_listener.rb +40 -0
  36. data/lib/one_apm/agent/event/event_loop.rb +191 -0
  37. data/lib/one_apm/agent/event/worker_loop.rb +97 -0
  38. data/lib/one_apm/agent/harvester.rb +48 -0
  39. data/lib/one_apm/agent/inbound_request_monitor.rb +30 -0
  40. data/lib/one_apm/agent/javascript_instrumentor.rb +186 -0
  41. data/lib/one_apm/agent/pipe/pipe_channel_manager.rb +275 -0
  42. data/lib/one_apm/agent/pipe/pipe_service.rb +81 -0
  43. data/lib/one_apm/agent/sampler.rb +55 -0
  44. data/lib/one_apm/agent/sampler_collection.rb +65 -0
  45. data/lib/one_apm/agent/samplers/cpu_sampler.rb +49 -0
  46. data/lib/one_apm/agent/samplers/delayed_job_sampler.rb +109 -0
  47. data/lib/one_apm/agent/samplers/memory_sampler.rb +144 -0
  48. data/lib/one_apm/agent/samplers/object_sampler.rb +22 -0
  49. data/lib/one_apm/agent/samplers/vm_sampler.rb +124 -0
  50. data/lib/one_apm/agent/synthetics_monitor.rb +48 -0
  51. data/lib/one_apm/agent/threading/agent_thread.rb +74 -0
  52. data/lib/one_apm/agent/threading/backtrace_node.rb +133 -0
  53. data/lib/one_apm/agent/threading/backtrace_service.rb +259 -0
  54. data/lib/one_apm/agent/threading/thread_profile.rb +155 -0
  55. data/lib/one_apm/collector/collector/helper.rb +139 -0
  56. data/lib/one_apm/collector/collector/http_connection.rb +254 -0
  57. data/lib/one_apm/collector/collector/server_methods.rb +71 -0
  58. data/lib/one_apm/collector/collector_service.rb +123 -0
  59. data/lib/one_apm/collector/commands/agent_command.rb +17 -0
  60. data/lib/one_apm/collector/commands/thread_profiler_session.rb +108 -0
  61. data/lib/one_apm/collector/commands/xray_session.rb +53 -0
  62. data/lib/one_apm/collector/commands/xray_session_collection.rb +156 -0
  63. data/lib/one_apm/collector/containers/agent_command_router.rb +153 -0
  64. data/lib/one_apm/collector/containers/custom_event_aggregator.rb +94 -0
  65. data/lib/one_apm/collector/containers/error_collector.rb +349 -0
  66. data/lib/one_apm/collector/containers/sql_sampler.rb +331 -0
  67. data/lib/one_apm/collector/containers/stats_engine.rb +34 -0
  68. data/lib/one_apm/collector/containers/transaction_event_aggregator.rb +249 -0
  69. data/lib/one_apm/collector/containers/transaction_sampler.rb +352 -0
  70. data/lib/one_apm/collector/containers/utilization_data.rb +36 -0
  71. data/lib/one_apm/collector/stats_engine/gc_profiler.rb +106 -0
  72. data/lib/one_apm/collector/stats_engine/metric_stats.rb +243 -0
  73. data/lib/one_apm/collector/stats_engine/stats_hash.rb +105 -0
  74. data/lib/one_apm/configuration.rb +429 -0
  75. data/lib/one_apm/configuration/autostart.rb +41 -0
  76. data/lib/one_apm/configuration/default_source.rb +1026 -0
  77. data/lib/one_apm/configuration/environment_source.rb +113 -0
  78. data/lib/one_apm/configuration/high_security_source.rb +56 -0
  79. data/lib/one_apm/configuration/manual_source.rb +13 -0
  80. data/lib/one_apm/configuration/server_source.rb +60 -0
  81. data/lib/one_apm/configuration/yaml_source.rb +134 -0
  82. data/lib/one_apm/errors/agent_errors.rb +26 -0
  83. data/lib/one_apm/errors/internal_agent_error.rb +16 -0
  84. data/lib/one_apm/errors/noticed_error.rb +79 -0
  85. data/lib/one_apm/frameworks/external.rb +15 -0
  86. data/lib/one_apm/frameworks/rails.rb +103 -0
  87. data/lib/one_apm/frameworks/rails3.rb +37 -0
  88. data/lib/one_apm/frameworks/rails4.rb +21 -0
  89. data/lib/one_apm/frameworks/ruby.rb +21 -0
  90. data/lib/one_apm/frameworks/sinatra.rb +12 -0
  91. data/lib/one_apm/inst/3rd/active_merchant.rb +35 -0
  92. data/lib/one_apm/inst/3rd/acts_as_solr.rb +70 -0
  93. data/lib/one_apm/inst/3rd/authlogic.rb +23 -0
  94. data/lib/one_apm/inst/3rd/sunspot.rb +31 -0
  95. data/lib/one_apm/inst/background_job/active_job.rb +88 -0
  96. data/lib/one_apm/inst/background_job/delayed_job.rb +52 -0
  97. data/lib/one_apm/inst/background_job/delayed_job_injection.rb +8 -0
  98. data/lib/one_apm/inst/background_job/resque.rb +107 -0
  99. data/lib/one_apm/inst/background_job/sidekiq.rb +64 -0
  100. data/lib/one_apm/inst/dispatcher/passenger.rb +25 -0
  101. data/lib/one_apm/inst/dispatcher/rainbows.rb +23 -0
  102. data/lib/one_apm/inst/framework/grape.rb +94 -0
  103. data/lib/one_apm/inst/framework/padrino.rb +30 -0
  104. data/lib/one_apm/inst/framework/sinatra.rb +185 -0
  105. data/lib/one_apm/inst/framework/sinatra/ignorer.rb +50 -0
  106. data/lib/one_apm/inst/framework/sinatra/transaction_namer.rb +54 -0
  107. data/lib/one_apm/inst/http_clients/curb.rb +189 -0
  108. data/lib/one_apm/inst/http_clients/excon.rb +70 -0
  109. data/lib/one_apm/inst/http_clients/excon/connection.rb +31 -0
  110. data/lib/one_apm/inst/http_clients/excon/middleware.rb +55 -0
  111. data/lib/one_apm/inst/http_clients/httpclient.rb +44 -0
  112. data/lib/one_apm/inst/http_clients/net.rb +34 -0
  113. data/lib/one_apm/inst/http_clients/typhoeus.rb +76 -0
  114. data/lib/one_apm/inst/nosql/memcache.rb +134 -0
  115. data/lib/one_apm/inst/nosql/mongo.rb +126 -0
  116. data/lib/one_apm/inst/nosql/mongo_moped.rb +85 -0
  117. data/lib/one_apm/inst/nosql/redis.rb +83 -0
  118. data/lib/one_apm/inst/orm/active_record.rb +99 -0
  119. data/lib/one_apm/inst/orm/active_record_4.rb +28 -0
  120. data/lib/one_apm/inst/orm/data_mapper.rb +180 -0
  121. data/lib/one_apm/inst/orm/sequel.rb +47 -0
  122. data/lib/one_apm/inst/rack.rb +38 -0
  123. data/lib/one_apm/inst/rack/rack.rb +44 -0
  124. data/lib/one_apm/inst/rack/rack_builder.rb +51 -0
  125. data/lib/one_apm/inst/rails/action_controller.rb +118 -0
  126. data/lib/one_apm/inst/rails/action_web_service.rb +44 -0
  127. data/lib/one_apm/inst/rails/errors.rb +43 -0
  128. data/lib/one_apm/inst/rails3/action_controller.rb +172 -0
  129. data/lib/one_apm/inst/rails3/errors.rb +43 -0
  130. data/lib/one_apm/inst/rails4/action_controller.rb +27 -0
  131. data/lib/one_apm/inst/rails4/action_controller_subscriber.rb +121 -0
  132. data/lib/one_apm/inst/rails4/action_view.rb +23 -0
  133. data/lib/one_apm/inst/rails4/action_view_subscriber.rb +93 -0
  134. data/lib/one_apm/inst/rails4/active_record_subscriber.rb +96 -0
  135. data/lib/one_apm/inst/rails4/errors.rb +42 -0
  136. data/lib/one_apm/inst/rails_middleware.rb +40 -0
  137. data/lib/one_apm/inst/support/evented_subscriber.rb +98 -0
  138. data/lib/one_apm/inst/support/ignore_actions.rb +39 -0
  139. data/lib/one_apm/inst/support/queue_time.rb +76 -0
  140. data/lib/one_apm/inst/transaction_base.rb +405 -0
  141. data/lib/one_apm/logger/agent_logger.rb +206 -0
  142. data/lib/one_apm/logger/audit_logger.rb +78 -0
  143. data/lib/one_apm/logger/memory_logger.rb +50 -0
  144. data/lib/one_apm/logger/null_logger.rb +19 -0
  145. data/lib/one_apm/metrics/metric_data.rb +72 -0
  146. data/lib/one_apm/metrics/metric_spec.rb +82 -0
  147. data/lib/one_apm/metrics/stats.rb +173 -0
  148. data/lib/one_apm/probe.rb +16 -0
  149. data/lib/one_apm/probe/framework_loader.rb +53 -0
  150. data/lib/one_apm/probe/instance_methods.rb +105 -0
  151. data/lib/one_apm/probe/instrumentation.rb +60 -0
  152. data/lib/one_apm/rack/browser_monitoring.rb +144 -0
  153. data/lib/one_apm/rack/middleware_base.rb +27 -0
  154. data/lib/one_apm/rack/middleware_hooks.rb +17 -0
  155. data/lib/one_apm/rack/middleware_tracing.rb +81 -0
  156. data/lib/one_apm/rack/middleware_wrapper.rb +86 -0
  157. data/lib/one_apm/support/chained_call.rb +15 -0
  158. data/lib/one_apm/support/coerce.rb +81 -0
  159. data/lib/one_apm/support/collection_helper.rb +79 -0
  160. data/lib/one_apm/support/dotted_hash.rb +45 -0
  161. data/lib/one_apm/support/encoders.rb +34 -0
  162. data/lib/one_apm/support/environment_report.rb +127 -0
  163. data/lib/one_apm/support/event_buffer.rb +82 -0
  164. data/lib/one_apm/support/event_buffer/sampled_buffer.rb +45 -0
  165. data/lib/one_apm/support/event_buffer/sized_buffer.rb +21 -0
  166. data/lib/one_apm/support/event_buffer/synthetics_event_buffer.rb +40 -0
  167. data/lib/one_apm/support/helper.rb +49 -0
  168. data/lib/one_apm/support/hostname.rb +13 -0
  169. data/lib/one_apm/support/http_clients/curb_wrappers.rb +65 -0
  170. data/lib/one_apm/support/http_clients/excon_wrappers.rb +63 -0
  171. data/lib/one_apm/support/http_clients/httpclient_wrappers.rb +61 -0
  172. data/lib/one_apm/support/http_clients/net_http_wrappers.rb +48 -0
  173. data/lib/one_apm/support/http_clients/typhoeus_wrappers.rb +73 -0
  174. data/lib/one_apm/support/http_clients/uri_util.rb +39 -0
  175. data/lib/one_apm/support/json_marshaller.rb +68 -0
  176. data/lib/one_apm/support/json_wrapper.rb +130 -0
  177. data/lib/one_apm/support/language_support.rb +142 -0
  178. data/lib/one_apm/support/library_detection.rb +119 -0
  179. data/lib/one_apm/support/local_environment.rb +196 -0
  180. data/lib/one_apm/support/marshaller.rb +62 -0
  181. data/lib/one_apm/support/method_tracer.rb +334 -0
  182. data/lib/one_apm/support/method_tracer/helpers.rb +92 -0
  183. data/lib/one_apm/support/method_tracer/traced_method_stack.rb +103 -0
  184. data/lib/one_apm/support/obfuscator.rb +47 -0
  185. data/lib/one_apm/support/okjson.rb +601 -0
  186. data/lib/one_apm/support/parameter_filtering.rb +35 -0
  187. data/lib/one_apm/support/rules_engine.rb +56 -0
  188. data/lib/one_apm/support/rules_engine/replacement_rule.rb +80 -0
  189. data/lib/one_apm/support/rules_engine/segment_terms_rule.rb +46 -0
  190. data/lib/one_apm/support/server.rb +11 -0
  191. data/lib/one_apm/support/supported_versions.rb +257 -0
  192. data/lib/one_apm/support/system_info.rb +211 -0
  193. data/lib/one_apm/support/timer_lib.rb +29 -0
  194. data/lib/one_apm/support/version_number.rb +51 -0
  195. data/lib/one_apm/support/vm.rb +30 -0
  196. data/lib/one_apm/support/vm/jruby_vm.rb +38 -0
  197. data/lib/one_apm/support/vm/monotonic_gc_profiler.rb +43 -0
  198. data/lib/one_apm/support/vm/mri_vm.rb +85 -0
  199. data/lib/one_apm/support/vm/rubinius_vm.rb +129 -0
  200. data/lib/one_apm/support/vm/snapshot.rb +18 -0
  201. data/lib/one_apm/transaction.rb +336 -0
  202. data/lib/one_apm/transaction/class_methods.rb +132 -0
  203. data/lib/one_apm/transaction/instance_helpers.rb +82 -0
  204. data/lib/one_apm/transaction/metric_constants.rb +42 -0
  205. data/lib/one_apm/transaction/sample_buffer/force_persist_sample_buffer.rb +21 -0
  206. data/lib/one_apm/transaction/sample_buffer/slowest_sample_buffer.rb +21 -0
  207. data/lib/one_apm/transaction/sample_buffer/synthetics_sample_buffer.rb +21 -0
  208. data/lib/one_apm/transaction/sample_buffer/transaction_sample_buffer.rb +101 -0
  209. data/lib/one_apm/transaction/sample_buffer/xray_sample_buffer.rb +60 -0
  210. data/lib/one_apm/transaction/segment.rb +193 -0
  211. data/lib/one_apm/transaction/segment_summary.rb +51 -0
  212. data/lib/one_apm/transaction/thread_local_access.rb +73 -0
  213. data/lib/one_apm/transaction/transaction_analysis.rb +78 -0
  214. data/lib/one_apm/transaction/transaction_apdex.rb +20 -0
  215. data/lib/one_apm/transaction/transaction_cpu.rb +22 -0
  216. data/lib/one_apm/transaction/transaction_finish_append.rb +67 -0
  217. data/lib/one_apm/transaction/transaction_ignore.rb +33 -0
  218. data/lib/one_apm/transaction/transaction_jruby_functions.rb +40 -0
  219. data/lib/one_apm/transaction/transaction_metrics.rb +53 -0
  220. data/lib/one_apm/transaction/transaction_name.rb +90 -0
  221. data/lib/one_apm/transaction/transaction_namer.rb +49 -0
  222. data/lib/one_apm/transaction/transaction_sample.rb +204 -0
  223. data/lib/one_apm/transaction/transaction_sample_builder.rb +168 -0
  224. data/lib/one_apm/transaction/transaction_state.rb +149 -0
  225. data/lib/one_apm/transaction/transaction_summary.rb +28 -0
  226. data/lib/one_apm/transaction/transaction_synthetics.rb +40 -0
  227. data/lib/one_apm/transaction/transaction_timings.rb +54 -0
  228. data/lib/one_apm/version.rb +13 -0
  229. data/lib/oneapm_rpm.rb +16 -0
  230. data/lib/sequel/extensions/oneapm_instrumentation.rb +84 -0
  231. data/lib/sequel/plugins/oneapm_instrumentation.rb +66 -0
  232. data/oneapm.yml +135 -0
  233. data/oneapm_rpm.gemspec +58 -0
  234. 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,11 @@
1
+ module OneApm
2
+ module Support
3
+
4
+ class Server < Struct.new :name, :port, :ip
5
+ def to_s; "#{name}:#{port}"; end
6
+ end
7
+
8
+ ProxyServer = Struct.new :name, :port, :user, :password
9
+
10
+ end
11
+ 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