oneapm_rpm 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (160) hide show
  1. checksums.yaml +4 -4
  2. data/lib/one_apm/agent.rb +185 -192
  3. data/lib/one_apm/agent/agent/connect.rb +17 -17
  4. data/lib/one_apm/agent/agent/container_data_manager.rb +14 -14
  5. data/lib/one_apm/agent/agent/forkable_dispatcher_functions.rb +6 -35
  6. data/lib/one_apm/agent/agent/helpers.rb +6 -17
  7. data/lib/one_apm/agent/agent/start.rb +27 -27
  8. data/lib/one_apm/agent/agent/start_worker_thread.rb +19 -51
  9. data/lib/one_apm/agent/busy_calculator.rb +8 -34
  10. data/lib/one_apm/agent/cross_app/cross_app_monitor.rb +10 -10
  11. data/lib/one_apm/agent/cross_app/cross_app_tracing.rb +14 -14
  12. data/lib/one_apm/agent/database.rb +8 -35
  13. data/lib/one_apm/agent/database/active_record_helper.rb +1 -1
  14. data/lib/one_apm/agent/datastores.rb +2 -109
  15. data/lib/one_apm/agent/datastores/metric_helper.rb +1 -1
  16. data/lib/one_apm/agent/datastores/mongo/metric_translator.rb +3 -3
  17. data/lib/one_apm/agent/datastores/mongo/statement_formatter.rb +2 -2
  18. data/lib/one_apm/agent/harvester.rb +3 -6
  19. data/lib/one_apm/agent/inbound_request_monitor.rb +2 -2
  20. data/lib/one_apm/agent/javascript_instrumentor.rb +28 -28
  21. data/lib/one_apm/agent/sampler.rb +1 -1
  22. data/lib/one_apm/agent/sampler_collection.rb +6 -9
  23. data/lib/one_apm/agent/samplers/cpu_sampler.rb +4 -4
  24. data/lib/one_apm/agent/samplers/delayed_job_sampler.rb +5 -5
  25. data/lib/one_apm/agent/samplers/memory_sampler.rb +5 -5
  26. data/lib/one_apm/agent/samplers/object_sampler.rb +1 -1
  27. data/lib/one_apm/agent/samplers/vm_sampler.rb +6 -6
  28. data/lib/one_apm/agent/synthetics_monitor.rb +2 -2
  29. data/lib/one_apm/agent/threading/agent_thread.rb +6 -6
  30. data/lib/one_apm/agent/threading/backtrace_service.rb +9 -9
  31. data/lib/one_apm/agent/threading/thread_profile.rb +3 -3
  32. data/lib/one_apm/collector/collector/helper.rb +10 -10
  33. data/lib/one_apm/collector/collector/http_connection.rb +14 -14
  34. data/lib/one_apm/collector/collector/server_methods.rb +12 -12
  35. data/lib/one_apm/collector/collector_service.rb +8 -8
  36. data/lib/one_apm/collector/commands/thread_profiler_session.rb +4 -4
  37. data/lib/one_apm/collector/commands/xray_session.rb +1 -1
  38. data/lib/one_apm/collector/commands/xray_session_collection.rb +10 -10
  39. data/lib/one_apm/collector/containers/agent_command_router.rb +7 -7
  40. data/lib/one_apm/collector/containers/custom_event_aggregator.rb +6 -6
  41. data/lib/one_apm/collector/containers/error_collector.rb +16 -16
  42. data/lib/one_apm/collector/containers/sql_sampler.rb +8 -11
  43. data/lib/one_apm/collector/containers/transaction_event_aggregator.rb +15 -15
  44. data/lib/one_apm/collector/containers/transaction_sampler.rb +14 -16
  45. data/lib/one_apm/{agent/pipe/pipe_service.rb → collector/forked_process_service.rb} +3 -3
  46. data/lib/one_apm/collector/stats_engine/gc_profiler.rb +3 -3
  47. data/lib/one_apm/collector/stats_engine/metric_stats.rb +4 -4
  48. data/lib/one_apm/collector/stats_engine/stats_hash.rb +2 -2
  49. data/lib/one_apm/configuration.rb +16 -16
  50. data/lib/one_apm/configuration/autostart.rb +4 -4
  51. data/lib/one_apm/configuration/default_source.rb +9 -9
  52. data/lib/one_apm/configuration/environment_source.rb +1 -1
  53. data/lib/one_apm/configuration/high_security_source.rb +1 -1
  54. data/lib/one_apm/configuration/yaml_source.rb +7 -7
  55. data/lib/one_apm/errors/noticed_error.rb +2 -2
  56. data/lib/one_apm/frameworks/external.rb +2 -0
  57. data/lib/one_apm/frameworks/rails.rb +8 -18
  58. data/lib/one_apm/frameworks/rails3.rb +1 -0
  59. data/lib/one_apm/frameworks/rails4.rb +2 -6
  60. data/lib/one_apm/frameworks/ruby.rb +7 -2
  61. data/lib/one_apm/frameworks/sinatra.rb +1 -2
  62. data/lib/one_apm/inst/3rd/active_merchant.rb +1 -1
  63. data/lib/one_apm/inst/3rd/acts_as_solr.rb +2 -2
  64. data/lib/one_apm/inst/3rd/authlogic.rb +1 -1
  65. data/lib/one_apm/inst/3rd/sunspot.rb +1 -1
  66. data/lib/one_apm/inst/background_job/active_job.rb +1 -1
  67. data/lib/one_apm/inst/background_job/delayed_job.rb +4 -4
  68. data/lib/one_apm/inst/background_job/event_machine_standalone.rb +2 -2
  69. data/lib/one_apm/inst/background_job/resque.rb +11 -11
  70. data/lib/one_apm/inst/background_job/sidekiq.rb +5 -5
  71. data/lib/one_apm/inst/dispatcher/passenger.rb +4 -4
  72. data/lib/one_apm/inst/dispatcher/puma.rb +23 -0
  73. data/lib/one_apm/inst/dispatcher/rainbows.rb +2 -2
  74. data/lib/one_apm/inst/framework/grape.rb +4 -4
  75. data/lib/one_apm/inst/framework/padrino.rb +2 -2
  76. data/lib/one_apm/inst/framework/sinatra.rb +9 -9
  77. data/lib/one_apm/inst/framework/sinatra/transaction_namer.rb +1 -1
  78. data/lib/one_apm/inst/http_clients/curb.rb +6 -6
  79. data/lib/one_apm/inst/http_clients/excon.rb +4 -4
  80. data/lib/one_apm/inst/http_clients/excon/middleware.rb +3 -3
  81. data/lib/one_apm/inst/http_clients/httpclient.rb +1 -1
  82. data/lib/one_apm/inst/http_clients/net.rb +2 -2
  83. data/lib/one_apm/inst/http_clients/typhoeus.rb +2 -2
  84. data/lib/one_apm/inst/nosql/memcache.rb +7 -7
  85. data/lib/one_apm/inst/nosql/mongo.rb +6 -6
  86. data/lib/one_apm/inst/nosql/mongo_moped.rb +2 -2
  87. data/lib/one_apm/inst/nosql/redis.rb +3 -3
  88. data/lib/one_apm/inst/orm/active_record.rb +4 -4
  89. data/lib/one_apm/inst/orm/active_record_4.rb +2 -2
  90. data/lib/one_apm/inst/orm/sequel.rb +4 -4
  91. data/lib/one_apm/inst/rack.rb +3 -3
  92. data/lib/one_apm/inst/rack/rack_builder.rb +4 -4
  93. data/lib/one_apm/inst/rails/action_controller.rb +7 -7
  94. data/lib/one_apm/inst/rails/action_web_service.rb +1 -1
  95. data/lib/one_apm/inst/rails/errors.rb +1 -1
  96. data/lib/one_apm/inst/rails3/action_controller.rb +6 -6
  97. data/lib/one_apm/inst/rails3/errors.rb +1 -1
  98. data/lib/one_apm/inst/rails4/action_controller.rb +1 -1
  99. data/lib/one_apm/inst/rails4/action_controller_subscriber.rb +4 -4
  100. data/lib/one_apm/inst/rails4/action_view.rb +2 -2
  101. data/lib/one_apm/inst/rails4/action_view_subscriber.rb +4 -4
  102. data/lib/one_apm/inst/rails4/active_record_subscriber.rb +7 -7
  103. data/lib/one_apm/inst/rails4/errors.rb +1 -1
  104. data/lib/one_apm/inst/rails_middleware.rb +2 -2
  105. data/lib/one_apm/inst/support/evented_subscriber.rb +2 -2
  106. data/lib/one_apm/inst/support/queue_time.rb +1 -1
  107. data/lib/one_apm/inst/transaction_base.rb +6 -6
  108. data/lib/one_apm/logger/agent_logger.rb +8 -8
  109. data/lib/one_apm/logger/audit_logger.rb +8 -8
  110. data/lib/one_apm/logger/memory_logger.rb +1 -1
  111. data/lib/one_apm/logger/null_logger.rb +1 -3
  112. data/lib/one_apm/manager.rb +249 -0
  113. data/lib/one_apm/metrics/metric_spec.rb +1 -1
  114. data/lib/one_apm/metrics/stats.rb +1 -1
  115. data/lib/one_apm/probe.rb +1 -1
  116. data/lib/one_apm/probe/framework_loader.rb +2 -2
  117. data/lib/one_apm/probe/instance_methods.rb +19 -19
  118. data/lib/one_apm/probe/instrumentation.rb +5 -5
  119. data/lib/one_apm/rack/browser_monitoring.rb +6 -6
  120. data/lib/one_apm/rack/middleware_hooks.rb +1 -1
  121. data/lib/one_apm/rack/middleware_tracing.rb +2 -2
  122. data/lib/one_apm/support/chained_call.rb +1 -1
  123. data/lib/one_apm/support/coerce.rb +1 -1
  124. data/lib/one_apm/support/collection_helper.rb +1 -1
  125. data/lib/one_apm/support/encoders.rb +1 -1
  126. data/lib/one_apm/support/environment_report.rb +10 -10
  127. data/lib/one_apm/{agent → support}/event/event_listener.rb +3 -3
  128. data/lib/one_apm/{agent → support}/event/event_loop.rb +8 -8
  129. data/lib/one_apm/{agent → support}/event/timer.rb +1 -1
  130. data/lib/one_apm/{agent → support}/event/worker_loop.rb +5 -19
  131. data/lib/one_apm/{agent/pipe/pipe_channel_manager.rb → support/forked_process_channel.rb} +13 -51
  132. data/lib/one_apm/support/json_marshaller.rb +6 -6
  133. data/lib/one_apm/support/json_wrapper.rb +2 -2
  134. data/lib/one_apm/support/language_support.rb +1 -1
  135. data/lib/one_apm/support/library_detection.rb +5 -5
  136. data/lib/one_apm/support/marshaller.rb +1 -1
  137. data/lib/one_apm/support/method_tracer.rb +12 -12
  138. data/lib/one_apm/support/method_tracer/helpers.rb +6 -6
  139. data/lib/one_apm/support/system_info.rb +2 -2
  140. data/lib/one_apm/support/traced_method_stack.rb +4 -4
  141. data/lib/one_apm/support/vm/monotonic_gc_profiler.rb +1 -1
  142. data/lib/one_apm/support/vm/mri_vm.rb +1 -1
  143. data/lib/one_apm/transaction.rb +3 -3
  144. data/lib/one_apm/transaction/class_methods.rb +3 -3
  145. data/lib/one_apm/transaction/instance_helpers.rb +3 -3
  146. data/lib/one_apm/transaction/sample_buffer/synthetics_sample_buffer.rb +1 -1
  147. data/lib/one_apm/transaction/sample_buffer/xray_sample_buffer.rb +5 -5
  148. data/lib/one_apm/transaction/thread_local_access.rb +2 -2
  149. data/lib/one_apm/transaction/transaction_apdex.rb +2 -2
  150. data/lib/one_apm/transaction/transaction_finish_append.rb +1 -1
  151. data/lib/one_apm/transaction/transaction_jruby_functions.rb +2 -2
  152. data/lib/one_apm/transaction/transaction_name.rb +2 -2
  153. data/lib/one_apm/transaction/transaction_sample.rb +1 -1
  154. data/lib/one_apm/transaction/transaction_sample_builder.rb +7 -7
  155. data/lib/one_apm/transaction/transaction_state.rb +1 -1
  156. data/lib/one_apm/version.rb +1 -1
  157. data/lib/sequel/extensions/oneapm_instrumentation.rb +7 -7
  158. data/oneapm.yml +6 -7
  159. metadata +10 -9
  160. data/lib/one_apm/agent/agent.rb +0 -283
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4759f9e2a49b073a72ef050065da0b3169782a50
4
- data.tar.gz: e06c21dc7767a5c5ee0b2371eb367cb3286b1231
3
+ metadata.gz: 2549e99a228ebc5192a1fa035a985afc7bac2ace
4
+ data.tar.gz: d52a272c4e52693f21c973c51f8fa3cdd72081c3
5
5
  SHA512:
