scout 5.6.6 → 5.6.7.pre
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.markdown +5 -0
- data/lib/scout/command/install.rb +1 -1
- data/lib/scout/command/run.rb +2 -2
- data/lib/scout/command/troubleshoot.rb +2 -4
- data/lib/scout/command.rb +5 -6
- data/lib/scout/server.rb +3 -4
- data/lib/scout/server_base.rb +1 -2
- data/lib/scout/streamer.rb +2 -4
- data/lib/scout/streamer_daemon.rb +4 -4
- data/lib/scout/version.rb +1 -1
- data/test/scout_test.rb +10 -23
- metadata +42 -44
data/CHANGELOG.markdown
CHANGED
@@ -19,7 +19,7 @@ module Scout
|
|
19
19
|
|
20
20
|
puts "\nAttempting to contact the server..."
|
21
21
|
begin
|
22
|
-
Scout::Server.new(server, key, history, log, server_name, @http_proxy, @https_proxy, @roles,
|
22
|
+
Scout::Server.new(server, key, history, log, server_name, @http_proxy, @https_proxy, @roles, @hostname) do |scout|
|
23
23
|
scout.fetch_plan
|
24
24
|
scout.run_plugins_by_plan
|
25
25
|
end
|
data/lib/scout/command/run.rb
CHANGED
@@ -7,10 +7,10 @@ module Scout
|
|
7
7
|
key = @args.first
|
8
8
|
# TODO: this is an awkward way to force creation of the config directory. Could use a little refactoring.
|
9
9
|
configuration_directory = config_dir
|
10
|
-
log.debug("Running Scout [#{Scout::VERSION}] on #{@
|
10
|
+
log.debug("Running Scout [#{Scout::VERSION}] on #{@hostname}") if log
|
11
11
|
log.debug("Configuration directory is #{configuration_directory} ") if log
|
12
12
|
# TODO: too much external logic of command doing things TO server. This should be moved into the server class.
|
13
|
-
@scout = Scout::Server.new(server, key, history, log, server_name, @http_proxy, @https_proxy, @roles,
|
13
|
+
@scout = Scout::Server.new(server, key, history, log, server_name, @http_proxy, @https_proxy, @roles, @hostname)
|
14
14
|
@scout.load_history
|
15
15
|
|
16
16
|
unless $stdin.tty?
|
@@ -10,8 +10,7 @@ module Scout
|
|
10
10
|
class Command
|
11
11
|
class APITimeoutError < RuntimeError; end
|
12
12
|
|
13
|
-
HTTP_HEADERS = { "Client-Version" => Scout::VERSION
|
14
|
-
"Client-Hostname" => Socket.gethostname}
|
13
|
+
HTTP_HEADERS = { "Client-Version" => Scout::VERSION }
|
15
14
|
|
16
15
|
class Troubleshoot < Command
|
17
16
|
|
@@ -27,8 +26,7 @@ module Scout
|
|
27
26
|
puts "Gathering troubleshooting information about your Scout install ... "
|
28
27
|
|
29
28
|
heading "Scout Info"
|
30
|
-
bullet "Hostname",
|
31
|
-
bullet "FQDN", @fqdn
|
29
|
+
bullet "Hostname", @hostname
|
32
30
|
bullet "History file", history
|
33
31
|
bullet "Version", Scout::VERSION
|
34
32
|
|
data/lib/scout/command.rb
CHANGED
@@ -87,9 +87,9 @@ module Scout
|
|
87
87
|
"Optional https proxy for SSL traffic." ) do |https_proxy|
|
88
88
|
options[:https_proxy] = https_proxy
|
89
89
|
end
|
90
|
-
opts.on("--
|
91
|
-
"
|
92
|
-
options[:
|
90
|
+
opts.on("--hostname HOSTNAME", String,
|
91
|
+
"Optionally override the hostname." ) do |hostname|
|
92
|
+
options[:hostname] = hostname
|
93
93
|
end
|
94
94
|
|
95
95
|
opts.separator " "
|
@@ -177,8 +177,7 @@ module Scout
|
|
177
177
|
@server_name = options[:server_name]
|
178
178
|
@http_proxy = options[:http_proxy] || ""
|
179
179
|
@https_proxy = options[:https_proxy] || ""
|
180
|
-
@
|
181
|
-
|
180
|
+
@hostname = options[:hostname] || Socket.gethostname
|
182
181
|
@options = options
|
183
182
|
@args = args
|
184
183
|
|
@@ -190,7 +189,7 @@ module Scout
|
|
190
189
|
|
191
190
|
end
|
192
191
|
|
193
|
-
attr_reader :server, :history, :config_dir, :log_path, :server_name, :
|
192
|
+
attr_reader :server, :history, :config_dir, :log_path, :server_name, :hostname
|
194
193
|
|
195
194
|
|
196
195
|
def verbose?
|
data/lib/scout/server.rb
CHANGED
@@ -27,7 +27,7 @@ module Scout
|
|
27
27
|
attr_reader :client_key
|
28
28
|
|
29
29
|
# Creates a new Scout Server connection.
|
30
|
-
def initialize(server, client_key, history_file, logger = nil, server_name=nil, http_proxy='', https_proxy='', roles='',
|
30
|
+
def initialize(server, client_key, history_file, logger = nil, server_name=nil, http_proxy='', https_proxy='', roles='', hostname = nil)
|
31
31
|
@server = server
|
32
32
|
@client_key = client_key
|
33
33
|
@history_file = history_file
|
@@ -37,7 +37,7 @@ module Scout
|
|
37
37
|
@http_proxy = http_proxy
|
38
38
|
@https_proxy = https_proxy
|
39
39
|
@roles = roles || ''
|
40
|
-
@
|
40
|
+
@hostname = hostname
|
41
41
|
@plugin_plan = []
|
42
42
|
@plugins_with_signature_errors = []
|
43
43
|
@directives = {} # take_snapshots, interval, sleep_interval
|
@@ -49,7 +49,6 @@ module Scout
|
|
49
49
|
@history_tmp_file = history_file+'.tmp'
|
50
50
|
@plugin_config = load_plugin_configs(@plugin_config_path)
|
51
51
|
@data_file = Scout::DataFile.new(@history_file,@logger)
|
52
|
-
|
53
52
|
# the block is only passed for install and test, since we split plan retrieval outside the lockfile for run
|
54
53
|
if block_given?
|
55
54
|
load_history
|
@@ -61,7 +60,7 @@ module Scout
|
|
61
60
|
def refresh?
|
62
61
|
return true if !ping_key or account_public_key_changed? # fetch the plan again if the account key is modified/created
|
63
62
|
|
64
|
-
url=URI.join( @server.sub("https://","http://"), "/clients/#{ping_key}/ping.scout?roles=#{@roles}&
|
63
|
+
url=URI.join( @server.sub("https://","http://"), "/clients/#{ping_key}/ping.scout?roles=#{@roles}&hostname=#{URI.encode(@hostname)}")
|
65
64
|
|
66
65
|
headers = {"x-scout-tty" => ($stdin.tty? ? 'true' : 'false')}
|
67
66
|
if @history["plan_last_modified"] and @history["old_plugins"]
|
data/lib/scout/server_base.rb
CHANGED
@@ -16,7 +16,6 @@ module Scout
|
|
16
16
|
|
17
17
|
# Headers passed up with all API requests.
|
18
18
|
HTTP_HEADERS = { "Client-Version" => Scout::VERSION,
|
19
|
-
"Client-Hostname" => Socket.gethostname,
|
20
19
|
"Accept-Encoding" => "gzip" }
|
21
20
|
|
22
21
|
|
@@ -29,7 +28,7 @@ module Scout
|
|
29
28
|
"/clients/CLIENT_KEY/#{url_name}.scout".
|
30
29
|
gsub(/\bCLIENT_KEY\b/, @client_key).
|
31
30
|
gsub(/\b[A-Z_]+\b/) { |k| options[k.downcase.to_sym] || k })
|
32
|
-
uri.query = ["roles=#{@roles}","
|
31
|
+
uri.query = ["roles=#{@roles}","hostname=#{URI.encode(@hostname)}","tty=#{$stdin.tty? ? 'y' : 'n'}"].join('&')
|
33
32
|
uri
|
34
33
|
end
|
35
34
|
|
data/lib/scout/streamer.rb
CHANGED
@@ -9,7 +9,7 @@ module Scout
|
|
9
9
|
|
10
10
|
# * history_file is the *path* to the history file
|
11
11
|
# * plugin_ids is an array of integers
|
12
|
-
def initialize(history_file, streaming_key, p_app_id, p_key, p_secret, plugin_ids, logger = nil)
|
12
|
+
def initialize(history_file, streaming_key, p_app_id, p_key, p_secret, plugin_ids, hostname, logger = nil)
|
13
13
|
@@continue_streaming = true
|
14
14
|
@history_file = history_file
|
15
15
|
@history = Hash.new
|
@@ -27,8 +27,6 @@ module Scout
|
|
27
27
|
|
28
28
|
info("Streamer PID=#{$$} starting")
|
29
29
|
|
30
|
-
fqdn=`hostname -f`
|
31
|
-
|
32
30
|
# load plugin history
|
33
31
|
load_history
|
34
32
|
|
@@ -72,7 +70,7 @@ module Scout
|
|
72
70
|
:class=>plugin_hash['code_class']}
|
73
71
|
end
|
74
72
|
|
75
|
-
bundle={:hostname=>
|
73
|
+
bundle={:hostname=>hostname,
|
76
74
|
:server_time=>Time.now.strftime("%I:%M:%S %p"),
|
77
75
|
:num_processes=>`ps -e | wc -l`.chomp.to_i,
|
78
76
|
:plugins=>plugins }
|
@@ -2,7 +2,7 @@ module Scout
|
|
2
2
|
class StreamerDaemon < DaemonSpawn::Base
|
3
3
|
|
4
4
|
# this is the public-facing method for starting the streaming daemon
|
5
|
-
def self.start_daemon(history_file, streamer_command)
|
5
|
+
def self.start_daemon(history_file, streamer_command, hostname)
|
6
6
|
streamer_log_file=File.join(File.dirname(history_file),"scout_streamer.log")
|
7
7
|
streamer_pid_file=File.join(File.dirname(history_file),"scout_streamer.pid")
|
8
8
|
|
@@ -21,7 +21,7 @@ module Scout
|
|
21
21
|
plugin_ids = tokens.map(&:to_i)
|
22
22
|
|
23
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)]
|
24
|
+
streamer_args = [history_file,streaming_key,p_app_id,p_key,p_secret,plugin_ids,hostname,Logger.new(STDOUT)]
|
25
25
|
if File.exists?(streamer_pid_file)
|
26
26
|
Scout::StreamerDaemon.restart(daemon_spawn_options, streamer_args)
|
27
27
|
else
|
@@ -45,8 +45,8 @@ module Scout
|
|
45
45
|
|
46
46
|
# this method is called by DaemonSpawn's class start method.
|
47
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)
|
48
|
+
history,streaming_key,p_app_id,p_key,p_secret,plugin_ids,hostname,log = streamer_args
|
49
|
+
@scout = Scout::Streamer.new(history, streaming_key, p_app_id, p_key, p_secret, plugin_ids, hostname, log)
|
50
50
|
end
|
51
51
|
|
52
52
|
# this method is called by DaemonSpawn's class start method.
|
data/lib/scout/version.rb
CHANGED
data/test/scout_test.rb
CHANGED
@@ -60,7 +60,6 @@ class ScoutTest < Test::Unit::TestCase
|
|
60
60
|
@db_role=@roles_account.roles.find_by_name("db")
|
61
61
|
@app_role=@roles_account.roles.find_by_name("app")
|
62
62
|
@hostname = `hostname`.chomp
|
63
|
-
@fqdn = `hostname -f`.chomp
|
64
63
|
end
|
65
64
|
|
66
65
|
def test_should_checkin_during_interactive_install
|
@@ -416,7 +415,7 @@ mybar=100
|
|
416
415
|
scout(@client.key) # to write the initial history file. Sinatra MUST be running
|
417
416
|
$continue_streaming = true # so the streamer will run once
|
418
417
|
# for debugging, make last arg Logger.new(STDOUT)
|
419
|
-
Scout::Streamer.new(PATH_TO_DATA_FILE,"bogus_streaming_key","a","b","c",[@client.plugins.first.id]+plugins.map(&:id),nil)
|
418
|
+
Scout::Streamer.new(PATH_TO_DATA_FILE,"bogus_streaming_key","a","b","c",[@client.plugins.first.id]+plugins.map(&:id),"blade",nil)
|
420
419
|
end
|
421
420
|
|
422
421
|
streams = Pusher::Channel.streamer_data # set by the mock_pusher call
|
@@ -446,7 +445,7 @@ mybar=100
|
|
446
445
|
mock_pusher do
|
447
446
|
$continue_streaming = true # so the streamer will run once
|
448
447
|
# for debugging, make last arg Logger.new(STDOUT)
|
449
|
-
Scout::Streamer.new(PATH_TO_DATA_FILE,"bogus_streaming_key","a","b","c",[@client.plugins.first.id],nil)
|
448
|
+
Scout::Streamer.new(PATH_TO_DATA_FILE,"bogus_streaming_key","a","b","c",[@client.plugins.first.id],"blade",nil)
|
450
449
|
end
|
451
450
|
streams = Pusher::Channel.streamer_data # set by the mock_pusher call
|
452
451
|
assert streams.is_a?(Array)
|
@@ -468,7 +467,7 @@ mybar=100
|
|
468
467
|
test_should_run_first_time
|
469
468
|
|
470
469
|
assert !File.exist?(streamer_pid_file)
|
471
|
-
|
470
|
+
puts @client.hostname
|
472
471
|
assert @client.update_attribute(:streamer_command, "start,A0000000000123,a,b,c,1,3")
|
473
472
|
exec_scout(@client.key)
|
474
473
|
assert File.exist?(streamer_pid_file)
|
@@ -491,7 +490,7 @@ mybar=100
|
|
491
490
|
exec_scout(@client.key)
|
492
491
|
#puts YAML.load(File.read(PATH_TO_DATA_FILE))['memory'].to_yaml
|
493
492
|
# for debugging, make last arg Logger.new(STDOUT)
|
494
|
-
Scout::Streamer.new(PATH_TO_DATA_FILE,"bogus_streaming_key","a","b","c",[plugin.id],nil)
|
493
|
+
Scout::Streamer.new(PATH_TO_DATA_FILE,"bogus_streaming_key","a","b","c",[plugin.id],"blade",nil)
|
495
494
|
end
|
496
495
|
|
497
496
|
streams = Pusher::Channel.streamer_data # set by the mock_pusher call
|
@@ -506,7 +505,7 @@ mybar=100
|
|
506
505
|
plugin = create_plugin(@client, "caching plugin", PLUGIN_FIXTURES[:caching][:code], PLUGIN_FIXTURES[:caching][:sig])
|
507
506
|
exec_scout(@client.key)
|
508
507
|
# for debugging, make last arg Logger.new(STDOUT)
|
509
|
-
Scout::Streamer.new(PATH_TO_DATA_FILE,"bogus_streaming_key","a","b","c",[plugin.id],nil)
|
508
|
+
Scout::Streamer.new(PATH_TO_DATA_FILE,"bogus_streaming_key","a","b","c",[plugin.id],"blade",nil)
|
510
509
|
end
|
511
510
|
|
512
511
|
streams = Pusher::Channel.streamer_data # set by the mock_pusher call
|
@@ -569,23 +568,11 @@ mybar=100
|
|
569
568
|
|
570
569
|
end
|
571
570
|
|
572
|
-
def
|
573
|
-
|
574
|
-
|
575
|
-
assert_equal @fqdn, client.fqdn
|
576
|
-
end
|
577
|
-
|
578
|
-
def test_fqdn_override
|
579
|
-
fqdn_override="app1.production.foobar.com"
|
580
|
-
scout(@roles_account.key, "--fqdn", fqdn_override)
|
581
|
-
client=@roles_account.clients.last
|
582
|
-
assert_equal fqdn_override, client.fqdn
|
583
|
-
end
|
584
|
-
|
585
|
-
def test_fqdn_has_newline
|
586
|
-
scout(@roles_account.key, "--fqdn", "db-1.foobar.com\n")
|
571
|
+
def test_hostname_override
|
572
|
+
hostname_override="app1.production.foobar.com"
|
573
|
+
scout(@roles_account.key, "--hostname", hostname_override)
|
587
574
|
client=@roles_account.clients.last
|
588
|
-
assert_equal
|
575
|
+
assert_equal hostname_override, client.hostname
|
589
576
|
end
|
590
577
|
|
591
578
|
|
@@ -722,7 +709,7 @@ mybar=100
|
|
722
709
|
def create_plugin(client,name, code, signature)
|
723
710
|
p=client.plugins.create(:name=>name)
|
724
711
|
PluginMeta.create(:plugin=>p)
|
725
|
-
p.meta.code=code
|
712
|
+
p.reload.meta.code=code
|
726
713
|
p.code_md5_signature=Digest::MD5.hexdigest(code)
|
727
714
|
p.signature=signature
|
728
715
|
p.save
|
metadata
CHANGED
@@ -1,44 +1,40 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: scout
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.6.
|
5
|
-
prerelease:
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 5.6.7.pre
|
6
5
|
platform: ruby
|
7
|
-
authors:
|
6
|
+
authors:
|
8
7
|
- Andre Lewis
|
9
8
|
- Derek Haynes
|
10
9
|
- James Edward Gray II
|
11
10
|
autorequire:
|
12
11
|
bindir: bin
|
13
12
|
cert_chain: []
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
|
14
|
+
date: 2013-04-25 00:00:00 -07:00
|
15
|
+
default_executable:
|
16
|
+
dependencies:
|
17
|
+
- !ruby/object:Gem::Dependency
|
17
18
|
name: elif
|
18
|
-
requirement: !ruby/object:Gem::Requirement
|
19
|
-
none: false
|
20
|
-
requirements:
|
21
|
-
- - ! '>='
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: '0'
|
24
19
|
type: :runtime
|
25
|
-
|
26
|
-
version_requirements: !ruby/object:Gem::Requirement
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
description:
|
33
|
-
server monitoring service.
|
20
|
+
version_requirement:
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: "0"
|
26
|
+
version:
|
27
|
+
description: |
|
28
|
+
The scout gem reports metrics to scoutapp.com, an easy-to-use hosted server monitoring service.
|
34
29
|
|
35
|
-
'
|
36
30
|
email: support@scoutapp.com
|
37
|
-
executables:
|
31
|
+
executables:
|
38
32
|
- scout
|
39
33
|
extensions: []
|
34
|
+
|
40
35
|
extra_rdoc_files: []
|
41
|
-
|
36
|
+
|
37
|
+
files:
|
42
38
|
- .gitignore
|
43
39
|
- CHANGELOG.markdown
|
44
40
|
- Gemfile
|
@@ -223,32 +219,34 @@ files:
|
|
223
219
|
- vendor/signature/spec/signature_spec.rb
|
224
220
|
- vendor/signature/spec/spec_helper.rb
|
225
221
|
- vendor/util/lib/core_extensions.rb
|
222
|
+
has_rdoc: true
|
226
223
|
homepage: http://scoutapp.com
|
227
224
|
licenses: []
|
225
|
+
|
228
226
|
post_install_message:
|
229
227
|
rdoc_options: []
|
230
|
-
|
228
|
+
|
229
|
+
require_paths:
|
231
230
|
- lib
|
232
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
231
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
232
|
+
requirements:
|
233
|
+
- - ">="
|
234
|
+
- !ruby/object:Gem::Version
|
235
|
+
version: "0"
|
236
|
+
version:
|
237
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
238
|
+
requirements:
|
239
|
+
- - ">"
|
240
|
+
- !ruby/object:Gem::Version
|
241
|
+
version: 1.3.1
|
242
|
+
version:
|
244
243
|
requirements: []
|
244
|
+
|
245
245
|
rubyforge_project: scout
|
246
|
-
rubygems_version: 1.
|
246
|
+
rubygems_version: 1.3.5
|
247
247
|
signing_key:
|
248
248
|
specification_version: 3
|
249
|
-
summary: Scout is an easy-to-use hosted server monitoring service. The scout Ruby
|
250
|
-
|
251
|
-
web interface, to monitor a server.
|
252
|
-
test_files:
|
249
|
+
summary: Scout is an easy-to-use hosted server monitoring service. The scout Ruby gem reports metrics to our service. The agent runs plugins, configured via the Scout web interface, to monitor a server.
|
250
|
+
test_files:
|
253
251
|
- test/plugins/disk_usage.rb
|
254
252
|
- test/scout_test.rb
|