scout_agent 3.1.4 → 3.1.5
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.
- data/CHANGELOG +11 -0
- data/lib/scout_agent/core_extensions.rb +1 -1
- data/lib/scout_agent/lifeline.rb +7 -5
- data/lib/scout_agent/plan.rb +64 -31
- data/lib/scout_agent.rb +5 -1
- metadata +2 -2
data/CHANGELOG
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
== 3.1.5
|
2
|
+
|
3
|
+
* Fixed a bug that could cause the agent to crash when shutting down if running
|
4
|
+
with --no-daemon
|
5
|
+
* Switched DNS strategies so slow DNS resolving doesn't kill our background
|
6
|
+
threading for process monitoring
|
7
|
+
* Relaxed the process monitoring timeout to ten seconds
|
8
|
+
* Relaxed TERM to KILL timeouts to five seconds
|
9
|
+
* Unwound some metaprogramming magic so some missing methods would show up in
|
10
|
+
the documentation
|
11
|
+
|
1
12
|
== 3.1.4
|
2
13
|
|
3
14
|
* Modified the API to no longer load the JSON gem if we already have JSON
|
@@ -157,7 +157,7 @@ module ScoutAgent
|
|
157
157
|
# if the process has not yet exited. The exit code for the process is
|
158
158
|
# returned if it can be determined (+nil+ is returned otherwise).
|
159
159
|
#
|
160
|
-
def term_or_kill(child_pid, pause =
|
160
|
+
def term_or_kill(child_pid, pause = 5)
|
161
161
|
%w[TERM KILL].each { |signal|
|
162
162
|
begin
|
163
163
|
::Process.kill(signal, child_pid) # attempt to stop process
|
data/lib/scout_agent/lifeline.rb
CHANGED
@@ -12,7 +12,7 @@ module ScoutAgent
|
|
12
12
|
# The number of seconds allowed to pass before the Agent subprocess is
|
13
13
|
# considered unresponsive.
|
14
14
|
#
|
15
|
-
NO_CONTACT_TIMEOUT =
|
15
|
+
NO_CONTACT_TIMEOUT = 10
|
16
16
|
#
|
17
17
|
# The frequency with which the subprocess is expected to check-in. This is
|
18
18
|
# purposely set to a little under a second to give one more check-in
|
@@ -23,7 +23,7 @@ module ScoutAgent
|
|
23
23
|
# The number of seconds the monitor will wait for a process to exit cleanly
|
24
24
|
# before forcing a stop.
|
25
25
|
#
|
26
|
-
TERM_TO_KILL_PAUSE =
|
26
|
+
TERM_TO_KILL_PAUSE = 5
|
27
27
|
#
|
28
28
|
# The sequence of seconds this monitor will wait between restarts of the
|
29
29
|
# subprocess. The initial values are short, to try and get running again as
|
@@ -97,11 +97,13 @@ module ScoutAgent
|
|
97
97
|
@launch_and_monitor_thread.exit if @launch_and_monitor_thread
|
98
98
|
# ask child process to exit
|
99
99
|
log.info("Asking '#{@agent}' to stop.")
|
100
|
-
|
100
|
+
begin
|
101
|
+
IDCard.new(@agent).signal("TERM")
|
102
|
+
rescue Errno::ESRCH # no such process
|
103
|
+
# if already exited, so we are fine
|
104
|
+
end
|
101
105
|
end
|
102
106
|
end
|
103
|
-
rescue Errno::ESRCH # no such process
|
104
|
-
# if already exited, so we are fine
|
105
107
|
end
|
106
108
|
|
107
109
|
#
|
data/lib/scout_agent/plan.rb
CHANGED
@@ -299,14 +299,24 @@ module ScoutAgent
|
|
299
299
|
Pathname.new(super)
|
300
300
|
end
|
301
301
|
|
302
|
-
#
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
302
|
+
# The configuarion path for your operation system, using prefix_path().
|
303
|
+
def os_config_path
|
304
|
+
prefix_path + super
|
305
|
+
end
|
306
|
+
|
307
|
+
# The database path for your operation system, using prefix_path().
|
308
|
+
def os_db_path
|
309
|
+
prefix_path + super
|
310
|
+
end
|
311
|
+
|
312
|
+
# The PID file path for your operation system, using prefix_path().
|
313
|
+
def os_pid_path
|
314
|
+
prefix_path + super
|
315
|
+
end
|
316
|
+
|
317
|
+
# The log path for your operation system, using prefix_path().
|
318
|
+
def os_log_path
|
319
|
+
prefix_path + super
|
310
320
|
end
|
311
321
|
|
312
322
|
#
|
@@ -317,36 +327,59 @@ module ScoutAgent
|
|
317
327
|
os_config_path + (super || "#{ScoutAgent.agent_name}.rb")
|
318
328
|
end
|
319
329
|
|
330
|
+
# The database path for this agent, using prefix_path() and os_db_path().
|
331
|
+
def db_dir
|
332
|
+
os_db_path + (super || ScoutAgent.agent_name)
|
333
|
+
end
|
334
|
+
|
335
|
+
# The PID file path for this agent, using prefix_path() and os_pid_path().
|
336
|
+
def pid_dir
|
337
|
+
os_pid_path + (super || ScoutAgent.agent_name)
|
338
|
+
end
|
339
|
+
|
340
|
+
# The log path for this agent, using prefix_path() and os_log_path().
|
341
|
+
def log_dir
|
342
|
+
os_log_path + (super || ScoutAgent.agent_name)
|
343
|
+
end
|
344
|
+
|
345
|
+
#
|
346
|
+
# Builds the database directory for this agent, owned by +group_id+ but with
|
347
|
+
# full privileges for all.
|
348
|
+
#
|
349
|
+
def build_db_dir(group_id)
|
350
|
+
build_dir(:db_dir, 0777, group_id)
|
351
|
+
end
|
352
|
+
|
320
353
|
#
|
321
|
-
#
|
322
|
-
#
|
323
|
-
# are named after the agent.
|
354
|
+
# Builds the PID file directory for this agent, owned by +group_id+ but
|
355
|
+
# readable by all.
|
324
356
|
#
|
325
|
-
|
326
|
-
|
327
|
-
send("os_#{path}_path") + (super() || ScoutAgent.agent_name)
|
328
|
-
}
|
357
|
+
def build_pid_dir(group_id)
|
358
|
+
build_dir(:pid_dir, 0775, group_id)
|
329
359
|
end
|
330
360
|
|
331
361
|
#
|
332
|
-
#
|
333
|
-
#
|
334
|
-
# they can be written to after the daemon surrenders super user privileges.
|
362
|
+
# Builds the log directory for this agent, owned by +group_id+ but with full
|
363
|
+
# privileges for all.
|
335
364
|
#
|
336
|
-
|
337
|
-
:
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
365
|
+
def build_log_dir(group_id)
|
366
|
+
build_dir(:log_dir, 0777, group_id)
|
367
|
+
end
|
368
|
+
|
369
|
+
#
|
370
|
+
# Creates +path+, sets the +group_id+ for it, and gives it +permissions+.
|
371
|
+
# Returns +true+ if all of that succeeds, +false+ otherwise (due to
|
372
|
+
# permission issues).
|
373
|
+
#
|
374
|
+
def build_dir(path, permissions, group_id)
|
375
|
+
send(path).mkpath
|
376
|
+
send(path).chown(nil, group_id)
|
377
|
+
send(path).chmod(permissions)
|
378
|
+
true
|
379
|
+
rescue Errno::EACCES, Errno::EPERM # don't have permission
|
380
|
+
false
|
349
381
|
end
|
382
|
+
private :build_dir
|
350
383
|
|
351
384
|
#############
|
352
385
|
### URL's ###
|
data/lib/scout_agent.rb
CHANGED
@@ -33,6 +33,10 @@ require_lib_or_gem "rest_client", "=0.9.2"
|
|
33
33
|
require_lib_or_gem "xmpp4r", "=0.4"
|
34
34
|
require_lib_or_gem "xmpp4r/roster" # loads from xmpp4r's version
|
35
35
|
|
36
|
+
# *IMPORTANT*: make sure slow DNS requests don't kill our background threading
|
37
|
+
require "resolv-replace"
|
38
|
+
Socket.do_not_reverse_lookup = true
|
39
|
+
|
36
40
|
# The namespace for all agent software.
|
37
41
|
module ScoutAgent
|
38
42
|
# Returns the name of the agent executable.
|
@@ -91,7 +95,7 @@ module ScoutAgent
|
|
91
95
|
end
|
92
96
|
|
93
97
|
# The version of this agent.
|
94
|
-
VERSION = "3.1.
|
98
|
+
VERSION = "3.1.5".freeze
|
95
99
|
# A Pathname reference to the agent code directory, used in dynamic loading.
|
96
100
|
LIB_DIR = Pathname.new(File.dirname(__FILE__)) + agent_name
|
97
101
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scout_agent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Edward Gray II
|
@@ -12,7 +12,7 @@ autorequire:
|
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
14
|
|
15
|
-
date: 2009-05-
|
15
|
+
date: 2009-05-12 00:00:00 -05:00
|
16
16
|
default_executable:
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|