6
- metadata.gz: 523b7b03147cb529a70bf76da7bdd1761621460169d4eeb74d972db31134eae5ab7d0430d693cd7e51d4699d66b71615de5b9a42b81ca45c8d7d4a23a3d2ddc1
7
- data.tar.gz: 60387048069ae8167d4f237070131090558fb44104b47af2e5e86597f44eb2dcbef8223da1516fc37c13684e2da1e8a827a86a26765c2ee4ed8c0b9656c39d44
6
+ metadata.gz: 786db6b474c198e117000456a33c46538d7a0cf343082556361b04a2b1db2f442f65e2e5f4cbaa7d88772741ee10989f9193bb90ad5c7e2a4493a01a571c380e
7
+ data.tar.gz: 1d3c27a588fa01c9606cb79ac4120b862b1e453be7e1422eda17fef366fe84362c4f8e92a05312be7e40a9d0cd90bfb05c717303d708c688f89c313ff6653126
data/lib/one_apm/agent.rb CHANGED
@@ -1,245 +1,238 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'one_apm/probe'
3
+ require 'socket'
4
+ require 'net/https'
5
+ require 'net/http'
6
+ require 'logger'
7
+ require 'zlib'
8
+ require 'stringio'
4
9
 
5
- require 'one_apm/support/collection_helper'
6
- require 'one_apm/support/timer_lib'
7
- require 'one_apm/support/json_wrapper'
8
- require 'one_apm/support/chained_call'
9
- require 'one_apm/support/rules_engine'
10
- require 'one_apm/support/http_clients/uri_util'
11
- require 'one_apm/support/system_info'
10
+ require 'one_apm/support/event_buffer/sampled_buffer'
11
+ require 'one_apm/configuration/autostart'
12
+ require 'one_apm/agent/harvester'
12
13
 
