scout 5.6.6 → 5.6.7.pre
Sign up to get free protection for your applications and to get access to all the features.
- 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
|