scout 5.4.6.alpha → 5.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -1
- data/CHANGELOG +17 -0
- data/bin/scout +0 -1
- data/lib/scout.rb +1 -1
- data/lib/scout/command.rb +12 -10
- data/lib/scout/command/install.rb +1 -1
- data/lib/scout/command/run.rb +10 -10
- data/lib/scout/command/sign.rb +8 -2
- data/lib/scout/command/test.rb +1 -1
- data/lib/scout/server.rb +5 -6
- data/lib/scout/streamer.rb +17 -9
- data/lib/scout/streamer_daemon.rb +58 -0
- data/lib/scout/version.rb +1 -1
- data/test/scout_test.rb +66 -25
- metadata +8 -10
- data/lib/scout/command/stream.rb +0 -50
- data/lib/scout/streamer_control.rb +0 -43
data/.gitignore
CHANGED
data/CHANGELOG
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
== Master
|
2
|
+
|
3
|
+
== 5.5.0
|
4
|
+
|
5
|
+
* yes, the version number jumped from 5.3.5 to 5.5.0
|
6
|
+
* Implemented "real time" mode
|
7
|
+
|
8
|
+
== 5.3.5
|
9
|
+
|
10
|
+
* Moved proxy support to explicit command line flags --http_proxy and https_proxy
|
11
|
+
* fixed two unused variables that were causing warnings under 1.9.3
|
12
|
+
|
13
|
+
== 5.3.4
|
14
|
+
|
15
|
+
* Incorporating sleep interval into Server#time_to_checkin?
|
16
|
+
* Added proxy support command line flags
|
17
|
+
|
1
18
|
== 5.3.3
|
2
19
|
|
3
20
|
* Sending embedded options to server for local & plugin overrides.
|
data/bin/scout
CHANGED
data/lib/scout.rb
CHANGED
data/lib/scout/command.rb
CHANGED
@@ -72,6 +72,16 @@ module Scout
|
|
72
72
|
options[:server_name] = server_name
|
73
73
|
end
|
74
74
|
|
75
|
+
opts.on("--http-proxy URL", String,
|
76
|
+
"Optional http proxy for non-SSL traffic." ) do |http_proxy|
|
77
|
+
options[:http_proxy] = http_proxy
|
78
|
+
end
|
79
|
+
|
80
|
+
opts.on("--https-proxy URL", String,
|
81
|
+
"Optional https proxy for SSL traffic." ) do |https_proxy|
|
82
|
+
options[:https_proxy] = https_proxy
|
83
|
+
end
|
84
|
+
|
75
85
|
opts.separator " "
|
76
86
|
opts.separator "Common Options:"
|
77
87
|
opts.separator "--------------------------------------------------------------------------"
|
@@ -95,16 +105,6 @@ module Scout
|
|
95
105
|
options[:force] = bool
|
96
106
|
end
|
97
107
|
|
98
|
-
opts.on( "-p", "--plugin_ids PLUGINS", String,
|
99
|
-
"A subset of plugin ids, for streaming mode only - not generally used manually.") do |plugins|
|
100
|
-
options[:plugin_ids] = plugins.split(",").map(&:to_i)
|
101
|
-
end
|
102
|
-
|
103
|
-
opts.on( "-k", "--streaming_key KEY", String,
|
104
|
-
"for streaming mode only - not generally used manually.") do |streaming_key|
|
105
|
-
options[:streaming_key] = streaming_key
|
106
|
-
end
|
107
|
-
|
108
108
|
opts.separator " "
|
109
109
|
opts.separator "Troubleshooting Options:"
|
110
110
|
opts.separator "--------------------------------------------------------------------------"
|
@@ -164,6 +164,8 @@ module Scout
|
|
164
164
|
@level = options[:level] || "info"
|
165
165
|
@force = options[:force] || false
|
166
166
|
@server_name = options[:server_name]
|
167
|
+
@http_proxy = options[:http_proxy] || ""
|
168
|
+
@https_proxy = options[:https_proxy] || ""
|
167
169
|
|
168
170
|
@options = options
|
169
171
|
@args = args
|
@@ -22,7 +22,7 @@ module Scout
|
|
22
22
|
|
23
23
|
puts "\nAttempting to contact the server..."
|
24
24
|
begin
|
25
|
-
Scout::Server.new(server, key, history, log) do |scout|
|
25
|
+
Scout::Server.new(server, key, history, log, @http_proxy, @https_proxy) do |scout|
|
26
26
|
scout.fetch_plan
|
27
27
|
scout.run_plugins_by_plan
|
28
28
|
end
|
data/lib/scout/command/run.rb
CHANGED
@@ -9,7 +9,7 @@ module Scout
|
|
9
9
|
configuration_directory = config_dir
|
10
10
|
log.debug("Configuration directory is #{configuration_directory} ") if log
|
11
11
|
# TODO: too much external logic of command doing things TO server. This should be moved into the server class.
|
12
|
-
@scout = Scout::Server.new(server, key, history, log, server_name)
|
12
|
+
@scout = Scout::Server.new(server, key, history, log, server_name, @http_proxy, @https_proxy)
|
13
13
|
@scout.load_history
|
14
14
|
|
15
15
|
unless $stdin.tty?
|
@@ -19,15 +19,15 @@ module Scout
|
|
19
19
|
|
20
20
|
@scout.fetch_plan
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
22
|
+
# Spawn or stop streamer as needed
|
23
|
+
if @scout.streamer_command.is_a?(String)
|
24
|
+
if @scout.streamer_command.start_with?("start")
|
25
|
+
log.info "streamer command: start"
|
26
|
+
Scout::StreamerDaemon.start_daemon(history, @scout.streamer_command)
|
27
|
+
elsif @scout.streamer_command == "stop"
|
28
|
+
log.info "streamer command: stop"
|
29
|
+
Scout::StreamerDaemon.stop_daemon(history)
|
30
|
+
end
|
31
31
|
end
|
32
32
|
|
33
33
|
# Check in if appropriate
|
data/lib/scout/command/sign.rb
CHANGED
@@ -11,7 +11,7 @@ module Scout
|
|
11
11
|
VERIFY_MODE = OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT
|
12
12
|
|
13
13
|
def run
|
14
|
-
url
|
14
|
+
url = @args.first
|
15
15
|
# read the plugin_code from the file specified
|
16
16
|
if url.nil? or url == ''
|
17
17
|
puts "Please specify the path to the plugin (scout sign /path/to/plugin.rb)"
|
@@ -35,7 +35,13 @@ module Scout
|
|
35
35
|
|
36
36
|
puts "Posting Signature..."
|
37
37
|
uri = URI.parse(url)
|
38
|
-
|
38
|
+
|
39
|
+
# take care of http/https proxy, if specified in command line options
|
40
|
+
# Given a blank string, the proxy_uri URI instance's host/port/user/pass will be nil
|
41
|
+
# Net::HTTP::Proxy returns a regular Net::HTTP class if the first argument (host) is nil
|
42
|
+
proxy_uri = URI.parse(uri.is_a?(URI::HTTPS) ? @https_proxy : @http_proxy)
|
43
|
+
http=Net::HTTP::Proxy(proxy_uri.host,proxy_uri.port,proxy_uri.user,proxy_uri.port).new(uri.host, uri.port)
|
44
|
+
|
39
45
|
if uri.is_a?(URI::HTTPS)
|
40
46
|
http.use_ssl = true
|
41
47
|
http.ca_file = CA_FILE
|
data/lib/scout/command/test.rb
CHANGED
@@ -45,7 +45,7 @@ module Scout
|
|
45
45
|
puts "== You haven't provided any options for running this plugin."
|
46
46
|
end
|
47
47
|
|
48
|
-
Scout::Server.new(nil, nil, history, log) do |scout|
|
48
|
+
Scout::Server.new(nil, nil, history, log, @http_proxy, @https_proxy) do |scout|
|
49
49
|
scout.prepare_checkin
|
50
50
|
scout.process_plugin( 'interval' => 0,
|
51
51
|
'plugin_id' => 1,
|
data/lib/scout/server.rb
CHANGED
@@ -26,13 +26,15 @@ module Scout
|
|
26
26
|
attr_reader :streamer_command
|
27
27
|
|
28
28
|
# Creates a new Scout Server connection.
|
29
|
-
def initialize(server, client_key, history_file, logger = nil, server_name=nil)
|
29
|
+
def initialize(server, client_key, history_file, logger = nil, server_name=nil, http_proxy='', https_proxy='')
|
30
30
|
@server = server
|
31
31
|
@client_key = client_key
|
32
32
|
@history_file = history_file
|
33
33
|
@history = Hash.new
|
34
34
|
@logger = logger
|
35
35
|
@server_name = server_name
|
36
|
+
@http_proxy = http_proxy
|
37
|
+
@https_proxy = https_proxy
|
36
38
|
@plugin_plan = []
|
37
39
|
@plugins_with_signature_errors = []
|
38
40
|
@directives = {} # take_snapshots, interval, sleep_interval
|
@@ -231,7 +233,7 @@ module Scout
|
|
231
233
|
def time_to_checkin?
|
232
234
|
@history['last_checkin'] == nil ||
|
233
235
|
@directives['interval'] == nil ||
|
234
|
-
(Time.now.to_i - Time.at(@history['last_checkin']).to_i).abs+15 > @directives['interval'].to_i*60
|
236
|
+
(Time.now.to_i - Time.at(@history['last_checkin']).to_i).abs+15+sleep_interval > @directives['interval'].to_i*60
|
235
237
|
rescue
|
236
238
|
debug "Failed to calculate time_to_checkin. @history['last_checkin']=#{@history['last_checkin']}. "+
|
237
239
|
"@directives['interval']=#{@directives['interval']}. Time.now.to_i=#{Time.now.to_i}"
|
@@ -481,7 +483,7 @@ module Scout
|
|
481
483
|
contents=File.read(@history_file)
|
482
484
|
begin
|
483
485
|
@history = YAML.load(contents)
|
484
|
-
rescue
|
486
|
+
rescue
|
485
487
|
backup_path=File.join(File.dirname(@history_file), "history.corrupt")
|
486
488
|
info "Couldn't parse the history file. Deleting it and resetting to an empty history file. Keeping a backup at #{backup_path}"
|
487
489
|
File.open(backup_path,"w"){|f|f.write contents}
|
@@ -546,9 +548,6 @@ module Scout
|
|
546
548
|
debug $!.message
|
547
549
|
debug $!.backtrace
|
548
550
|
end
|
549
|
-
|
550
|
-
|
551
|
-
private
|
552
551
|
|
553
552
|
# Called during initialization; loads the plugin_configs (local plugin configurations for passwords, etc)
|
554
553
|
# if the file is there. Returns a hash like {"db.username"=>"secr3t"}
|
data/lib/scout/streamer.rb
CHANGED
@@ -2,31 +2,34 @@ require 'rubygems'
|
|
2
2
|
require 'json'
|
3
3
|
|
4
4
|
module Scout
|
5
|
-
class
|
5
|
+
class PluginTimeoutError < RuntimeError; end
|
6
|
+
class Streamer
|
6
7
|
MAX_DURATION = 60*30 # will shut down automatically after this many seconds
|
7
8
|
SLEEP = 1
|
8
9
|
|
9
10
|
# * history_file is the *path* to the history file
|
10
11
|
# * plugin_ids is an array of integers
|
11
|
-
def initialize(
|
12
|
-
|
13
|
-
@client_key = client_key
|
12
|
+
def initialize(history_file, streaming_key, p_app_id, p_key, p_secret, plugin_ids, logger = nil)
|
13
|
+
@@continue_streaming = true
|
14
14
|
@history_file = history_file
|
15
15
|
@history = Hash.new
|
16
16
|
@logger = logger
|
17
17
|
|
18
18
|
@plugin_hashes = []
|
19
19
|
|
20
|
-
Pusher.app_id
|
21
|
-
Pusher.key
|
22
|
-
Pusher.secret
|
20
|
+
Pusher.app_id=p_app_id
|
21
|
+
Pusher.key=p_key
|
22
|
+
Pusher.secret=p_secret
|
23
|
+
|
24
|
+
#[[:app_id,p_app_id],[:key,p_key],[:secret,p_secret]].each { |p| Pusher.send p.first, p.last}
|
23
25
|
|
24
26
|
streamer_start_time = Time.now
|
25
27
|
|
26
28
|
info("Streamer PID=#{$$} starting")
|
27
29
|
|
28
30
|
hostname=Socket.gethostname
|
29
|
-
|
31
|
+
|
32
|
+
# load plugin history
|
30
33
|
load_history
|
31
34
|
|
32
35
|
# get the array of plugins, AKA the plugin plan
|
@@ -39,7 +42,7 @@ module Scout
|
|
39
42
|
|
40
43
|
# main loop. Continue running until global $continue_streaming is set to false OR we've been running for MAX DURATION
|
41
44
|
iteration=1 # use this to log the data at a couple points
|
42
|
-
while(streamer_start_time+MAX_DURATION > Time.now &&
|
45
|
+
while(streamer_start_time+MAX_DURATION > Time.now && @@continue_streaming) do
|
43
46
|
plugins=[]
|
44
47
|
selected_plugins.each_with_index do |plugin_hash,i|
|
45
48
|
# create an actual instance of the plugin
|
@@ -186,5 +189,10 @@ module Scout
|
|
186
189
|
end
|
187
190
|
end
|
188
191
|
|
192
|
+
# class method is used to stop the running deamon
|
193
|
+
def self.continue_streaming=(v)
|
194
|
+
@@continue_streaming=v
|
195
|
+
end
|
196
|
+
|
189
197
|
end
|
190
198
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Scout
|
2
|
+
class StreamerDaemon < DaemonSpawn::Base
|
3
|
+
|
4
|
+
# this is the public-facing method for starting the streaming daemon
|
5
|
+
def self.start_daemon(history_file, streamer_command)
|
6
|
+
streamer_log_file=File.join(File.dirname(history_file),"scout_streamer.log")
|
7
|
+
streamer_pid_file=File.join(File.dirname(history_file),"scout_streamer.pid")
|
8
|
+
|
9
|
+
daemon_spawn_options = {:log_file => streamer_log_file,
|
10
|
+
:pid_file => streamer_pid_file,
|
11
|
+
:sync_log => true,
|
12
|
+
:working_dir => File.dirname(history_file)}
|
13
|
+
|
14
|
+
# streamer command might look like: start,A0000000000123,a,b,c,1,3
|
15
|
+
tokens = streamer_command.split(",")
|
16
|
+
tokens.shift # gets rid of the "start"
|
17
|
+
streaming_key = tokens.shift
|
18
|
+
p_app_id = tokens.shift
|
19
|
+
p_key = tokens.shift
|
20
|
+
p_secret = tokens.shift
|
21
|
+
plugin_ids = tokens.map(&:to_i)
|
22
|
+
|
23
|
+
# we use STDOUT for the logger because daemon_spawn directs STDOUT to a log file
|
24
|
+
streamer_args = [history_file,streaming_key,p_app_id,p_key,p_secret,plugin_ids,Logger.new(STDOUT)]
|
25
|
+
if File.exists?(streamer_pid_file)
|
26
|
+
Scout::StreamerDaemon.restart(daemon_spawn_options, streamer_args)
|
27
|
+
else
|
28
|
+
Scout::StreamerDaemon.start(daemon_spawn_options, streamer_args)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# this is the public-facing method for stopping the streaming daemon
|
33
|
+
def self.stop_daemon(history_file)
|
34
|
+
streamer_log_file=File.join(File.dirname(history_file),"scout_streamer.log")
|
35
|
+
streamer_pid_file=File.join(File.dirname(history_file),"scout_streamer.pid")
|
36
|
+
|
37
|
+
daemon_spawn_options = {:log_file => streamer_log_file,
|
38
|
+
:pid_file => streamer_pid_file,
|
39
|
+
:sync_log => true,
|
40
|
+
:working_dir => File.dirname(history_file)}
|
41
|
+
|
42
|
+
Scout::StreamerDaemon.stop(daemon_spawn_options, [])
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
# this method is called by DaemonSpawn's class start method.
|
47
|
+
def start(streamer_args)
|
48
|
+
history,streaming_key,p_app_id,p_key,p_secret,plugin_ids,log = streamer_args
|
49
|
+
@scout = Scout::Streamer.new(history, streaming_key, p_app_id, p_key, p_secret, plugin_ids, log)
|
50
|
+
end
|
51
|
+
|
52
|
+
# this method is called by DaemonSpawn's class start method.
|
53
|
+
def stop
|
54
|
+
Scout::Streamer.continue_streaming = false
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
data/lib/scout/version.rb
CHANGED
data/test/scout_test.rb
CHANGED
@@ -409,17 +409,21 @@ mybar=100
|
|
409
409
|
|
410
410
|
scout(@client.key) # to write the initial history file. Sinatra MUST be running
|
411
411
|
$continue_streaming = true # so the streamer will run once
|
412
|
-
|
413
|
-
|
412
|
+
# for debugging, make last arg Logger.new(STDOUT)
|
413
|
+
Scout::Streamer.new(PATH_TO_DATA_FILE,"bogus_streaming_key","a","b","c",[@client.plugins.first.id]+plugins.map(&:id),nil)
|
414
|
+
end
|
414
415
|
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
416
|
+
streams = Pusher::Channel.streamer_data # set by the mock_pusher call
|
417
|
+
assert streams.is_a?(Array)
|
418
|
+
assert_equal 1, streams.size
|
419
|
+
res=streams.first
|
420
|
+
assert res.is_a?(Hash)
|
421
|
+
assert res[:plugins].is_a?(Array)
|
422
|
+
assert_equal 4, res[:plugins].size
|
423
|
+
assert_equal 2, res[:plugins][0][:fields][:load]
|
424
|
+
assert_equal 1, res[:plugins][1][:fields][:value]
|
425
|
+
assert_equal 2, res[:plugins][2][:fields][:value]
|
426
|
+
assert_equal 1, res[:plugins][3][:fields][:value]
|
423
427
|
end
|
424
428
|
|
425
429
|
# the local plugin shouldn't report
|
@@ -435,26 +439,31 @@ mybar=100
|
|
435
439
|
|
436
440
|
mock_pusher do
|
437
441
|
$continue_streaming = true # so the streamer will run once
|
438
|
-
|
439
|
-
|
442
|
+
# for debugging, make last arg Logger.new(STDOUT)
|
443
|
+
Scout::Streamer.new(PATH_TO_DATA_FILE,"bogus_streaming_key","a","b","c",[@client.plugins.first.id],nil)
|
444
|
+
end
|
445
|
+
streams = Pusher::Channel.streamer_data # set by the mock_pusher call
|
446
|
+
assert streams.is_a?(Array)
|
447
|
+
assert_equal 1, streams.size
|
448
|
+
res=streams.first
|
440
449
|
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
end # end of mock_pusher
|
450
|
+
assert res.is_a?(Hash)
|
451
|
+
assert res[:plugins].is_a?(Array)
|
452
|
+
assert_equal 1, res[:plugins].size # this is NOT the local plugin, it's a regular plugin that's already there
|
453
|
+
assert_equal 2, res[:plugins][0][:fields][:load]
|
446
454
|
end
|
447
455
|
|
448
456
|
|
449
457
|
# test streamer starting and stopping
|
450
458
|
def test_streamer_process_management
|
451
459
|
streamer_pid_file = File.join(AGENT_DIR, "scout_streamer.pid")
|
460
|
+
File.unlink(streamer_pid_file) if File.exist?(streamer_pid_file)
|
452
461
|
|
453
462
|
test_should_run_first_time
|
454
463
|
|
455
464
|
assert !File.exist?(streamer_pid_file)
|
456
465
|
|
457
|
-
assert @client.update_attribute(:streamer_command, "start,A0000000000123,1,3")
|
466
|
+
assert @client.update_attribute(:streamer_command, "start,A0000000000123,a,b,c,1,3")
|
458
467
|
scout(@client.key)
|
459
468
|
assert File.exist?(streamer_pid_file)
|
460
469
|
process_id = File.read(streamer_pid_file).to_i
|
@@ -475,15 +484,34 @@ mybar=100
|
|
475
484
|
plugin = create_plugin(@client, "memory plugin", PLUGIN_FIXTURES[:memory][:code], PLUGIN_FIXTURES[:memory][:sig])
|
476
485
|
scout(@client.key)
|
477
486
|
#puts YAML.load(File.read(PATH_TO_DATA_FILE))['memory'].to_yaml
|
478
|
-
|
479
|
-
$continue_streaming = true # so the streamer will start running
|
480
487
|
# for debugging, make last arg Logger.new(STDOUT)
|
481
|
-
|
482
|
-
res = Pusher::Channel.streamer_data # Pusher::Channel.streamer_data via the mock_pusher call
|
483
|
-
assert_equal 3, res[:plugins][0][:fields][:v], "after the two streamer runs, this plugin should report v=3 -- it increments each run"
|
488
|
+
Scout::Streamer.new(PATH_TO_DATA_FILE,"bogus_streaming_key","a","b","c",[plugin.id],nil)
|
484
489
|
end
|
490
|
+
|
491
|
+
streams = Pusher::Channel.streamer_data # set by the mock_pusher call
|
492
|
+
assert streams.is_a?(Array)
|
493
|
+
assert_equal 3, streams.size
|
494
|
+
res=streams.last
|
495
|
+
assert_equal 3, res[:plugins][0][:fields][:v], "after the two streamer runs, this plugin should report v=3 -- it increments each run"
|
485
496
|
end
|
486
497
|
|
498
|
+
def test_new_plugin_instance_every_streamer_run
|
499
|
+
mock_pusher(2) do
|
500
|
+
plugin = create_plugin(@client, "caching plugin", PLUGIN_FIXTURES[:caching][:code], PLUGIN_FIXTURES[:caching][:sig])
|
501
|
+
scout(@client.key)
|
502
|
+
# for debugging, make last arg Logger.new(STDOUT)
|
503
|
+
Scout::Streamer.new(PATH_TO_DATA_FILE,"bogus_streaming_key","a","b","c",[plugin.id],nil)
|
504
|
+
end
|
505
|
+
|
506
|
+
streams = Pusher::Channel.streamer_data # set by the mock_pusher call
|
507
|
+
assert streams.is_a?(Array)
|
508
|
+
assert_equal 2, streams.size
|
509
|
+
|
510
|
+
# the plugin sets :v to be the current time, and caches it in a class variable. we're checking that they are NOT equal
|
511
|
+
assert_in_delta Time.now.to_i, streams.last[:plugins][0][:fields][:v], 5, "should be within a few seconds of now"
|
512
|
+
assert_in_delta Time.now.to_i, streams.first[:plugins][0][:fields][:v], 5, "should be within a few seconds of now"
|
513
|
+
assert_not_equal streams.first[:plugins][0][:fields][:v], streams.last[:plugins][0][:fields][:v]
|
514
|
+
end
|
487
515
|
|
488
516
|
######################
|
489
517
|
### Helper Methods ###
|
@@ -612,10 +640,13 @@ mybar=100
|
|
612
640
|
def trigger!(event_name, data, socket=nil)
|
613
641
|
@num_run_for_tests = @num_run_for_tests ? @num_run_for_tests+1 : 1
|
614
642
|
# puts "in mock pusher trigger! This is run #{@num_run_for_tests} of #{$num_runs_for_mock_pusher}"
|
615
|
-
@@
|
643
|
+
@@streamer_data_temp ||= Array.new
|
644
|
+
@@streamer_data_temp << data
|
616
645
|
if @num_run_for_tests >= $num_runs_for_mock_pusher
|
617
|
-
|
646
|
+
Scout::Streamer.continue_streaming=false
|
618
647
|
@num_run_for_tests=nil
|
648
|
+
@@streamer_data = @@streamer_data_temp.clone
|
649
|
+
@@streamer_data_temp = nil
|
619
650
|
end
|
620
651
|
end
|
621
652
|
end
|
@@ -656,6 +687,16 @@ HXu5TIQLJ/+IYHIG2E5FWcbfddR8cmJkIl4zGs93IatQNTENksRzphob7Cz8
|
|
656
687
|
wBwOHDG78kJ4TWEV5NIa5rLW8y2ltthfEPCTnS8/Zxa6h0qFtNrUWiU2KKtp
|
657
688
|
xTbJ3RgWKUnAR3YrEGB/JjjkPN2FrsDRvlClGujaYIWpWGkf+GZcpUn+QYxP
|
658
689
|
w7/kFz29Ds4hJRg2E2cWCHPtrD4dI0p/1iwP4XsxOw==
|
690
|
+
EOS
|
691
|
+
},
|
692
|
+
:caching=>{:code=>"class CachingPlugin < Scout::Plugin;def build_report; @v||= Time.now.to_i; report(:v=>@v);end;end",
|
693
|
+
:sig=><<EOS
|
694
|
+
zcEUdxS9h/iD/xYK1SbvTn2mi0vJzfgIkmrouzXeRbEsbcKTdOhc3nOBwUH5
|
695
|
+
SEOvQnPKmTiN7qaRiDZJypB/ldKxG4PL8zI0kL5G3AUZcxJBfqWe82jCKpyY
|
696
|
+
I49DWaBW4tZWM3j5T64+60ifPlKVXQMLVIYQtPTpVDMnftzfokDbBYsEhB2e
|
697
|
+
gNnsaAL5Nar+JE2GqM7nh79IgfXOrrYLdsv4zUJfex/OrKJS53ZCRnDcvlXu
|
698
|
+
pKFiS6IF2dJkIFlnNlYaXK5ZSXGANGY80Ji4ivz077JpuogQzrVkqHk13A1G
|
699
|
+
dGvCQOmVn51PKtmDm5DbfZaw4j4w+1pO2+G9Qm1y+A==
|
659
700
|
EOS
|
660
701
|
}
|
661
702
|
} # end of PLUGIN_FIXTURES
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scout
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
5
|
-
prerelease:
|
4
|
+
version: 5.5.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Andre Lewis
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2012-01-09 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: elif
|
18
|
-
requirement: &
|
18
|
+
requirement: &70362600075880 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ! '>='
|
@@ -23,7 +23,7 @@ dependencies:
|
|
23
23
|
version: '0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *70362600075880
|
27
27
|
description: ! 'Scout makes monitoring and reporting on your web applications as flexible
|
28
28
|
and simple as possible.
|
29
29
|
|
@@ -50,7 +50,6 @@ files:
|
|
50
50
|
- lib/scout/command/install.rb
|
51
51
|
- lib/scout/command/run.rb
|
52
52
|
- lib/scout/command/sign.rb
|
53
|
-
- lib/scout/command/stream.rb
|
54
53
|
- lib/scout/command/test.rb
|
55
54
|
- lib/scout/command/troubleshoot.rb
|
56
55
|
- lib/scout/daemon_spawn.rb
|
@@ -60,7 +59,7 @@ files:
|
|
60
59
|
- lib/scout/server.rb
|
61
60
|
- lib/scout/server_base.rb
|
62
61
|
- lib/scout/streamer.rb
|
63
|
-
- lib/scout/
|
62
|
+
- lib/scout/streamer_daemon.rb
|
64
63
|
- lib/scout/version.rb
|
65
64
|
- scout.gemspec
|
66
65
|
- test/plugins/disk_usage.rb
|
@@ -208,7 +207,6 @@ files:
|
|
208
207
|
- vendor/signature/.document
|
209
208
|
- vendor/signature/.gitignore
|
210
209
|
- vendor/signature/Gemfile
|
211
|
-
- vendor/signature/Gemfile.lock
|
212
210
|
- vendor/signature/LICENSE
|
213
211
|
- vendor/signature/README.md
|
214
212
|
- vendor/signature/Rakefile
|
@@ -234,9 +232,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
234
232
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
235
233
|
none: false
|
236
234
|
requirements:
|
237
|
-
- - ! '
|
235
|
+
- - ! '>='
|
238
236
|
- !ruby/object:Gem::Version
|
239
|
-
version:
|
237
|
+
version: '0'
|
240
238
|
requirements: []
|
241
239
|
rubyforge_project: scout
|
242
240
|
rubygems_version: 1.8.10
|
data/lib/scout/command/stream.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby -wKU
|
2
|
-
|
3
|
-
require "logger"
|
4
|
-
|
5
|
-
module Scout
|
6
|
-
class Command
|
7
|
-
class Stream < Command
|
8
|
-
PID_FILENAME="streamer.pid"
|
9
|
-
|
10
|
-
def run
|
11
|
-
@key = @args[0]
|
12
|
-
daemon_command = @args[1]
|
13
|
-
@plugin_ids = @options[:plugin_ids]
|
14
|
-
|
15
|
-
if !@key
|
16
|
-
puts "usage: scout stream [your_scout_key] [start|stop]"
|
17
|
-
exit(1)
|
18
|
-
end
|
19
|
-
|
20
|
-
# server and history methods are inherited from Scout::Command base class
|
21
|
-
streamer_log_file=File.join(File.dirname(history),"scout_streamer.log")
|
22
|
-
streamer_pid_file=File.join(File.dirname(history),"scout_streamer.pid")
|
23
|
-
|
24
|
-
streamer_control_options = {:log_file => streamer_log_file,
|
25
|
-
:pid_file => streamer_pid_file,
|
26
|
-
:sync_log => true,
|
27
|
-
:working_dir => File.dirname(history)}
|
28
|
-
|
29
|
-
# we use STDOUT for the logger because daemon_spawn directs STDOUT to a log file
|
30
|
-
streamer_control_args = [server, @key, history, @plugin_ids, @options[:streaming_key],Logger.new(STDOUT)]
|
31
|
-
|
32
|
-
if daemon_command.include? "start" # can be 'start' or 'restart'
|
33
|
-
if File.exists?(streamer_pid_file)
|
34
|
-
puts("PID file existed. Restarting ...") if $stdin.tty?
|
35
|
-
Scout::StreamerControl.restart(streamer_control_options,streamer_control_args)
|
36
|
-
else
|
37
|
-
puts("Starting ... ") if $stdin.tty?
|
38
|
-
Scout::StreamerControl.start(streamer_control_options,streamer_control_args)
|
39
|
-
end
|
40
|
-
elsif daemon_command == "stop"
|
41
|
-
puts("Stopping ...") if $stdin.tty?
|
42
|
-
Scout::StreamerControl.stop(streamer_control_options,[])
|
43
|
-
else
|
44
|
-
puts "usage: scout stream [your_scout_key] [start|stop]"
|
45
|
-
exit(1)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
module Scout
|
2
|
-
class StreamerControl < DaemonSpawn::Base
|
3
|
-
|
4
|
-
# args are: server, key, history, plugin_ids, streaming_key, log
|
5
|
-
def start(args)
|
6
|
-
#puts "StreamerControl#start PID=#{pid}"
|
7
|
-
server,key,history,plugin_ids,streaming_key,log = args
|
8
|
-
$continue_streaming = true #needed for streamer to loop
|
9
|
-
|
10
|
-
@scout = Scout::Streamer.new(server, key, history, plugin_ids, streaming_key, log)
|
11
|
-
# puts "StreamerControl - done. Removing pid_file at #{pid_file} containing PID=#{pid}"
|
12
|
-
File.unlink(pid_file) if File.exists?(pid_file) # a better way of doing this?
|
13
|
-
end
|
14
|
-
|
15
|
-
def stop
|
16
|
-
$continue_streaming = false
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
|
22
|
-
# This is how to start using this file as a start/stop command processor, and passing arguments in via command line:
|
23
|
-
# Since there's no second argument to StreamerControl.spawn!, it uses command-line arguments.
|
24
|
-
#Scout::StreamerControl.spawn!({:log_file => File.expand_path('~/.scout/scout_streamer.log'),
|
25
|
-
# :pid_file => File.expand_path('~/.scout/scout_streamer.pid'),
|
26
|
-
# :sync_log => true,
|
27
|
-
# :working_dir => File.dirname(__FILE__)})
|
28
|
-
|
29
|
-
|
30
|
-
# This is how you start it from anywhere in code:
|
31
|
-
# Since there's a second argument to StreamerControl.spawn!, it uses those instead of command-line arguments.
|
32
|
-
#Scout::StreamerControl.start({:log_file => File.expand_path('~/.scout/scout_streamer.log'),
|
33
|
-
# :pid_file => File.expand_path('~/.scout/scout_streamer.pid'),
|
34
|
-
# :sync_log => true,
|
35
|
-
# :working_dir => File.dirname(__FILE__)},
|
36
|
-
# ["ServerInstance", "abcd-1234-123g2-12321", "~/.scout/history.yml",[1,2,3,4],nil])
|
37
|
-
|
38
|
-
# This is how you stop in anywhere in code:
|
39
|
-
# Since there's a second argument to StreamerControl.spawn!, it uses those instead of command-line arguments.
|
40
|
-
#Scout::StreamerControl.stop({:log_file => File.expand_path('~/.scout/scout_streamer.log'),
|
41
|
-
# :pid_file => File.expand_path('~/.scout/scout_streamer.pid'),
|
42
|
-
# :sync_log => true,
|
43
|
-
# :working_dir => File.dirname(__FILE__)},[])
|