13
- require 'one_apm/metrics/metric_spec'
14
- require 'one_apm/metrics/metric_data'
15
- require 'one_apm/metrics/stats'
14
+ require 'one_apm/support/hostname'
15
+ require 'one_apm/support/environment_report'
16
16
 
17
- require 'one_apm/errors/noticed_error'
18
- require 'one_apm/errors/agent_errors'
19
-
20
- require 'one_apm/agent/agent'
21
- require 'one_apm/agent/cross_app/cross_app_monitor'
22
- require 'one_apm/support/method_tracer'
23
- require 'one_apm/agent/event/worker_loop'
24
- require 'one_apm/agent/event/event_loop'
25
- require 'one_apm/transaction/transaction_sample'
17
+ require 'one_apm/configuration'
26
18
 
27
- require 'one_apm/collector/containers/stats_engine'
28
- require 'one_apm/collector/containers/transaction_sampler'
29
- require 'one_apm/collector/containers/sql_sampler'
30
- require 'one_apm/collector/containers/error_collector'
19
+ require 'one_apm/collector/collector_service'
20
+ require 'one_apm/collector/containers/agent_command_router'
21
+ require 'one_apm/collector/containers/transaction_event_aggregator'
22
+ require 'one_apm/collector/containers/custom_event_aggregator'
23
+ require 'one_apm/collector/containers/utilization_data'
31
24
 
