scout_apm 2.4.0.pre → 2.4.0.pre2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cd45ad6c823f8163081d1a4083f1740823351551
4
- data.tar.gz: 822bdbc9113c78762a31258b166fe71786bb3448
3
+ metadata.gz: 08385e64d3b8d96ae39c02f892b637dfd0a9b154
4
+ data.tar.gz: 3ab13e2996230a611bca4907bd439d5503b05af5
5
5
  SHA512:
6
- metadata.gz: 6c041d9e89c7dd58588755d805ff88dce9d55ddc38733143e92b32cb1cc8c2d53f577540f69dcc6af8aabb217903ef11c8dc8fe8981e191edc5239c42a1e9317
7
- data.tar.gz: 4d70647935de5bcd27fbaa04f3b4a5e657cb01f13e7384ea17f57ee6bbcf5c73b30bfeb7c37c66bda2688069c4b7c5af61e29098a61c293ba06e1f2a3c1358aa
6
+ metadata.gz: 50d959241a2921399d5d05e67add7b75000782e24ae9276c3a99460b9dcfcb076f72b230c6e35f29cb47f3dd3a75e2fb6487490e084f97403dfe030e4cf7210a
7
+ data.tar.gz: 6d36b242cc269e99981dae5fda755aa8bee1ef73616e1afc9dbabcd9a81aca3190f42d27fc6dddcc5b7309078b0ad6086e17008720ad90b35af0765f7ec237b2
data/CHANGELOG.markdown CHANGED
@@ -1,3 +1,12 @@
1
+ # 2.4.0
2
+
3
+ * Rework agent startup sequence
4
+
5
+ # 2.3.2
6
+
7
+ * More robust startup sequence when using `rails server` vs. directly launching an app server
8
+ * Avoid incompatibility with 3rd party gems that aggressively obtain database connections
9
+
1
10
  # 2.3.1
2
11
 
3
12
  * Fix DevTrace bug
@@ -34,6 +34,7 @@ module ScoutApm
34
34
  def shutdown
35
35
  logger.info "Shutting down ScoutApm"
36
36
  return if !context.started?
37
+ context.shutting_down!
37
38
  ::ScoutApm::Agent.instance.stop_background_worker
38
39
  end
39
40
 
@@ -46,7 +46,9 @@ module ScoutApm
46
46
  # XXX: Should this happen at application start?
47
47
  # Should this ever happen after fork?
48
48
  # We start a thread in this, which can screw stuff up when we then fork.
49
- AppServerLoad.new(context).run
49
+ #
50
+ # Save it into a variable to prevent it from ever running twice
51
+ @app_server_load ||= AppServerLoad.new(context).run
50
52
 
51
53
  logger.info "Scout Agent [#{ScoutApm::VERSION}] installed"
52
54
 
@@ -61,8 +63,12 @@ module ScoutApm
61
63
  # installed, and starting the background worker.
62
64
  #
63
65
  # Does not attempt to start twice.
64
- def start
65
- return if context.started?
66
+ def start(_opts={})
67
+ if context.started?
68
+ start_background_worker unless background_worker_running?
69
+ return
70
+ end
71
+
66
72
  install unless context.installed?
67
73
 
68
74
  context.started!
@@ -127,15 +133,24 @@ module ScoutApm
127
133
  # Background Worker Lifecycle #
128
134
  #################################
129
135
 
130
- def start_background_worker
136
+ # Creates the worker thread. The worker thread is a loop that runs continuously. It sleeps for +Agent#period+ and when it wakes,
137
+ # processes data, either saving it to disk or reporting to Scout.
138
+ # => true if thread & worker got started
139
+ # => false if it wasn't started (either due to already running, or other preconditions)
140
+ def start_background_worker(quiet=false)
131
141
  if !context.config.value('monitor')
132
- logger.debug "Not starting background worker as monitoring isn't enabled."
142
+ logger.debug "Not starting background worker as monitoring isn't enabled." unless quiet
133
143
  return false
134
144
  end
135
145
 
136
146
  if background_worker_running?
137
- logger.info "Not starting background worker, already started"
138
- return
147
+ logger.info "Not starting background worker, already started" unless quiet
148
+ return false
149
+ end
150
+
151
+ if context.shutting_down?
152
+ logger.info "Not starting background worker, already in process of shutting down" unless quiet
153
+ return false
139
154
  end
140
155
 
141
156
  logger.info "Initializing worker thread."
@@ -150,6 +165,8 @@ module ScoutApm
150
165
  periodic_work.run
151
166
  }
152
167
  end
168
+
169
+ return true
153
170
  end
154
171
 
155
172
  def stop_background_worker
@@ -75,6 +75,10 @@ module ScoutApm
75
75
  @started
76
76
  end
77
77
 
78
+ def shutting_down?
79
+ @shutting_down
80
+ end
81
+
78
82
  def installed?
79
83
  @installed
80
84
  end
@@ -157,6 +161,10 @@ module ScoutApm
157
161
  @started = true
158
162
  end
159
163
 
164
+ def shutting_down!
165
+ @shutting_down = true
166
+ end
167
+
160
168
  def store=(store)
161
169
  @store = store
162
170
 
@@ -43,6 +43,10 @@ module ScoutApm
43
43
  :paas => to_s_safe(environment.platform_integration.name),
44
44
  :git_sha => to_s_safe(environment.git_revision.sha)
45
45
  }
46
+ ensure
47
+ # Sometimes :database_engine and :database_adapter can cause a reference to an AR connection.
48
+ # Make sure we release all AR connections held by this thread.
49
+ ActiveRecord::Base.clear_active_connections! if Utils::KlassHelper.defined?("ActiveRecord::Base")
46
50
  end
47
51
 
48
52
  # Calls `.to_s` on the object passed in.
@@ -295,8 +295,26 @@ module ScoutApm
295
295
  trace = converter.call
296
296
  ScoutApm::InstantReporting.new(trace, instant_key).call
297
297
  end
298
+
299
+ if web? || job?
300
+ ensure_background_worker
301
+ end
298
302
  end
299
303
 
304
+ # Ensure the background worker thread is up & running - a fallback if other
305
+ # detection doesn't achieve this at boot.
306
+ def ensure_background_worker
307
+ agent = ScoutApm::Agent.instance
308
+ agent.start
309
+
310
+ if agent.start_background_worker(:quiet)
311
+ agent.logger.info("Force Started BG Worker")
312
+ end
313
+ rescue => e
314
+ true
315
+ end
316
+
317
+
300
318
  # Only call this after the request is complete
301
319
  def unique_name
302
320
  return nil if ignoring_request?
@@ -1,4 +1,4 @@
1
1
  module ScoutApm
2
- VERSION = "2.4.0.pre"
2
+ VERSION = "2.4.0.pre2"
3
3
  end
4
4
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scout_apm
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0.pre
4
+ version: 2.4.0.pre2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Derek Haynes
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-12-05 00:00:00.000000000 Z
12
+ date: 2017-12-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: minitest