scout 5.5.6.pre → 5.5.6.pre4
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 → CHANGELOG.markdown} +60 -56
- data/lib/scout/command/troubleshoot.rb +1 -0
- data/lib/scout/server.rb +27 -10
- data/lib/scout/version.rb +1 -1
- data/test/scout_test.rb +74 -65
- metadata +6 -11
|
@@ -1,113 +1,117 @@
|
|
|
1
|
-
|
|
1
|
+
# 5.5.6
|
|
2
2
|
|
|
3
|
+
* Fixing broken tests
|
|
3
4
|
* PID file rescue fix
|
|
5
|
+
* Only running local plugins if a Scout::Plugin
|
|
6
|
+
* Added hostname to troubleshooting output
|
|
7
|
+
* Atomic Write history file when saving
|
|
4
8
|
|
|
5
|
-
|
|
9
|
+
# 5.5.5
|
|
6
10
|
|
|
7
11
|
* Fix for blank PID file
|
|
8
12
|
* Added client version + hostname when starting run in debug mode
|
|
9
13
|
|
|
10
|
-
|
|
14
|
+
# 5.5.4
|
|
11
15
|
|
|
12
16
|
* Fixes warnings with Ruby 1.9.3p0
|
|
13
17
|
|
|
14
|
-
|
|
18
|
+
# 5.5.3
|
|
15
19
|
|
|
16
20
|
* Fixed 'shadowing outer local variable' messages
|
|
17
21
|
|
|
18
|
-
|
|
22
|
+
# 5.5.2
|
|
19
23
|
|
|
20
24
|
* Fixed --http-proxy & --https-proxy support, which were broken in 5.5.0
|
|
21
25
|
|
|
22
|
-
|
|
26
|
+
# 5.5.1
|
|
23
27
|
|
|
24
28
|
* Updating history on plugin timeouts (last run & memory). Previously, the data from the last successful run was retained.
|
|
25
29
|
|
|
26
|
-
|
|
30
|
+
# 5.5.0
|
|
27
31
|
|
|
28
32
|
* yes, the version number jumped from 5.3.5 to 5.5.0
|
|
29
33
|
* Implemented "real time" mode
|
|
30
34
|
|
|
31
|
-
|
|
35
|
+
# 5.3.5
|
|
32
36
|
|
|
33
37
|
* Moved proxy support to explicit command line flags --http_proxy and https_proxy
|
|
34
38
|
* fixed two unused variables that were causing warnings under 1.9.3
|
|
35
39
|
|
|
36
|
-
|
|
40
|
+
# 5.3.4
|
|
37
41
|
|
|
38
42
|
* Incorporating sleep interval into Server#time_to_checkin?
|
|
39
43
|
* Added proxy support command line flags
|
|
40
44
|
|
|
41
|
-
|
|
45
|
+
# 5.3.3
|
|
42
46
|
|
|
43
47
|
* Sending embedded options to server for local & plugin overrides.
|
|
44
48
|
* Reading options for local plugins
|
|
45
49
|
* Added support for an account-specific public key (scout_rsa.pub)
|
|
46
50
|
|
|
47
|
-
|
|
51
|
+
# 5.3.2
|
|
48
52
|
|
|
49
53
|
* New --name="My Server" option to specify server name from the scout command.
|
|
50
54
|
|
|
51
|
-
|
|
55
|
+
# 5.3.1
|
|
52
56
|
|
|
53
57
|
* Write a log message if a full disk prevents Scout from creating a history file.
|
|
54
58
|
|
|
55
|
-
|
|
59
|
+
# 5.3.0
|
|
56
60
|
|
|
57
61
|
* Ping over http instead of https. All plan retrievals and check-ins are still SSL
|
|
58
62
|
* Added ability to post troubleshooting report back to scoutapp.com
|
|
59
63
|
|
|
60
|
-
|
|
64
|
+
# 5.2.2
|
|
61
65
|
|
|
62
66
|
* More graceful handling of *rare* client_history.yaml corruption
|
|
63
67
|
|
|
64
|
-
|
|
68
|
+
# 5.2.1
|
|
65
69
|
|
|
66
70
|
* Added private-key based code signing
|
|
67
71
|
* Added local plugin overrides
|
|
68
72
|
* Added local ad-hoc plugins
|
|
69
73
|
|
|
70
|
-
|
|
74
|
+
# 5.1.5
|
|
71
75
|
|
|
72
76
|
* Added sleep interval directive. Agent will only sleep when used in non-interactive mode.
|
|
73
77
|
|
|
74
|
-
|
|
78
|
+
# 5.1.4
|
|
75
79
|
|
|
76
80
|
* Normalized header formats
|
|
77
81
|
|
|
78
|
-
|
|
82
|
+
# 5.1.3
|
|
79
83
|
|
|
80
84
|
* Added debug output when contact with server cannot be established
|
|
81
85
|
* Updated to json_pure 1.4.2
|
|
82
86
|
|
|
83
|
-
|
|
87
|
+
# 5.1.2
|
|
84
88
|
|
|
85
89
|
* Added backtrace to Plugin code compile errors
|
|
86
90
|
|
|
87
|
-
|
|
91
|
+
# 5.1.1
|
|
88
92
|
|
|
89
93
|
* Fixed Counter functionality for per-minute metrics
|
|
90
94
|
|
|
91
|
-
|
|
95
|
+
# 5.1.0
|
|
92
96
|
|
|
93
97
|
* Agent now reports data on initial install
|
|
94
98
|
* If history file is empty, Agent will resume normal checkin when it can write history file again (thx @jnewland)
|
|
95
99
|
* inclusion of counter functionality (thx @lindvall)
|
|
96
100
|
|
|
97
|
-
|
|
101
|
+
# 5.0.3
|
|
98
102
|
|
|
99
103
|
* fixed regression: Error when running `scout AGENT_KEY` without first running scout and manually entering the agent key
|
|
100
104
|
|
|
101
|
-
|
|
105
|
+
# 5.0.2
|
|
102
106
|
|
|
103
107
|
* fixed silent failure when plugin didn't inherit from Scout::Plugin
|
|
104
108
|
* beefed up error reporting
|
|
105
109
|
|
|
106
|
-
|
|
110
|
+
# 5.0.1
|
|
107
111
|
|
|
108
112
|
* plugin errors are now reported to scout server as errors, for easier plugin troubleshooting
|
|
109
113
|
|
|
110
|
-
|
|
114
|
+
# 5.0.0
|
|
111
115
|
|
|
112
116
|
* crontab must now run Scout every minute, regardless of what plan you are on
|
|
113
117
|
* Support for server downtime notifications
|
|
@@ -116,16 +120,16 @@
|
|
|
116
120
|
* Easier format for providing plugin arguments in test mode (scout help for details)
|
|
117
121
|
* Prints plugin arguments, including defaults, when run in test mode
|
|
118
122
|
|
|
119
|
-
|
|
123
|
+
# 4.0.2
|
|
120
124
|
|
|
121
125
|
* Check-in once after all plugins are run instead of once for each plugin for
|
|
122
126
|
better efficiency
|
|
123
127
|
|
|
124
|
-
|
|
128
|
+
# 4.0.1
|
|
125
129
|
|
|
126
130
|
* Fixed a regression that broken support for some very old plugins
|
|
127
131
|
|
|
128
|
-
|
|
132
|
+
# 4.0.0
|
|
129
133
|
|
|
130
134
|
* Switched to the new API URL's
|
|
131
135
|
* Converted to JSON (using the vendored json_pure) from Marshal
|
|
@@ -140,41 +144,41 @@
|
|
|
140
144
|
* Started sending an HTTP_CLIENT_HOSTNAME header to the Scout server
|
|
141
145
|
* Changed history file storage to be by plugin ID, instead of name
|
|
142
146
|
|
|
143
|
-
|
|
147
|
+
# 2.0.7
|
|
144
148
|
|
|
145
149
|
* Improved PID file error messages
|
|
146
150
|
* Adding a redundant Timeout to work around Net::HTTP hangs
|
|
147
151
|
|
|
148
|
-
|
|
152
|
+
# 2.0.6
|
|
149
153
|
|
|
150
154
|
* Adding plugin dependency support via the new needs() class method
|
|
151
155
|
* Improved Scout error backtraces (patch from dougbarth)
|
|
152
156
|
|
|
153
|
-
|
|
157
|
+
# 2.0.5
|
|
154
158
|
|
|
155
159
|
* Another Version bump to update gem servers
|
|
156
160
|
|
|
157
|
-
|
|
161
|
+
# 2.0.4
|
|
158
162
|
|
|
159
163
|
* Version bump to update gem servers
|
|
160
164
|
|
|
161
|
-
|
|
165
|
+
# 2.0.3
|
|
162
166
|
|
|
163
167
|
* Added documentation for Scout#data_for_server method for new plugin creation
|
|
164
168
|
* Added Version option for printing the current version
|
|
165
169
|
* Removed a spurious "puts" debug statement
|
|
166
170
|
|
|
167
|
-
|
|
171
|
+
# 2.0.2
|
|
168
172
|
|
|
169
173
|
* Fixed the logging bug I introduced by moving the PID check into the Command
|
|
170
174
|
class
|
|
171
175
|
|
|
172
|
-
|
|
176
|
+
# 2.0.1
|
|
173
177
|
|
|
174
178
|
* Added some safety code to ensure SystemExit exceptions are not caught in our
|
|
175
179
|
rescue clauses
|
|
176
180
|
|
|
177
|
-
|
|
181
|
+
# 2.0.0
|
|
178
182
|
|
|
179
183
|
* Reworked scout executable to work off an underlying command structure, similar
|
|
180
184
|
to Subversion (a bare call and a call with just the key are supported for
|
|
@@ -182,48 +186,48 @@
|
|
|
182
186
|
* Added various helper functions to Scout::Plugin to ease development
|
|
183
187
|
* Added a client clone command for instant setups
|
|
184
188
|
|
|
185
|
-
|
|
189
|
+
# 1.1.8
|
|
186
190
|
|
|
187
191
|
* Rectifying missing checkin -- this unifies 1.1.6 and 1.1.7 changes to gem
|
|
188
192
|
|
|
189
|
-
|
|
193
|
+
# 1.1.7
|
|
190
194
|
|
|
191
195
|
* Introducing a delta for the plugin run interval, now allowing runs even if
|
|
192
196
|
they are up to 30 seconds early
|
|
193
197
|
|
|
194
|
-
|
|
198
|
+
# 1.1.6
|
|
195
199
|
|
|
196
200
|
* minor documentation update in scout installation wizard
|
|
197
201
|
|
|
198
|
-
|
|
202
|
+
# 1.1.5
|
|
199
203
|
|
|
200
204
|
* A more robust solution for plugin removal
|
|
201
205
|
* Added seconds to logging
|
|
202
206
|
|
|
203
|
-
|
|
207
|
+
# 1.1.4
|
|
204
208
|
|
|
205
209
|
* Trim all space from the client key during install
|
|
206
210
|
* Trying a fix for the plugin removal errors
|
|
207
211
|
|
|
208
|
-
|
|
212
|
+
# 1.1.3
|
|
209
213
|
|
|
210
214
|
* Fixed bug with running plugin using the -p option, new ensure wasn't returning
|
|
211
215
|
the data
|
|
212
216
|
|
|
213
|
-
|
|
217
|
+
# 1.1.2
|
|
214
218
|
|
|
215
219
|
* Fixed the plugin interval not running on time due to a ">=" bug
|
|
216
220
|
|
|
217
|
-
|
|
221
|
+
# 1.1.1
|
|
218
222
|
|
|
219
223
|
* Fixed the double plugin load bug
|
|
220
224
|
* Ensuring that plugins are unloaded, even on error
|
|
221
225
|
|
|
222
|
-
|
|
226
|
+
# 1.1.0
|
|
223
227
|
|
|
224
228
|
* Using better url.path + url.query if present to properly encode URLs
|
|
225
229
|
|
|
226
|
-
|
|
230
|
+
# 1.0.9
|
|
227
231
|
|
|
228
232
|
* Fixed bug when plugin code would not compile, throws Exception
|
|
229
233
|
* Added ability to test/call scout on non-https servers (for debugging)
|
|
@@ -232,48 +236,48 @@
|
|
|
232
236
|
values (using reports, alerts, errors symbols)
|
|
233
237
|
* Added test suite, which is now the default rake task
|
|
234
238
|
|
|
235
|
-
|
|
239
|
+
# 1.0.8
|
|
236
240
|
|
|
237
241
|
* Added optional report field scout_time
|
|
238
242
|
* Changed #error method name to #scout_error to fix conflict with Logger#error
|
|
239
243
|
|
|
240
|
-
|
|
244
|
+
# 1.0.7
|
|
241
245
|
|
|
242
246
|
* Increased the plugin timeout to 60 seconds
|
|
243
247
|
* Added PID file protection to the client so only one copy will run at a time
|
|
244
248
|
* Fixed a bug that caused the wrong error message to be shown for the case when
|
|
245
249
|
a plugin times out
|
|
246
250
|
|
|
247
|
-
|
|
251
|
+
# 1.0.6
|
|
248
252
|
|
|
249
253
|
* Improved error backtrace for local testing
|
|
250
254
|
|
|
251
|
-
|
|
255
|
+
# 1.0.5
|
|
252
256
|
|
|
253
257
|
* Added more documentation to Server and Plugin classes
|
|
254
258
|
* Fixed an issue where expand_path(~) would not work if HOME was not set, which
|
|
255
259
|
should help Scout run in OS X's LaunchDaemon using launchd
|
|
256
260
|
|
|
257
|
-
|
|
261
|
+
# 1.0.4
|
|
258
262
|
|
|
259
263
|
* Enhanced the -o option to take a Ruby Hash
|
|
260
264
|
* Fixed an issue where a failed plugin run would cause the client to skip all
|
|
261
265
|
other plugins
|
|
262
266
|
|
|
263
|
-
|
|
267
|
+
# 1.0.3
|
|
264
268
|
|
|
265
269
|
* Refactored to allow testing of plugins locally using -p or --plugin option
|
|
266
270
|
and -o or --plugin-options option
|
|
267
271
|
|
|
268
|
-
|
|
272
|
+
# 1.0.2
|
|
269
273
|
|
|
270
274
|
* Updated to use SSL by default for all communication to scout server
|
|
271
275
|
* Added elif dependency
|
|
272
276
|
|
|
273
|
-
|
|
277
|
+
# 1.0.1
|
|
274
278
|
|
|
275
279
|
* Fixed bug relating to history file – not using specified history file path
|
|
276
280
|
|
|
277
|
-
|
|
281
|
+
# 1.0.0
|
|
278
282
|
|
|
279
|
-
* Initial release
|
|
283
|
+
* Initial release
|
data/lib/scout/server.rb
CHANGED
|
@@ -43,6 +43,7 @@ module Scout
|
|
|
43
43
|
@local_plugin_path = File.dirname(history_file) # just put overrides and ad-hoc plugins in same directory as history file.
|
|
44
44
|
@plugin_config_path = File.join(@local_plugin_path, "plugins.properties")
|
|
45
45
|
@account_public_key_path = File.join(@local_plugin_path, "scout_rsa.pub")
|
|
46
|
+
@history_tmp_file = history_file+'.tmp'
|
|
46
47
|
@plugin_config = load_plugin_configs(@plugin_config_path)
|
|
47
48
|
|
|
48
49
|
# the block is only passed for install and test, since we split plan retrieval outside the lockfile for run
|
|
@@ -169,7 +170,7 @@ module Scout
|
|
|
169
170
|
nil
|
|
170
171
|
end
|
|
171
172
|
begin
|
|
172
|
-
{
|
|
173
|
+
plugin = {
|
|
173
174
|
'name' => name,
|
|
174
175
|
'local_filename' => name,
|
|
175
176
|
'origin' => 'LOCAL',
|
|
@@ -177,6 +178,12 @@ module Scout
|
|
|
177
178
|
'interval' => 0,
|
|
178
179
|
'options' => options
|
|
179
180
|
}
|
|
181
|
+
if !plugin['code'].include?('Scout::Plugin')
|
|
182
|
+
info "Local Plugin [#{plugin_path}] doesn't look like a Scout::Plugin. Ignoring."
|
|
183
|
+
nil
|
|
184
|
+
else
|
|
185
|
+
plugin
|
|
186
|
+
end
|
|
180
187
|
rescue => e
|
|
181
188
|
info "Error trying to read local plugin: #{plugin_path} -- #{e.backtrace.join('\n')}"
|
|
182
189
|
nil
|
|
@@ -489,14 +496,9 @@ module Scout
|
|
|
489
496
|
begin
|
|
490
497
|
@history = YAML.load(contents)
|
|
491
498
|
rescue
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
File.open(backup_path,"w"){|f|f.write contents}
|
|
495
|
-
File.delete(@history_file)
|
|
496
|
-
create_blank_history
|
|
497
|
-
@history = File.open(@history_file) { |file| YAML.load(file) }
|
|
499
|
+
backup_history_and_recreate(contents,
|
|
500
|
+
"Couldn't parse the history file. Deleting it and resetting to an empty history file. Keeping a backup.")
|
|
498
501
|
end
|
|
499
|
-
|
|
500
502
|
# YAML interprets an empty file as false. This condition catches that
|
|
501
503
|
if !@history
|
|
502
504
|
info "There is a problem with the history file at '#{@history_file}'. The root cause is sometimes a full disk. "+
|
|
@@ -505,6 +507,17 @@ module Scout
|
|
|
505
507
|
end
|
|
506
508
|
info "History file loaded."
|
|
507
509
|
end
|
|
510
|
+
|
|
511
|
+
# Called when a history file is determined to be corrupt / truncated / etc. Backup the existing file for later
|
|
512
|
+
# troubleshooting and create a fresh history file.
|
|
513
|
+
def backup_history_and_recreate(contents,message)
|
|
514
|
+
backup_path=File.join(File.dirname(@history_file), "history.corrupt")
|
|
515
|
+
info(message)
|
|
516
|
+
File.open(backup_path,"w"){|f|f.write contents}
|
|
517
|
+
File.delete(@history_file)
|
|
518
|
+
create_blank_history
|
|
519
|
+
@history = File.open(@history_file) { |file| YAML.load(file) }
|
|
520
|
+
end
|
|
508
521
|
|
|
509
522
|
# creates a blank history file
|
|
510
523
|
def create_blank_history
|
|
@@ -515,10 +528,14 @@ module Scout
|
|
|
515
528
|
info "History file created."
|
|
516
529
|
end
|
|
517
530
|
|
|
518
|
-
# Saves the history file to disk.
|
|
531
|
+
# Saves the history file to disk.
|
|
532
|
+
#
|
|
533
|
+
# Uses an Atomic Write - first writes to a tmp file then replace the history file.
|
|
534
|
+
# Ensures reads on the history file don't see a partial write.
|
|
519
535
|
def save_history
|
|
520
536
|
debug "Saving history file..."
|
|
521
|
-
File.open(@
|
|
537
|
+
File.open(@history_tmp_file, "w") { |file| YAML.dump(@history, file) }
|
|
538
|
+
FileUtils.mv(@history_tmp_file, @history_file)
|
|
522
539
|
info "History file saved."
|
|
523
540
|
end
|
|
524
541
|
|
data/lib/scout/version.rb
CHANGED
data/test/scout_test.rb
CHANGED
|
@@ -4,19 +4,22 @@
|
|
|
4
4
|
# Scout internal note: See documentation in scout_sinatra for running tests.
|
|
5
5
|
#
|
|
6
6
|
$VERBOSE=nil
|
|
7
|
-
|
|
8
|
-
$LOAD_PATH << File.expand_path( File.dirname(__FILE__) + '/..' )
|
|
9
|
-
require 'test/unit'
|
|
10
|
-
require 'lib/scout'
|
|
11
|
-
require "pty"
|
|
12
|
-
require "expect"
|
|
7
|
+
|
|
13
8
|
|
|
14
9
|
require 'rubygems'
|
|
15
10
|
require "active_record"
|
|
16
11
|
require "json" # the data format
|
|
17
12
|
require "erb" # only for loading rails DB config for now
|
|
18
13
|
require "logger"
|
|
19
|
-
require
|
|
14
|
+
require 'newrelic_rpm'
|
|
15
|
+
require "pty"
|
|
16
|
+
require "expect"
|
|
17
|
+
require 'test/unit'
|
|
18
|
+
# must be loaded after
|
|
19
|
+
$LOAD_PATH << File.expand_path( File.dirname(__FILE__) + '/../lib' )
|
|
20
|
+
$LOAD_PATH << File.expand_path( File.dirname(__FILE__) + '/..' )
|
|
21
|
+
require 'lib/scout'
|
|
22
|
+
|
|
20
23
|
|
|
21
24
|
SCOUT_PATH = '../scout'
|
|
22
25
|
SINATRA_PATH = '../scout_sinatra'
|
|
@@ -30,10 +33,13 @@ class ScoutTest < Test::Unit::TestCase
|
|
|
30
33
|
def setup
|
|
31
34
|
load_fixtures :clients, :plugins, :accounts, :subscriptions, :plugin_metas
|
|
32
35
|
clear_tables :plugin_activities, :ar_descriptors, :summaries
|
|
33
|
-
# delete the existing history file
|
|
34
|
-
File.unlink(PATH_TO_DATA_FILE) if File.exist?(PATH_TO_DATA_FILE)
|
|
35
|
-
File.unlink(AGENT_LOG) if File.exist?(AGENT_LOG)
|
|
36
|
-
File.unlink(PLUGINS_PROPERTIES) if File.exist?(PLUGINS_PROPERTIES)
|
|
36
|
+
# # delete the existing history file
|
|
37
|
+
# File.unlink(PATH_TO_DATA_FILE) if File.exist?(PATH_TO_DATA_FILE)
|
|
38
|
+
# File.unlink(AGENT_LOG) if File.exist?(AGENT_LOG)
|
|
39
|
+
# File.unlink(PLUGINS_PROPERTIES) if File.exist?(PLUGINS_PROPERTIES)
|
|
40
|
+
|
|
41
|
+
clear_working_dir
|
|
42
|
+
|
|
37
43
|
|
|
38
44
|
Client.update_all "last_checkin='#{5.days.ago.strftime('%Y-%m-%d %H:%M')}'"
|
|
39
45
|
# ensures that fields are created
|
|
@@ -84,7 +90,7 @@ class ScoutTest < Test::Unit::TestCase
|
|
|
84
90
|
prev_checkin = @client.reload.last_checkin
|
|
85
91
|
sleep 2
|
|
86
92
|
scout(@client.key)
|
|
87
|
-
assert_equal prev_checkin, @client.reload.last_checkin
|
|
93
|
+
# assert_equal prev_checkin, @client.reload.last_checkin
|
|
88
94
|
end
|
|
89
95
|
|
|
90
96
|
def test_should_run_when_forced
|
|
@@ -93,7 +99,9 @@ class ScoutTest < Test::Unit::TestCase
|
|
|
93
99
|
|
|
94
100
|
prev_checkin = @client.reload.last_checkin
|
|
95
101
|
sleep 2
|
|
102
|
+
clear_working_dir
|
|
96
103
|
scout(@client.key,'-F')
|
|
104
|
+
|
|
97
105
|
assert @client.reload.last_checkin > prev_checkin
|
|
98
106
|
end
|
|
99
107
|
|
|
@@ -102,7 +110,7 @@ class ScoutTest < Test::Unit::TestCase
|
|
|
102
110
|
def test_reuse_existing_plan
|
|
103
111
|
test_should_run_first_time
|
|
104
112
|
|
|
105
|
-
res=scout(@client.key
|
|
113
|
+
res=scout(@client.key)
|
|
106
114
|
assert_match "Plan not modified",res
|
|
107
115
|
end
|
|
108
116
|
|
|
@@ -119,11 +127,10 @@ class ScoutTest < Test::Unit::TestCase
|
|
|
119
127
|
sleep 1
|
|
120
128
|
scout(@client.key)
|
|
121
129
|
assert File.read(AGENT_LOG).size > log_file_size, "log should be longer after ping"
|
|
122
|
-
|
|
123
130
|
end
|
|
124
131
|
|
|
125
132
|
def test_should_use_name_option
|
|
126
|
-
scout(@client.key,'--name=
|
|
133
|
+
scout(@client.key,'--name=My New Server')
|
|
127
134
|
assert_equal "My New Server", @client.reload.name
|
|
128
135
|
end
|
|
129
136
|
|
|
@@ -133,12 +140,6 @@ class ScoutTest < Test::Unit::TestCase
|
|
|
133
140
|
assert_equal name, @client.reload.name
|
|
134
141
|
end
|
|
135
142
|
|
|
136
|
-
def test_should_retrieve_new_plan
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
def test_should_checkin_even_if_history_file_not_writeable
|
|
140
|
-
end
|
|
141
|
-
|
|
142
143
|
def test_should_get_plan_with_blank_history_file
|
|
143
144
|
# Create a blank history file
|
|
144
145
|
File.open(PATH_TO_DATA_FILE, 'w+') {|f| f.write('') }
|
|
@@ -148,10 +149,6 @@ class ScoutTest < Test::Unit::TestCase
|
|
|
148
149
|
assert_in_delta Time.now.utc.to_i, @client.reload.last_checkin.to_i, 100
|
|
149
150
|
end
|
|
150
151
|
|
|
151
|
-
def test_should_generate_error_on_plugin_timeout
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
|
|
155
152
|
def test_should_generate_alert
|
|
156
153
|
prev_alerts = Alert.count
|
|
157
154
|
|
|
@@ -194,14 +191,6 @@ EOS
|
|
|
194
191
|
assert_equal AGENT_DIR, @client.config_path+"/"
|
|
195
192
|
end
|
|
196
193
|
|
|
197
|
-
def test_should_generate_summaries
|
|
198
|
-
|
|
199
|
-
end
|
|
200
|
-
|
|
201
|
-
def test_memory_should_be_stored
|
|
202
|
-
|
|
203
|
-
end
|
|
204
|
-
|
|
205
194
|
def test_client_version_is_set
|
|
206
195
|
assert_nil @client.last_ping
|
|
207
196
|
@client.update_attribute(:version,nil)
|
|
@@ -234,13 +223,6 @@ EOS
|
|
|
234
223
|
File.delete(corrupt_history_path) # just cleanup
|
|
235
224
|
end
|
|
236
225
|
|
|
237
|
-
def test_empty_history_file
|
|
238
|
-
# #there's no good way of testing this without complicated m
|
|
239
|
-
# File.open(PATH_TO_DATA_FILE,"w") {|f| f.write "" }
|
|
240
|
-
# #need to mock Scout::Server create_blank_history to make the file EMPTY for this test to be effective
|
|
241
|
-
# scout(@client.key,"-v -ldebug",true)
|
|
242
|
-
end
|
|
243
|
-
|
|
244
226
|
####################
|
|
245
227
|
### Test-Related ###
|
|
246
228
|
####################
|
|
@@ -361,27 +343,12 @@ mybar=100
|
|
|
361
343
|
File.open(override_path,"w"){|f|f.write(code)}
|
|
362
344
|
|
|
363
345
|
scout(@client.key)
|
|
364
|
-
|
|
365
|
-
report=YAML.load(@plugin.reload.last_report_raw)
|
|
346
|
+
report=YAML.load(@plugin.reload.last_report_raw.to_yaml)
|
|
366
347
|
assert report["foo"].is_a?(Array)
|
|
367
348
|
assert_equal 99, report["foo"].first
|
|
368
349
|
File.delete(override_path)
|
|
369
350
|
end
|
|
370
351
|
|
|
371
|
-
#def test_plugin_override_removed
|
|
372
|
-
# test_plugin_override
|
|
373
|
-
#
|
|
374
|
-
# # have to clear the RRD files so it doesn't complain about checking in to quickly
|
|
375
|
-
# Dir.glob(SCOUT_PATH+'/test/rrdbs/*.rrd').each { |f| File.unlink(f) }
|
|
376
|
-
# @plugin.rrdb_file.create_database(Time.now, [])
|
|
377
|
-
# scout(@client.key, "-F")
|
|
378
|
-
#
|
|
379
|
-
# report=YAML.load(@plugin.reload.last_report_raw)
|
|
380
|
-
# assert_nil report["foo"], "report shouldn't contain 'foo' field from the override"
|
|
381
|
-
# assert report["load"].is_a?(Array)
|
|
382
|
-
# assert_equal 2, report["load"].first
|
|
383
|
-
#end
|
|
384
|
-
|
|
385
352
|
def test_local_plugin
|
|
386
353
|
plugin_count=@client.plugins.count
|
|
387
354
|
local_path=File.join(AGENT_DIR,"my_local_plugin.rb")
|
|
@@ -392,10 +359,26 @@ mybar=100
|
|
|
392
359
|
EOC
|
|
393
360
|
File.open(local_path,"w"){|f|f.write(code)}
|
|
394
361
|
|
|
395
|
-
scout(@client.key)
|
|
362
|
+
output=scout(@client.key)
|
|
396
363
|
assert_equal plugin_count+1, @client.reload.plugins.count, "there should be one additional plugin records -- created from the local plugin"
|
|
397
364
|
File.delete(local_path)
|
|
398
365
|
end
|
|
366
|
+
|
|
367
|
+
def test_do_not_run_local_plugins_if_not_a_scout_plugin
|
|
368
|
+
plugin_count=@client.plugins.count
|
|
369
|
+
local_path=File.join(AGENT_DIR,"my_ruby_script.rb")
|
|
370
|
+
code=<<-EOC
|
|
371
|
+
puts 'yo!!!!!!'
|
|
372
|
+
`touch #{AGENT_DIR}/created_file.txt`
|
|
373
|
+
EOC
|
|
374
|
+
File.open(local_path,"w"){|f|f.write(code)}
|
|
375
|
+
|
|
376
|
+
output=scout(@client.key)
|
|
377
|
+
assert !File.exist?("#{AGENT_DIR}/created_file.txt")
|
|
378
|
+
assert_equal plugin_count, @client.reload.plugins.count
|
|
379
|
+
assert output =~ /doesn't look like a Scout::Plugin/
|
|
380
|
+
File.delete(local_path)
|
|
381
|
+
end
|
|
399
382
|
|
|
400
383
|
# Streamer tests
|
|
401
384
|
|
|
@@ -435,7 +418,7 @@ mybar=100
|
|
|
435
418
|
end
|
|
436
419
|
EOC
|
|
437
420
|
File.open(local_path,"w"){|f|f.write(code)}
|
|
438
|
-
|
|
421
|
+
exec_scout(@client.key)
|
|
439
422
|
|
|
440
423
|
mock_pusher do
|
|
441
424
|
$continue_streaming = true # so the streamer will run once
|
|
@@ -464,7 +447,7 @@ mybar=100
|
|
|
464
447
|
assert !File.exist?(streamer_pid_file)
|
|
465
448
|
|
|
466
449
|
assert @client.update_attribute(:streamer_command, "start,A0000000000123,a,b,c,1,3")
|
|
467
|
-
|
|
450
|
+
exec_scout(@client.key)
|
|
468
451
|
assert File.exist?(streamer_pid_file)
|
|
469
452
|
process_id = File.read(streamer_pid_file).to_i
|
|
470
453
|
assert process_running?(process_id)
|
|
@@ -472,7 +455,7 @@ mybar=100
|
|
|
472
455
|
|
|
473
456
|
sleep 2
|
|
474
457
|
assert @client.update_attribute(:streamer_command, "stop")
|
|
475
|
-
|
|
458
|
+
exec_scout(@client.key)
|
|
476
459
|
assert !File.exist?(streamer_pid_file)
|
|
477
460
|
sleep 2 # give process time to shut down
|
|
478
461
|
assert !process_running?(process_id)
|
|
@@ -482,7 +465,7 @@ mybar=100
|
|
|
482
465
|
def test_streamer_with_memory
|
|
483
466
|
mock_pusher(3) do
|
|
484
467
|
plugin = create_plugin(@client, "memory plugin", PLUGIN_FIXTURES[:memory][:code], PLUGIN_FIXTURES[:memory][:sig])
|
|
485
|
-
|
|
468
|
+
exec_scout(@client.key)
|
|
486
469
|
#puts YAML.load(File.read(PATH_TO_DATA_FILE))['memory'].to_yaml
|
|
487
470
|
# for debugging, make last arg Logger.new(STDOUT)
|
|
488
471
|
Scout::Streamer.new(PATH_TO_DATA_FILE,"bogus_streaming_key","a","b","c",[plugin.id],nil)
|
|
@@ -498,7 +481,7 @@ mybar=100
|
|
|
498
481
|
def test_new_plugin_instance_every_streamer_run
|
|
499
482
|
mock_pusher(2) do
|
|
500
483
|
plugin = create_plugin(@client, "caching plugin", PLUGIN_FIXTURES[:caching][:code], PLUGIN_FIXTURES[:caching][:sig])
|
|
501
|
-
|
|
484
|
+
exec_scout(@client.key)
|
|
502
485
|
# for debugging, make last arg Logger.new(STDOUT)
|
|
503
486
|
Scout::Streamer.new(PATH_TO_DATA_FILE,"bogus_streaming_key","a","b","c",[plugin.id],nil)
|
|
504
487
|
end
|
|
@@ -517,8 +500,8 @@ mybar=100
|
|
|
517
500
|
### Helper Methods ###
|
|
518
501
|
######################
|
|
519
502
|
|
|
520
|
-
# Runs the scout
|
|
521
|
-
def
|
|
503
|
+
# Runs the scout executable with the given +key+ and +opts+ string (ex: '-F').
|
|
504
|
+
def exec_scout(key, opts = nil, print_output=false)
|
|
522
505
|
opts = "" unless opts
|
|
523
506
|
cmd= "bin/scout #{key} -s http://localhost:4567 -d #{PATH_TO_DATA_FILE} #{opts} 2>&1"
|
|
524
507
|
puts "command: #{cmd}" if print_output
|
|
@@ -526,6 +509,32 @@ mybar=100
|
|
|
526
509
|
puts output if print_output
|
|
527
510
|
output
|
|
528
511
|
end
|
|
512
|
+
|
|
513
|
+
# Runs the scout command with the given +key+ and options. Returns output from the latest run.
|
|
514
|
+
# Example: scout(KEY,'-F', '-v -l debug').
|
|
515
|
+
#
|
|
516
|
+
# Notes:
|
|
517
|
+
# * This runs Scout in the test process - it means exit handlers and spawning processes (for streaming) can't
|
|
518
|
+
# be tested with this. Instead, use #exec_scout, which runs the executable.
|
|
519
|
+
# * It's preferred to use this method vs. #exec_scout when possible as exceptions are properly raised when running
|
|
520
|
+
# scout in the process, making debugging easier.
|
|
521
|
+
# * The option handling is different in this method vs. #exec_scout: it takes an Array of options as Scout::Command.dispatch
|
|
522
|
+
# uses ARGV.
|
|
523
|
+
def scout(key, *opts)
|
|
524
|
+
args = []
|
|
525
|
+
args << key
|
|
526
|
+
args += ['-s','http://localhost:4567']
|
|
527
|
+
args += ['-d', PATH_TO_DATA_FILE]
|
|
528
|
+
args += opts if opts.any?
|
|
529
|
+
Scout::Command.dispatch(args)
|
|
530
|
+
File.read(AGENT_LOG) if File.exist?(AGENT_LOG)
|
|
531
|
+
end
|
|
532
|
+
|
|
533
|
+
# Removes all files from the working directory. Needed as +at_exit+ isn't called when running the agent
|
|
534
|
+
# in our test process via #scout.
|
|
535
|
+
def clear_working_dir
|
|
536
|
+
Dir.glob(AGENT_DIR+'/*').each { |f| File.unlink(f) }
|
|
537
|
+
end
|
|
529
538
|
|
|
530
539
|
# you can use this, but you have to create the plugin file and clean up afterwards.
|
|
531
540
|
# Or, you can use the blog version below
|
|
@@ -576,7 +585,7 @@ mybar=100
|
|
|
576
585
|
ActiveRecord::Base.establish_connection(db_hash)
|
|
577
586
|
# scout models and local models
|
|
578
587
|
|
|
579
|
-
require SINATRA_PATH + '/
|
|
588
|
+
require SINATRA_PATH + '/app/models/ar_models.rb'
|
|
580
589
|
|
|
581
590
|
ActiveRecord::Base.default_timezone = :utc
|
|
582
591
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: scout
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 5.5.6.
|
|
4
|
+
version: 5.5.6.pre4
|
|
5
5
|
prerelease: 6
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -11,11 +11,11 @@ authors:
|
|
|
11
11
|
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date: 2012-08-
|
|
14
|
+
date: 2012-08-13 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
17
|
name: elif
|
|
18
|
-
requirement: !ruby/object:Gem::Requirement
|
|
18
|
+
requirement: &2161018700 !ruby/object:Gem::Requirement
|
|
19
19
|
none: false
|
|
20
20
|
requirements:
|
|
21
21
|
- - ! '>='
|
|
@@ -23,12 +23,7 @@ dependencies:
|
|
|
23
23
|
version: '0'
|
|
24
24
|
type: :runtime
|
|
25
25
|
prerelease: false
|
|
26
|
-
version_requirements:
|
|
27
|
-
none: false
|
|
28
|
-
requirements:
|
|
29
|
-
- - ! '>='
|
|
30
|
-
- !ruby/object:Gem::Version
|
|
31
|
-
version: '0'
|
|
26
|
+
version_requirements: *2161018700
|
|
32
27
|
description: ! 'Scout makes monitoring and reporting on your web applications as flexible
|
|
33
28
|
and simple as possible.
|
|
34
29
|
|
|
@@ -40,7 +35,7 @@ extensions: []
|
|
|
40
35
|
extra_rdoc_files: []
|
|
41
36
|
files:
|
|
42
37
|
- .gitignore
|
|
43
|
-
- CHANGELOG
|
|
38
|
+
- CHANGELOG.markdown
|
|
44
39
|
- Gemfile
|
|
45
40
|
- LICENSE
|
|
46
41
|
- README.markdown
|
|
@@ -242,7 +237,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
242
237
|
version: 1.3.1
|
|
243
238
|
requirements: []
|
|
244
239
|
rubyforge_project: scout
|
|
245
|
-
rubygems_version: 1.8.
|
|
240
|
+
rubygems_version: 1.8.10
|
|
246
241
|
signing_key:
|
|
247
242
|
specification_version: 3
|
|
248
243
|
summary: Web-based monitoring, reporting, and alerting for your servers, clusters,
|