32
- require 'one_apm/agent/busy_calculator'
25
+ require 'one_apm/collector/forked_process_service'
33
26
  require 'one_apm/agent/database'
34
- require 'one_apm/agent/pipe/pipe_channel_manager'
35
-
36
- require 'one_apm/configuration'
37
-
38
- require 'one_apm/agent/sampler'
39
- require 'one_apm/agent/samplers/cpu_sampler'
40
- require 'one_apm/agent/samplers/memory_sampler'
41
- require 'one_apm/agent/samplers/object_sampler'
42
- require 'one_apm/agent/samplers/delayed_job_sampler'
43
- require 'one_apm/agent/samplers/vm_sampler'
27
+ require 'one_apm/support/event/event_listener'
28
+ require 'one_apm/agent/cross_app/cross_app_monitor'
29
+ require 'one_apm/agent/synthetics_monitor'
30
+ require 'one_apm/support/event_buffer/synthetics_event_buffer'
31
+ require 'one_apm/agent/sampler_collection'
32
+ require 'one_apm/agent/javascript_instrumentor'
33
+ require 'one_apm/support/vm/monotonic_gc_profiler'
34
+
35
+ require 'one_apm/agent/agent/start'
36
+ require 'one_apm/agent/agent/start_worker_thread'
37
+ require 'one_apm/agent/agent/connect'
38
+ require 'one_apm/agent/agent/helpers'
39
+ require 'one_apm/agent/agent/container_data_manager'
40
+ require 'one_apm/agent/agent/forkable_dispatcher_functions'
44
41
 
45
42
  module OneApm
46
43
  module Agent
47
- extend self
44
+ class Agent
45
+ include OneApm::Agent::Agent::Start
46
+ include OneApm::Agent::Agent::StartWorkerThread
47
+ include OneApm::Agent::Agent::Connect
48
+ include OneApm::Agent::Agent::Helpers
49
+ include OneApm::Agent::Agent::ContainerDataManager
50
+ include OneApm::Agent::Agent::ForkableDispatcherFunctions
48
51
 
49
- @agent = nil
52
+ attr_reader :record_sql
53
+ attr_reader :javascript_instrumentor
50
54
 
