oneapm_rpm 1.1.2 → 1.1.3
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 +4 -4
- data/lib/one_apm/agent.rb +185 -192
- data/lib/one_apm/agent/agent/connect.rb +17 -17
- data/lib/one_apm/agent/agent/container_data_manager.rb +14 -14
- data/lib/one_apm/agent/agent/forkable_dispatcher_functions.rb +6 -35
- data/lib/one_apm/agent/agent/helpers.rb +6 -17
- data/lib/one_apm/agent/agent/start.rb +27 -27
- data/lib/one_apm/agent/agent/start_worker_thread.rb +19 -51
- data/lib/one_apm/agent/busy_calculator.rb +8 -34
- data/lib/one_apm/agent/cross_app/cross_app_monitor.rb +10 -10
- data/lib/one_apm/agent/cross_app/cross_app_tracing.rb +14 -14
- data/lib/one_apm/agent/database.rb +8 -35
- data/lib/one_apm/agent/database/active_record_helper.rb +1 -1
- data/lib/one_apm/agent/datastores.rb +2 -109
- data/lib/one_apm/agent/datastores/metric_helper.rb +1 -1
- data/lib/one_apm/agent/datastores/mongo/metric_translator.rb +3 -3
- data/lib/one_apm/agent/datastores/mongo/statement_formatter.rb +2 -2
- data/lib/one_apm/agent/harvester.rb +3 -6
- data/lib/one_apm/agent/inbound_request_monitor.rb +2 -2
- data/lib/one_apm/agent/javascript_instrumentor.rb +28 -28
- data/lib/one_apm/agent/sampler.rb +1 -1
- data/lib/one_apm/agent/sampler_collection.rb +6 -9
- data/lib/one_apm/agent/samplers/cpu_sampler.rb +4 -4
- data/lib/one_apm/agent/samplers/delayed_job_sampler.rb +5 -5
- data/lib/one_apm/agent/samplers/memory_sampler.rb +5 -5
- data/lib/one_apm/agent/samplers/object_sampler.rb +1 -1
- data/lib/one_apm/agent/samplers/vm_sampler.rb +6 -6
- data/lib/one_apm/agent/synthetics_monitor.rb +2 -2
- data/lib/one_apm/agent/threading/agent_thread.rb +6 -6
- data/lib/one_apm/agent/threading/backtrace_service.rb +9 -9
- data/lib/one_apm/agent/threading/thread_profile.rb +3 -3
- data/lib/one_apm/collector/collector/helper.rb +10 -10
- data/lib/one_apm/collector/collector/http_connection.rb +14 -14
- data/lib/one_apm/collector/collector/server_methods.rb +12 -12
- data/lib/one_apm/collector/collector_service.rb +8 -8
- data/lib/one_apm/collector/commands/thread_profiler_session.rb +4 -4
- data/lib/one_apm/collector/commands/xray_session.rb +1 -1
- data/lib/one_apm/collector/commands/xray_session_collection.rb +10 -10
- data/lib/one_apm/collector/containers/agent_command_router.rb +7 -7
- data/lib/one_apm/collector/containers/custom_event_aggregator.rb +6 -6
- data/lib/one_apm/collector/containers/error_collector.rb +16 -16
- data/lib/one_apm/collector/containers/sql_sampler.rb +8 -11
- data/lib/one_apm/collector/containers/transaction_event_aggregator.rb +15 -15
- data/lib/one_apm/collector/containers/transaction_sampler.rb +14 -16
- data/lib/one_apm/{agent/pipe/pipe_service.rb → collector/forked_process_service.rb} +3 -3
- data/lib/one_apm/collector/stats_engine/gc_profiler.rb +3 -3
- data/lib/one_apm/collector/stats_engine/metric_stats.rb +4 -4
- data/lib/one_apm/collector/stats_engine/stats_hash.rb +2 -2
- data/lib/one_apm/configuration.rb +16 -16
- data/lib/one_apm/configuration/autostart.rb +4 -4
- data/lib/one_apm/configuration/default_source.rb +9 -9
- data/lib/one_apm/configuration/environment_source.rb +1 -1
- data/lib/one_apm/configuration/high_security_source.rb +1 -1
- data/lib/one_apm/configuration/yaml_source.rb +7 -7
- data/lib/one_apm/errors/noticed_error.rb +2 -2
- data/lib/one_apm/frameworks/external.rb +2 -0
- data/lib/one_apm/frameworks/rails.rb +8 -18
- data/lib/one_apm/frameworks/rails3.rb +1 -0
- data/lib/one_apm/frameworks/rails4.rb +2 -6
- data/lib/one_apm/frameworks/ruby.rb +7 -2
- data/lib/one_apm/frameworks/sinatra.rb +1 -2
- data/lib/one_apm/inst/3rd/active_merchant.rb +1 -1
- data/lib/one_apm/inst/3rd/acts_as_solr.rb +2 -2
- data/lib/one_apm/inst/3rd/authlogic.rb +1 -1
- data/lib/one_apm/inst/3rd/sunspot.rb +1 -1
- data/lib/one_apm/inst/background_job/active_job.rb +1 -1
- data/lib/one_apm/inst/background_job/delayed_job.rb +4 -4
- data/lib/one_apm/inst/background_job/event_machine_standalone.rb +2 -2
- data/lib/one_apm/inst/background_job/resque.rb +11 -11
- data/lib/one_apm/inst/background_job/sidekiq.rb +5 -5
- data/lib/one_apm/inst/dispatcher/passenger.rb +4 -4
- data/lib/one_apm/inst/dispatcher/puma.rb +23 -0
- data/lib/one_apm/inst/dispatcher/rainbows.rb +2 -2
- data/lib/one_apm/inst/framework/grape.rb +4 -4
- data/lib/one_apm/inst/framework/padrino.rb +2 -2
- data/lib/one_apm/inst/framework/sinatra.rb +9 -9
- data/lib/one_apm/inst/framework/sinatra/transaction_namer.rb +1 -1
- data/lib/one_apm/inst/http_clients/curb.rb +6 -6
- data/lib/one_apm/inst/http_clients/excon.rb +4 -4
- data/lib/one_apm/inst/http_clients/excon/middleware.rb +3 -3
- data/lib/one_apm/inst/http_clients/httpclient.rb +1 -1
- data/lib/one_apm/inst/http_clients/net.rb +2 -2
- data/lib/one_apm/inst/http_clients/typhoeus.rb +2 -2
- data/lib/one_apm/inst/nosql/memcache.rb +7 -7
- data/lib/one_apm/inst/nosql/mongo.rb +6 -6
- data/lib/one_apm/inst/nosql/mongo_moped.rb +2 -2
- data/lib/one_apm/inst/nosql/redis.rb +3 -3
- data/lib/one_apm/inst/orm/active_record.rb +4 -4
- data/lib/one_apm/inst/orm/active_record_4.rb +2 -2
- data/lib/one_apm/inst/orm/sequel.rb +4 -4
- data/lib/one_apm/inst/rack.rb +3 -3
- data/lib/one_apm/inst/rack/rack_builder.rb +4 -4
- data/lib/one_apm/inst/rails/action_controller.rb +7 -7
- data/lib/one_apm/inst/rails/action_web_service.rb +1 -1
- data/lib/one_apm/inst/rails/errors.rb +1 -1
- data/lib/one_apm/inst/rails3/action_controller.rb +6 -6
- data/lib/one_apm/inst/rails3/errors.rb +1 -1
- data/lib/one_apm/inst/rails4/action_controller.rb +1 -1
- data/lib/one_apm/inst/rails4/action_controller_subscriber.rb +4 -4
- data/lib/one_apm/inst/rails4/action_view.rb +2 -2
- data/lib/one_apm/inst/rails4/action_view_subscriber.rb +4 -4
- data/lib/one_apm/inst/rails4/active_record_subscriber.rb +7 -7
- data/lib/one_apm/inst/rails4/errors.rb +1 -1
- data/lib/one_apm/inst/rails_middleware.rb +2 -2
- data/lib/one_apm/inst/support/evented_subscriber.rb +2 -2
- data/lib/one_apm/inst/support/queue_time.rb +1 -1
- data/lib/one_apm/inst/transaction_base.rb +6 -6
- data/lib/one_apm/logger/agent_logger.rb +8 -8
- data/lib/one_apm/logger/audit_logger.rb +8 -8
- data/lib/one_apm/logger/memory_logger.rb +1 -1
- data/lib/one_apm/logger/null_logger.rb +1 -3
- data/lib/one_apm/manager.rb +249 -0
- data/lib/one_apm/metrics/metric_spec.rb +1 -1
- data/lib/one_apm/metrics/stats.rb +1 -1
- data/lib/one_apm/probe.rb +1 -1
- data/lib/one_apm/probe/framework_loader.rb +2 -2
- data/lib/one_apm/probe/instance_methods.rb +19 -19
- data/lib/one_apm/probe/instrumentation.rb +5 -5
- data/lib/one_apm/rack/browser_monitoring.rb +6 -6
- data/lib/one_apm/rack/middleware_hooks.rb +1 -1
- data/lib/one_apm/rack/middleware_tracing.rb +2 -2
- data/lib/one_apm/support/chained_call.rb +1 -1
- data/lib/one_apm/support/coerce.rb +1 -1
- data/lib/one_apm/support/collection_helper.rb +1 -1
- data/lib/one_apm/support/encoders.rb +1 -1
- data/lib/one_apm/support/environment_report.rb +10 -10
- data/lib/one_apm/{agent → support}/event/event_listener.rb +3 -3
- data/lib/one_apm/{agent → support}/event/event_loop.rb +8 -8
- data/lib/one_apm/{agent → support}/event/timer.rb +1 -1
- data/lib/one_apm/{agent → support}/event/worker_loop.rb +5 -19
- data/lib/one_apm/{agent/pipe/pipe_channel_manager.rb → support/forked_process_channel.rb} +13 -51
- data/lib/one_apm/support/json_marshaller.rb +6 -6
- data/lib/one_apm/support/json_wrapper.rb +2 -2
- data/lib/one_apm/support/language_support.rb +1 -1
- data/lib/one_apm/support/library_detection.rb +5 -5
- data/lib/one_apm/support/marshaller.rb +1 -1
- data/lib/one_apm/support/method_tracer.rb +12 -12
- data/lib/one_apm/support/method_tracer/helpers.rb +6 -6
- data/lib/one_apm/support/system_info.rb +2 -2
- data/lib/one_apm/support/traced_method_stack.rb +4 -4
- data/lib/one_apm/support/vm/monotonic_gc_profiler.rb +1 -1
- data/lib/one_apm/support/vm/mri_vm.rb +1 -1
- data/lib/one_apm/transaction.rb +3 -3
- data/lib/one_apm/transaction/class_methods.rb +3 -3
- data/lib/one_apm/transaction/instance_helpers.rb +3 -3
- data/lib/one_apm/transaction/sample_buffer/synthetics_sample_buffer.rb +1 -1
- data/lib/one_apm/transaction/sample_buffer/xray_sample_buffer.rb +5 -5
- data/lib/one_apm/transaction/thread_local_access.rb +2 -2
- data/lib/one_apm/transaction/transaction_apdex.rb +2 -2
- data/lib/one_apm/transaction/transaction_finish_append.rb +1 -1
- data/lib/one_apm/transaction/transaction_jruby_functions.rb +2 -2
- data/lib/one_apm/transaction/transaction_name.rb +2 -2
- data/lib/one_apm/transaction/transaction_sample.rb +1 -1
- data/lib/one_apm/transaction/transaction_sample_builder.rb +7 -7
- data/lib/one_apm/transaction/transaction_state.rb +1 -1
- data/lib/one_apm/version.rb +1 -1
- data/lib/sequel/extensions/oneapm_instrumentation.rb +7 -7
- data/oneapm.yml +6 -7
- metadata +10 -9
- data/lib/one_apm/agent/agent.rb +0 -283
@@ -0,0 +1,249 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'one_apm/probe'
|
4
|
+
|
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'
|
12
|
+
|
13
|
+
require 'one_apm/metrics/metric_spec'
|
14
|
+
require 'one_apm/metrics/metric_data'
|
15
|
+
require 'one_apm/metrics/stats'
|
16
|
+
|
17
|
+
require 'one_apm/errors/noticed_error'
|
18
|
+
require 'one_apm/errors/agent_errors'
|
19
|
+
|
20
|
+
require 'one_apm/agent'
|
21
|
+
require 'one_apm/agent/cross_app/cross_app_monitor'
|
22
|
+
require 'one_apm/support/method_tracer'
|
23
|
+
require 'one_apm/support/event/worker_loop'
|
24
|
+
require 'one_apm/support/event/event_loop'
|
25
|
+
require 'one_apm/transaction/transaction_sample'
|
26
|
+
|
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'
|
31
|
+
|
32
|
+
require 'one_apm/agent/busy_calculator'
|
33
|
+
require 'one_apm/agent/database'
|
34
|
+
require 'one_apm/support/forked_process_channel'
|
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'
|
44
|
+
|
45
|
+
module OneApm
|
46
|
+
module Manager
|
47
|
+
extend self
|
48
|
+
|
49
|
+
@agent = nil
|
50
|
+
|
51
|
+
def agent
|
52
|
+
return @agent if @agent
|
53
|
+
OneApm::Manager.logger.warn("Agent unavailable as it hasn't been started.")
|
54
|
+
OneApm::Manager.logger.warn(caller.join("\n"))
|
55
|
+
nil
|
56
|
+
end
|
57
|
+
|
58
|
+
def agent=(new_agent)
|
59
|
+
@agent = new_agent
|
60
|
+
end
|
61
|
+
|
62
|
+
def start(options = {})
|
63
|
+
raise "Options must be a hash" unless Hash === options
|
64
|
+
OneApm::Support::ForkedProcessChannel.listener.start if options[:start_channel_listener]
|
65
|
+
OneApm::Probe.init({:agent_enabled => true, :sync_startup => true}.merge(options))
|
66
|
+
end
|
67
|
+
|
68
|
+
alias_method :manual_start, :start
|
69
|
+
|
70
|
+
def shutdown(options={})
|
71
|
+
agent.shutdown(options) if agent
|
72
|
+
end
|
73
|
+
|
74
|
+
def restart
|
75
|
+
shutdown
|
76
|
+
agent.harvest_samplers.clear
|
77
|
+
agent.agent_variable_set(:@connect_state, :pending)
|
78
|
+
agent.agent_variable_set(:@worker_thread, nil)
|
79
|
+
agent.harvester.agent_variable_set(:@starting_pid, nil)
|
80
|
+
OneApm::Probe.init({:agent_enabled => true, :sync_startup => true})
|
81
|
+
end
|
82
|
+
|
83
|
+
def logger
|
84
|
+
@logger || OneApm::Logger::StartupLogger.instance
|
85
|
+
end
|
86
|
+
|
87
|
+
def logger=(log)
|
88
|
+
@logger = log
|
89
|
+
end
|
90
|
+
|
91
|
+
def config
|
92
|
+
@config ||= OneApm::Configuration::Manager.new
|
93
|
+
end
|
94
|
+
|
95
|
+
def reset_config
|
96
|
+
@config.reset_to_defaults
|
97
|
+
end
|
98
|
+
|
99
|
+
def revert_to_default_configuration
|
100
|
+
@config.remove_config_type(:manual)
|
101
|
+
@config.remove_config_type(:server)
|
102
|
+
end
|
103
|
+
|
104
|
+
def after_fork(options = {})
|
105
|
+
agent.after_fork(options)
|
106
|
+
end
|
107
|
+
|
108
|
+
def record_metric(metric_name, value)
|
109
|
+
value_to_store = value
|
110
|
+
value_to_store = OneApm::Metrics::Stats.create_from_hash(value) if value.is_a?(Hash)
|
111
|
+
agent.stats_engine.tl_record_unscoped_metrics(metric_name, value_to_store)
|
112
|
+
end
|
113
|
+
|
114
|
+
def increment_metric(metric_name, amount = 1)
|
115
|
+
agent.stats_engine.tl_record_unscoped_metrics(metric_name) do |stats|
|
116
|
+
stats.increment_count(amount)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def drop_buffered_data
|
121
|
+
agent.drop_buffered_data
|
122
|
+
end
|
123
|
+
|
124
|
+
def add_instrumentation(file_pattern)
|
125
|
+
OneApm::Probe.instance.add_instrumentation file_pattern
|
126
|
+
end
|
127
|
+
|
128
|
+
def set_sql_obfuscator(type = :replace, &block)
|
129
|
+
OneApm::Agent::Database.set_sql_obfuscator(type, &block)
|
130
|
+
end
|
131
|
+
|
132
|
+
def disable_sql_recording
|
133
|
+
state = agent.set_record_sql(false)
|
134
|
+
begin
|
135
|
+
yield
|
136
|
+
ensure
|
137
|
+
agent.set_record_sql(state)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def disable_transaction_tracing
|
142
|
+
state = agent.set_record_tt(false)
|
143
|
+
begin
|
144
|
+
yield
|
145
|
+
ensure
|
146
|
+
agent.set_record_tt(state)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def ignore_transaction
|
151
|
+
txn = OneApm::Transaction.tl_current
|
152
|
+
txn.ignore! if txn
|
153
|
+
end
|
154
|
+
|
155
|
+
def ignore_apdex
|
156
|
+
txn = OneApm::Transaction.tl_current
|
157
|
+
txn.ignore_apdex! if txn
|
158
|
+
end
|
159
|
+
|
160
|
+
def ignore_enduser
|
161
|
+
txn = OneApm::Transaction.tl_current
|
162
|
+
txn.ignore_enduser! if txn
|
163
|
+
end
|
164
|
+
|
165
|
+
def disable_all_tracing
|
166
|
+
agent.push_trace_execution_flag(false)
|
167
|
+
yield
|
168
|
+
ensure
|
169
|
+
agent.pop_trace_execution_flag
|
170
|
+
end
|
171
|
+
|
172
|
+
def record_custom_event(event_type, event_attrs)
|
173
|
+
if agent && OneApm::Manager.config[:'custom_insights_events.enabled']
|
174
|
+
agent.custom_event_aggregator.record(event_type, event_attrs)
|
175
|
+
end
|
176
|
+
nil
|
177
|
+
end
|
178
|
+
|
179
|
+
def tl_is_execution_traced?
|
180
|
+
OneApm::TransactionState.tl_get.is_execution_traced?
|
181
|
+
end
|
182
|
+
|
183
|
+
def tl_is_transaction_traced?
|
184
|
+
OneApm::TransactionState.tl_get.is_transaction_traced?
|
185
|
+
end
|
186
|
+
|
187
|
+
def tl_is_sql_recorded?
|
188
|
+
OneApm::TransactionState.tl_get.is_sql_recorded?
|
189
|
+
end
|
190
|
+
|
191
|
+
def ignore_error_filter(&block)
|
192
|
+
if block
|
193
|
+
OneApm::Collector::ErrorCollector.ignore_error_filter = block
|
194
|
+
else
|
195
|
+
OneApm::Collector::ErrorCollector.ignore_error_filter
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
def notice_error(exception, options = {})
|
200
|
+
Transaction.notice_error(exception, options)
|
201
|
+
nil
|
202
|
+
end
|
203
|
+
|
204
|
+
def notice_sql(sql, metric, config, elapsed_time, state, &explainer)
|
205
|
+
agent.transaction_sampler.notice_sql(sql, config, elapsed_time, state, &explainer)
|
206
|
+
agent.sql_sampler.notice_sql(sql, metric, config, elapsed_time, state, &explainer)
|
207
|
+
end
|
208
|
+
|
209
|
+
def add_custom_parameters(params)
|
210
|
+
if params.is_a? Hash
|
211
|
+
txn = Transaction.tl_current
|
212
|
+
txn.add_custom_parameters(params) if txn
|
213
|
+
else
|
214
|
+
::OneApm::Manager.logger.warn("Bad argument passed to #add_custom_parameters. Expected Hash but got #{params.class}")
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
def set_transaction_name(name, options={})
|
219
|
+
Transaction.set_overriding_transaction_name(name, options[:category])
|
220
|
+
end
|
221
|
+
|
222
|
+
def get_transaction_name
|
223
|
+
txn = Transaction.tl_current
|
224
|
+
if txn
|
225
|
+
txn.best_name.sub(Regexp.new("\\A#{Regexp.escape(OneApm::TransactionNamer.prefix_for_category(txn))}"), '')
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
def subscribe(event_type, &handler)
|
230
|
+
agent.events.subscribe( event_type, &handler )
|
231
|
+
end
|
232
|
+
|
233
|
+
def notify(event_type, *args)
|
234
|
+
agent.events.notify( event_type, *args )
|
235
|
+
rescue
|
236
|
+
OneApm::Manager.logger.debug "Ignoring exception during %p event notification" % [event_type]
|
237
|
+
end
|
238
|
+
|
239
|
+
def browser_timing_header
|
240
|
+
agent.javascript_instrumentor.browser_timing_header
|
241
|
+
end
|
242
|
+
|
243
|
+
def require_test_helper
|
244
|
+
path = File.join(__FILE__, '..', '..', '..', 'test', 'agent_helper')
|
245
|
+
require File.expand_path(path)
|
246
|
+
end
|
247
|
+
|
248
|
+
end
|
249
|
+
end
|
@@ -45,7 +45,7 @@ module OneApm
|
|
45
45
|
# return a new metric spec if the given regex
|
46
46
|
# matches the name or scope.
|
47
47
|
def sub(pattern, replacement, apply_to_scope = true)
|
48
|
-
|
48
|
+
OneApm::Manager.logger.warn("The sub method on metric specs is deprecated") rescue nil
|
49
49
|
return nil if name !~ pattern &&
|
50
50
|
(!apply_to_scope || scope.nil? || scope !~ pattern)
|
51
51
|
new_name = name.sub(pattern, replacement)[LENGTH_RANGE]
|
@@ -145,7 +145,7 @@ module OneApm
|
|
145
145
|
@min_call_time = apdex_t
|
146
146
|
@max_call_time = apdex_t
|
147
147
|
else
|
148
|
-
|
148
|
+
OneApm::Manager.logger.warn("Attempted to set apdex_t to #{apdex_t.inspect}, backtrace = #{caller.join("\n")}")
|
149
149
|
end
|
150
150
|
end
|
151
151
|
|
data/lib/one_apm/probe.rb
CHANGED
@@ -13,10 +13,10 @@ module OneApm
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def new_instance
|
16
|
-
if
|
16
|
+
if OneApm::Manager.config[:framework] == :test
|
17
17
|
load_test_framework
|
18
18
|
else
|
19
|
-
load_framework_class(
|
19
|
+
load_framework_class(Manager.config[:framework]).new(local_env)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -14,19 +14,19 @@ module OneApm
|
|
14
14
|
def init_plugin(options = {})
|
15
15
|
env = options[:env] || self.env
|
16
16
|
|
17
|
-
|
17
|
+
OneApm::Manager.logger.info("Starting the OneAPM Agent (#{OneApm::VERSION::STRING}) in #{env.inspect} environment.")
|
18
18
|
|
19
19
|
configure_agent(env, options)
|
20
20
|
|
21
21
|
# Be sure to only create once! RUBY-1020
|
22
|
-
if
|
23
|
-
|
22
|
+
if OneApm::Manager.logger.is_startup_logger?
|
23
|
+
OneApm::Manager.logger = OneApm::Logger::AgentLogger.new(root, options.delete(:log))
|
24
24
|
end
|
25
25
|
|
26
26
|
# Merge the stringified options into the config as overrides:
|
27
27
|
environment_name = options.delete(:env) and self.env = environment_name
|
28
28
|
|
29
|
-
OneApm::
|
29
|
+
OneApm::Support::ForkedProcessChannel.listener.start if options.delete(:start_channel_listener)
|
30
30
|
|
31
31
|
# An artifact of earlier implementation, we put both #add_method_tracer and #trace_execution
|
32
32
|
# methods in the module methods.
|
@@ -36,13 +36,13 @@ module OneApm
|
|
36
36
|
init_config(options)
|
37
37
|
|
38
38
|
# initialize agent
|
39
|
-
OneApm::
|
40
|
-
OneApm::
|
39
|
+
OneApm::Manager.agent = OneApm::Agent::Agent.instance
|
40
|
+
OneApm::Manager.agent.start_service
|
41
41
|
|
42
|
-
if
|
42
|
+
if OneApm::Manager.config[:agent_enabled] && !OneApm::Manager.agent.started?
|
43
43
|
start_agent
|
44
44
|
install_instrumentation
|
45
|
-
elsif !
|
45
|
+
elsif !Manager.config[:agent_enabled]
|
46
46
|
install_shim
|
47
47
|
else
|
48
48
|
detect_dependencies
|
@@ -51,36 +51,36 @@ module OneApm
|
|
51
51
|
|
52
52
|
def configure_agent(env, options)
|
53
53
|
manual = OneApm::Configuration::ManualSource.new(options)
|
54
|
-
|
54
|
+
OneApm::Manager.config.replace_or_add_config(manual)
|
55
55
|
|
56
|
-
config_file_path = @config_file_override ||
|
57
|
-
|
56
|
+
config_file_path = @config_file_override || OneApm::Manager.config[:config_path]
|
57
|
+
OneApm::Manager.config.replace_or_add_config(OneApm::Configuration::YamlSource.new(config_file_path, env))
|
58
58
|
|
59
|
-
if
|
60
|
-
|
61
|
-
|
59
|
+
if OneApm::Manager.config[:high_security]
|
60
|
+
OneApm::Manager.logger.info("Installing high security configuration based on local configuration")
|
61
|
+
OneApm::Manager.config.replace_or_add_config(OneApm::Configuration::HighSecuritySource.new(Manager.config))
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
65
|
# Install the real agent into the Agent module, and issue the start command.
|
66
66
|
def start_agent
|
67
|
-
OneApm::
|
67
|
+
OneApm::Manager.agent.start
|
68
68
|
end
|
69
69
|
|
70
70
|
def app
|
71
|
-
|
71
|
+
OneApm::Manager.config[:framework]
|
72
72
|
end
|
73
73
|
|
74
74
|
def framework
|
75
|
-
|
75
|
+
OneApm::Manager.config[:framework]
|
76
76
|
end
|
77
77
|
|
78
78
|
def settings
|
79
|
-
OneApm::
|
79
|
+
OneApm::Manager.config.to_collector_hash
|
80
80
|
end
|
81
81
|
|
82
82
|
def dispatcher
|
83
|
-
OneApm::
|
83
|
+
OneApm::Manager.config[:dispatcher]
|
84
84
|
end
|
85
85
|
|
86
86
|
def oneapm_root
|
@@ -19,7 +19,7 @@ module OneApm
|
|
19
19
|
load_instrumentation_files inst_file
|
20
20
|
end
|
21
21
|
detect_dependencies
|
22
|
-
OneApm::
|
22
|
+
OneApm::Manager.logger.info "Finished instrumentation"
|
23
23
|
end
|
24
24
|
|
25
25
|
def load_instrumentation_files pattern
|
@@ -34,16 +34,16 @@ module OneApm
|
|
34
34
|
def require_instrumentation file
|
35
35
|
require file
|
36
36
|
rescue => e
|
37
|
-
|
37
|
+
OneApm::Manager.logger.warn "Error loading instrumentation file '#{file}':", e
|
38
38
|
end
|
39
39
|
|
40
40
|
def install_shim
|
41
41
|
# Once we install instrumentation, you can't undo that by installing the shim.
|
42
42
|
if @instrumented
|
43
|
-
OneApm::
|
44
|
-
OneApm::
|
43
|
+
OneApm::Manager.logger.error "Cannot install the Agent shim after instrumentation has already been installed!"
|
44
|
+
OneApm::Manager.logger.error caller.join("\n")
|
45
45
|
else
|
46
|
-
OneApm::
|
46
|
+
OneApm::Manager.agent = OneApm::Agent::ShimAgent.instance
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
@@ -16,7 +16,7 @@ module OneApm::Rack
|
|
16
16
|
def traced_call(env)
|
17
17
|
result = @app.call(env) # [status, headers, response]
|
18
18
|
|
19
|
-
js_to_inject = OneApm::
|
19
|
+
js_to_inject = OneApm::Manager.browser_timing_header
|
20
20
|
if (js_to_inject != "") && should_instrument?(env, result[0], result[1])
|
21
21
|
response_string = autoinstrument_source(result[2], result[1], js_to_inject)
|
22
22
|
|
@@ -33,7 +33,7 @@ module OneApm::Rack
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def should_instrument?(env, status, headers)
|
36
|
-
OneApm::
|
36
|
+
OneApm::Manager.config[:'browser_monitoring.auto_instrument'] &&
|
37
37
|
status == 200 &&
|
38
38
|
!env[ALREADY_INSTRUMENTED_KEY] &&
|
39
39
|
is_html?(headers) &&
|
@@ -80,12 +80,12 @@ module OneApm::Rack
|
|
80
80
|
js_to_inject <<
|
81
81
|
source[insertion_index..-1]
|
82
82
|
else
|
83
|
-
OneApm::
|
83
|
+
OneApm::Manager.logger.debug "Skipping RUM instrumentation. Could not properly determine location to inject script."
|
84
84
|
end
|
85
85
|
else
|
86
86
|
msg = "Skipping RUM instrumentation. Unable to find <body> tag in first #{SCAN_LIMIT} bytes of document."
|
87
|
-
OneApm::
|
88
|
-
OneApm::
|
87
|
+
OneApm::Manager.logger.log_once(:warn, :rum_insertion_failure, msg)
|
88
|
+
OneApm::Manager.logger.debug(msg)
|
89
89
|
end
|
90
90
|
|
91
91
|
if headers['Content-Length']
|
@@ -94,7 +94,7 @@ module OneApm::Rack
|
|
94
94
|
|
95
95
|
source
|
96
96
|
rescue => e
|
97
|
-
OneApm::
|
97
|
+
OneApm::Manager.logger.debug "Skipping RUM instrumentation on exception.", e
|
98
98
|
nil
|
99
99
|
end
|
100
100
|
|