51
- def instance
52
- return @agent if @agent
53
- OneApm::Agent.logger.warn("Agent unavailable as it hasn't been started.")
54
- OneApm::Agent.logger.warn(caller.join("\n"))
55
- nil
56
- end
55
+ attr_reader :cross_process_id
56
+ attr_reader :cross_app_encoding_bytes
57
+ attr_reader :cross_app_monitor
57
58
 
58
- def instance=(new_instance)
59
- @agent = new_instance
60
- end
59
+ attr_accessor :service
61
60
 
62
- def start(options = {})
63
- raise "Options must be a hash" unless Hash === options
64
- OneApm::Agent::PipeChannelManager.listener.start if options[:start_channel_listener]
65
- OneApm::Probe.init({:agent_enabled => true, :sync_startup => true}.merge(options))
66
- end
61
+ attr_reader :events
67
62
 
68
- alias_method :manual_start, :start
63
+ attr_reader :transaction_rules
69
64
 
70
- def shutdown(options={})
71
- instance.shutdown(options) if instance
72
- end
65
+ attr_reader :harvester
66
+ attr_reader :harvest_samplers
67
+ attr_reader :harvest_lock
73
68
 
74
- def restart
75
- OneApm::Agent.shutdown
76
- OneApm::Agent.instance.harvest_samplers.clear
77
- OneApm::Agent.instance.instance_variable_set(:@connect_state, :pending)
78
- OneApm::Agent.instance.instance_variable_set(:@worker_thread, nil)
79
- OneApm::Agent.instance.harvester.instance_variable_set(:@starting_pid, nil)
80
- OneApm::Probe.init({:agent_enabled => true, :sync_startup => true})
81
- end
82
-
83
- def logger
84
- @logger || StartupLogger.instance
85
- end
69
+ attr_reader :monotonic_gc_profiler
86
70
 
87
- def logger=(log)
88
- @logger = log
89
- end
71
+ def self.instance
72
+ @instance ||= self.new
73
+ end
90
74
 
91
- def config
92
- @config ||= OneApm::Configuration::Manager.new
93
- end
75
+ def self.config
76
+ OneApm::Manager.config
77
+ end
94
78
 
95
- def reset_config
96
- @config.reset_to_defaults
97
- end
79
+ def initialize
80
+ start_service
98
81
 
99
- def revert_to_default_configuration
100
- @config.remove_config_type(:manual)
101
- @config.remove_config_type(:server)
102
- end
82
+ @events = OneApm::Support::EventListener.new
103
83
 
104
- def record_metric(metric_name, value) #THREAD_LOCAL_ACCESS
105
- value_to_store = value
106
- value_to_store = OneApm::Metrics::Stats.create_from_hash(value) if value.is_a?(Hash)
107
- instance.stats_engine.tl_record_unscoped_metrics(metric_name, value_to_store)
108
- end
84
+ init_containers @events
85
+ OneApm::Agent::SyntheticsMonitor.new @events
109
86
 
110
- def increment_metric(metric_name, amount = 1) #THREAD_LOCAL_ACCESS
111
- instance.stats_engine.tl_record_unscoped_metrics(metric_name) do |stats|
112
- stats.increment_count(amount)
113
- end
114
- end
115
-
116
- def drop_buffered_data
117
- instance.drop_buffered_data
118
- end
87
+ @cross_app_monitor = OneApm::Agent::CrossAppMonitor.new(@events)
88
+ @transaction_rules = OneApm::Support::RulesEngine.new
89
+ @harvest_samplers = OneApm::Agent::SamplerCollection.new(@events)
90
+ @monotonic_gc_profiler = OneApm::Support::VM::MonotonicGCProfiler.new
91
+ @javascript_instrumentor = OneApm::Agent::JavascriptInstrumentor.new(@events)
119
92
 
120
- def add_instrumentation(file_pattern)
121
- OneApm::Probe.instance.add_instrumentation file_pattern
122
- end
93
+ @harvester = OneApm::Agent::Harvester.new(@events)
94
+ @after_fork_lock = Mutex.new
123
95
 
124
- def set_sql_obfuscator(type = :replace, &block)
125
- OneApm::Agent::Database.set_sql_obfuscator(type, &block)
126
- end
96
+ @connect_state = :pending
97
+ @connect_attempts = 0
98
+ @environment_report = nil
127
99
 
128
- def disable_sql_recording
129
- state = instance.set_record_sql(false)
130
- begin
131
- yield
132
- ensure
133
- instance.set_record_sql(state)
100
+ @harvest_lock = Mutex.new
134
101
  end
135
- end
136
102
 
137
- def disable_transaction_tracing
138
- state = instance.set_record_tt(false)
139
- begin
140
- yield
141
- ensure
142
- instance.set_record_tt(state)
103
+ def probe
104
+ OneApm::Probe.instance
143
105
  end
144
- end
145
-
146
- def ignore_transaction
147
- txn = OneApm::Transaction.tl_current
148
- txn.ignore! if txn
149
- end
150
106
 
151
- def ignore_apdex
152
- txn = OneApm::Transaction.tl_current
153
- txn.ignore_apdex! if txn
154
- end
107
+ def start_service
108
+ if OneApm::Manager.config[:monitor_mode] && !@service
109
+ @service = OneApm::Collector::CollectorService.new
110
+ end
111
+ end
155
112
 
156
- def ignore_enduser
157
- txn = OneApm::Transaction.tl_current
158
- txn.ignore_enduser! if txn
159
- end
113
+ def start
114
+ return unless agent_should_start?
160
115
 
161
- def disable_all_tracing
162
- instance.push_trace_execution_flag(false)
163
- yield
164
- ensure
165
- instance.pop_trace_execution_flag
166
- end
116
+ log_startup
117
+ check_config_and_start_agent
118
+ log_version_and_pid
167
119
 
168
- def record_custom_event(event_type, event_attrs)
169
- if instance && OneApm::Agent.config[:'custom_insights_events.enabled']
170
- instance.custom_event_aggregator.record(event_type, event_attrs)
120
+ events.subscribe(:finished_configuring) do
121
+ log_ignore_url_regexes
122
+ end
171
123
  end
172
- nil
173
- end
174
124
 
175
- def tl_is_execution_traced?
176
- OneApm::TransactionState.tl_get.is_execution_traced?
177
- end
125
+ def shutdown(options = {})
126
+ return if not started?
127
+ OneApm::Manager.logger.info "Starting Agent shutdown"
178
128
 
179
- def tl_is_transaction_traced?
180
- OneApm::TransactionState.tl_get.is_transaction_traced?
181
- end
129
+ stop_event_loop
130
+ untraced_graceful_disconnect
131
+ OneApm::Manager.revert_to_default_configuration
182
132
 
183
- def tl_is_sql_recorded?
184
- OneApm::TransactionState.tl_get.is_sql_recorded?
185
- end
186
-
187
- def ignore_error_filter(&block)
188
- if block
189
- OneApm::Collector::ErrorCollector.ignore_error_filter = block
190
- else
191
- OneApm::Collector::ErrorCollector.ignore_error_filter
133
+ @started = nil
134
+ OneApm::Probe.reset
192
135
  end
193
- end
194
136
 
195
- def notice_error(exception, options = {})
196
- Transaction.notice_error(exception, options)
197
- nil
198
- end
199
-
200
- def notice_sql(sql, metric, config, elapsed_time, state, &explainer)
201
- instance.transaction_sampler.notice_sql(sql, config, elapsed_time, state, &explainer)
202
- instance.sql_sampler.notice_sql(sql, metric, config, elapsed_time, state, &explainer)
203
- end
137
+ def agent_should_start?
138
+ return false if already_started? || disabled? || defer_for_background_jobs?
204
139
 
205
- def add_custom_parameters(params) #THREAD_LOCAL_ACCESS
206
- if params.is_a? Hash
207
- txn = Transaction.tl_current
208
- txn.add_custom_parameters(params) if txn
209
- else
210
- ::OneApm::Agent.logger.warn("Bad argument passed to #add_custom_parameters. Expected Hash but got #{params.class}")
140
+ unless app_name_configured?
141
+ OneApm::Manager.logger.error "No application name configured in #{probe.env} environment"
142
+ false
143
+ else
144
+ true
145
+ end
211
146
  end
212
- end
213
147
 
214
- def set_transaction_name(name, options={})
215
- Transaction.set_overriding_transaction_name(name, options[:category])
216
- end
148
+ def connect(options={})
149
+ opts = {
150
+ :keep_retrying => OneApm::Manager.config[:keep_retrying],
151
+ :force_reconnect => OneApm::Manager.config[:force_reconnect]
152
+ }.merge(options)
153
+
154
+ return unless should_connect?(opts[:force_reconnect])
155
+
156
+ OneApm::Manager.logger.debug "Connecting Process to OneApm: #$0"
157
+ query_server_for_configuration
158
+ @connected_pid = Process.pid
159
+ @connect_state = :connected
160
+ rescue OneApm::ForceDisconnectException => e
161
+ handle_force_disconnect(e)
162
+ rescue OneApm::LicenseException => e
163
+ handle_license_error(e)
164
+ rescue OneApm::UnrecoverableAgentException => e
165
+ handle_unrecoverable_agent_error(e)
166
+ rescue StandardError, Timeout::Error, OneApm::ServerConnectionException => e
167
+ log_error(e)
168
+ if opts[:keep_retrying]
169
+ note_connect_failure
170
+ OneApm::Manager.logger.info "Will re-attempt in #{connect_retry_period} seconds"
171
+ sleep connect_retry_period
172
+ retry
173
+ else
174
+ disconnect
175
+ end
176
+ rescue Exception => e
177
+ OneApm::Manager.logger.error "Exception of unexpected type during Agent#connect():", e
178
+
179
+ raise
180
+ end
217
181
 
218
- def get_transaction_name #THREAD_LOCAL_ACCESS
219
- txn = Transaction.tl_current
220
- if txn
221
- txn.best_name.sub(Regexp.new("\\A#{Regexp.escape(OneApm::TransactionNamer.prefix_for_category(txn))}"), '')
182
+ def graceful_disconnect
183
+ if connected?
184
+ begin
185
+ @service.request_timeout = 10
186
+
187
+ @events.notify(:before_shutdown)
188
+ transmit_data
189
+ transmit_event_data
190
+ transmit_utilization_data if OneApm::Manager.config[:collect_utilization]
191
+
192
+ if @connected_pid == $$ && !@service.kind_of?(OneApm::Collector::CollectorService)
193
+ OneApm::Manager.logger.debug "Sending OneApm service agent run shutdown message"
194
+ @service.shutdown(Time.now.to_f)
195
+ else
196
+ OneApm::Manager.logger.debug "This agent connected from parent process #{@connected_pid}--not sending shutdown"
197
+ end
198
+ OneApm::Manager.logger.debug "Graceful disconnect complete"
199
+ rescue Timeout::Error, StandardError => e
200
+ OneApm::Manager.logger.debug "Error when disconnecting #{e.class.name}: #{e.message}"
201
+ end
202
+ else
203
+ OneApm::Manager.logger.debug "Bypassing graceful disconnect - agent not connected"
204
+ end
222
205
  end
223
- end
224
206
 
225
- def subscribe(event_type, &handler)
226
- instance.events.subscribe( event_type, &handler )
207
+ def untraced_graceful_disconnect
208
+ OneApm::Manager.disable_all_tracing do
209
+ graceful_disconnect
210
+ end
211
+ rescue => e
212
+ OneApm::Manager.logger.error e
213
+ end
227
214
  end
228
215
 
229
- def notify(event_type, *args)
230
- instance.events.notify( event_type, *args )
231
- rescue
232
- OneApm::Agent.logger.debug "Ignoring exception during %p event notification" % [event_type]
233
- end
216
+ class ShimAgent < OneApm::Agent::Agent
217
+ def self.instance
218
+ @instance ||= self.new
219
+ end
234
220
 
235
- def browser_timing_header
236
- instance.javascript_instrumentor.browser_timing_header
237
- end
221
+ def initialize
222
+ super
223
+ @stats_engine.extend OneApm::Collector::StatsEngine::Shim
224
+ @transaction_sampler.extend OneApm::Collector::TransactionSampler::Shim
225
+ @sql_sampler.extend OneApm::Collector::SqlSampler::Shim
226
+ @error_collector.extend OneApm::Collector::ErrorCollector::Shim
227
+ end
238
228
 
239
- def require_test_helper
240
- path = File.join(__FILE__, '..', '..', '..', 'test', 'agent_helper')
241
- require File.expand_path(path)
229
+ def after_fork *args; end
230
+ def start *args; end
231
+ def shutdown *args; end
232
+ def merge_data_for_endpoint *args; end
233
+ def push_trace_execution_flag *args; end
234
+ def pop_trace_execution_flag *args; end
235
+ def browser_timing_header; "" end
242
236
  end
243
-
244
237
  end
245
238
  end
@@ -46,7 +46,7 @@ module OneApm
46
46
  # to tell the user what happened, since this is not an error
47
47
  # we can handle gracefully.
48
48
  def log_error(error)
49
- ::OneApm::Agent.logger.error "Error establishing connection with OneApm Service at #{@service.server}:", error
49
+ OneApm::Manager.logger.error "Error establishing connection with OneApm Service at #{@service.server}:", error
50
50
  end
51
51
 
52
52
  # When the server sends us an error with the license key, we
@@ -57,14 +57,14 @@ module OneApm
57
57
  # no longer try to connect to the server, saving the
58
58
  # application and the server load
59
59
  def handle_license_error(error)
60
- ::OneApm::Agent.logger.error( \
60
+ OneApm::Manager.logger.error( \
61
61
  error.message, \
62
62
  "Visit oneapm.com to obtain a valid license key, or to upgrade your account.")
63
63
  disconnect
64
64
  end
65
65
 
66
66
  def handle_unrecoverable_agent_error(error)
67
- ::OneApm::Agent.logger.error(error.message)
67
+ OneApm::Manager.logger.error(error.message)
68
68
  disconnect
69
69
  shutdown
70
70
  end
@@ -79,7 +79,7 @@ module OneApm
79
79
  # require calls in Rails environments, so this method should only
80
80
  # be called synchronously from on the main thread.
81
81
  def environment_for_connect
82
- Agent.config[:send_environment_info] ? Array(EnvironmentReport.new) : []
82
+ OneApm::Manager.config[:send_environment_info] ? Array(EnvironmentReport.new) : []
83
83
  end
84
84
 
85
85
  # We've seen objects in the environment report (Rails.env in
@@ -98,20 +98,20 @@ module OneApm
98
98
  {
99
99
  :pid => $$,
100
100
  :host => local_host,
101
- :app_name => Agent.config.app_names,
101
+ :app_name => OneApm::Manager.config.app_names,
102
102
  :language => 'ruby',
103
- :labels => Agent.config.parsed_labels,
103
+ :labels => OneApm::Manager.config.parsed_labels,
104
104
  :agent_version => OneApm::VERSION::STRING,
105
105
  :environment => @environment_report,
106
- :settings => Agent.config.to_collector_hash,
107
- :high_security => Agent.config[:high_security],
106
+ :settings => OneApm::Manager.config.to_collector_hash,
107
+ :high_security => OneApm::Manager.config[:high_security],
108
108
  :identifier => "ruby:#{local_host}"
109
109
  }
110
110
  end
111
111
 
112
112
  # apdex_f is always 4 times the apdex_t
113
113
  def apdex_f
114
- (4 * Agent.config[:apdex_t]).to_f
114
+ (4 * OneApm::Manager.config[:apdex_t]).to_f
115
115
  end
116
116
 
117
117
  # Sets the collector host and connects to the server, then
@@ -137,16 +137,16 @@ module OneApm
137
137
 
138
138
  @service.agent_id = config_data['agent_run_id'] if @service
139
139
 
140
- ::OneApm::Agent.logger.debug "Server provided config: #{config_data.inspect}"
141
- server_config = OneApm::Configuration::ServerSource.new(config_data, Agent.config)
142
- Agent.config.replace_or_add_config(server_config)
140
+ OneApm::Manager.logger.debug "Server provided config: #{config_data.inspect}"
141
+ server_config = OneApm::Configuration::ServerSource.new(config_data, OneApm::Manager.config)
142
+ OneApm::Manager.config.replace_or_add_config(server_config)
143
143
  log_connection!(config_data) if @service
144
144
 
145
145
  @transaction_rules = OneApm::Support::RulesEngine.create_transaction_rules(config_data)
146
146
  @stats_engine.metric_rules = OneApm::Support::RulesEngine.create_metric_rules(config_data)
147
147
 
148
148
  # If you're adding something else here to respond to the server-side config,
149
- # use Agent.instance.events.subscribe(:finished_configuring) callback instead!
149
+ # use OneApm::Manager.agent.events.subscribe(:finished_configuring) callback instead!
150
150
  end
151
151
 
152
152
  def local_host
@@ -156,9 +156,9 @@ module OneApm
156
156
  # Logs when we connect to the server, for debugging purposes
157
157
  # - makes sure we know if an agent has not connected
158
158
  def log_connection!(config_data)
159
- ::OneApm::Agent.logger.debug "Connected to OneApm Service at #{@service.collector.name}"
160
- ::OneApm::Agent.logger.debug "Agent Run = #{@service.agent_id}."
161
- ::OneApm::Agent.logger.debug "Connection data = #{config_data.inspect}"
159
+ OneApm::Manager.logger.debug "Connected to OneApm Service at #{@service.collector.name}"
160
+ OneApm::Manager.logger.debug "Agent Run = #{@service.agent_id}."
161
+ OneApm::Manager.logger.debug "Connection data = #{config_data.inspect}"
162
162
  if config_data['messages'] && config_data['messages'].any?
163
163
  log_collector_messages(config_data['messages'])
164
164
  end
@@ -166,7 +166,7 @@ module OneApm
166
166
 
167
167
  def log_collector_messages(messages)
168
168
  messages.each do |message|
169
- ::OneApm::Agent.logger.send(message['level'].downcase, message['message'])
169
+ OneApm::Manager.logger.send(message['level'].downcase, message['message'])
170
170
  end
171
171
  end
172
172
  end