scout_agent 3.1.2 → 3.1.3

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 CHANGED
@@ -1,3 +1,10 @@
1
+ == 3.1.3
2
+
3
+ * Modified file modes to match lock types to get the file locking code running
4
+ on Solaris
5
+ * Fixed a variable name conflict
6
+ * Cleaned up some of the mission error catching code
7
+
1
8
  == 3.1.2
2
9
 
3
10
  * Fixed a bug that caused the mission tester to error out when trying to update
data/lib/scout_agent.rb CHANGED
@@ -91,7 +91,7 @@ module ScoutAgent
91
91
  end
92
92
 
93
93
  # The version of this agent.
94
- VERSION = "3.1.2".freeze
94
+ VERSION = "3.1.3".freeze
95
95
  # A Pathname reference to the agent code directory, used in dynamic loading.
96
96
  LIB_DIR = Pathname.new(File.dirname(__FILE__)) + agent_name
97
97
  end
@@ -192,15 +192,15 @@ module ScoutAgent
192
192
  )
193
193
  end
194
194
  rescue Timeout::Error # Mission exceeded allowed execution
195
- status = Process.term_or_kill(@mission_pid)
196
- @mission_pid = nil
197
- log.error( "#{mission[:name]} took too long to run: " +
198
- "#{status && status.exitstatus}." )
195
+ killed_status = Process.term_or_kill(@mission_pid)
196
+ status_str = killed_status && killed_status.exitstatus
197
+ @mission_pid = nil
198
+ log.error("#{mission[:name]} took too long to run: #{status_str}.")
199
199
  @db.write_report(
200
200
  mission[:id],
201
201
  :error,
202
202
  :subject => "#{mission[:name]} took too long to run",
203
- :body => "Exit status: #{status && status.exitstatus}"
203
+ :body => "Exit status: #{status_str}"
204
204
  )
205
205
  end
206
206
  # prevent an infinite loop if we can't complete the mission
@@ -363,8 +363,8 @@ module ScoutAgent
363
363
  status("Compiling")
364
364
  begin
365
365
  eval(mission[:code], TOPLEVEL_BINDING, mission[:name])
366
- rescue Exception => error # any compile error
367
- raise if $!.is_a? SystemExit # don't catch exit() calls
366
+ rescue Exception => error # any compile error
367
+ raise if error.is_a? SystemExit # don't catch exit() calls
368
368
  log.error( "#{mission[:name]} could not be compiled: " +
369
369
  "#{error.message} (#{error.class})." )
370
370
  reported = @db.write_report(
@@ -31,11 +31,16 @@ module ScoutAgent
31
31
  end
32
32
 
33
33
  #
34
- # lock on this file to ensure only one process can run a snapshot at a
35
- # time
34
+ # lock on an external lock file to ensure only one process can run a
35
+ # snapshot at a time
36
36
  #
37
- open(__FILE__) do |this_file|
38
- unless this_file.flock(File::LOCK_EX | File::LOCK_NB)
37
+ (Plan.db_dir + "snapshot_in_progress.lock").open("a") do |lock|
38
+ begin
39
+ lock.chmod(0777) # make sure this file is shared by all
40
+ rescue Exception # we didn't create the file
41
+ # do nothing: the creator already switched the permissions
42
+ end
43
+ unless lock.flock(File::LOCK_EX | File::LOCK_NB)
39
44
  exit # snapshot in progress
40
45
  end
41
46
 
@@ -115,7 +120,7 @@ module ScoutAgent
115
120
  ScoutAgent.remove_old_log_files(log)
116
121
 
117
122
  log.info("Snapshot complete.")
118
- this_file.flock(File::LOCK_UN) # release our snapshot lock
123
+ lock.flock(File::LOCK_UN) # release our snapshot lock
119
124
  end
120
125
  end
121
126
 
@@ -150,7 +150,12 @@ module ScoutAgent
150
150
  # external locking mechanism on the database code file to prevent doubled
151
151
  # +VACUUM+ race conditions.
152
152
  #
153
- (LIB_DIR + "database/#{self.class.short_name.snake_case}.rb").open do |db|
153
+ Pathname.new(path.to_s.sub(/\.sqlite\z/, ".lock")).open("a") do |db|
154
+ begin
155
+ db.chmod(0777) # make sure this file is shared by all
156
+ rescue Exception # we didn't create the file
157
+ # do nothing: the creator already switched the permissions
158
+ end
154
159
  db.flock(File::LOCK_EX)
155
160
  begin
156
161
  if @sqlite.first_value_from(
@@ -174,6 +179,9 @@ module ScoutAgent
174
179
  rescue Amalgalite::SQLite3::Error => error # failed to +VACUUM+ database
175
180
  log.error("Database maintenance error: #{error.message}.")
176
181
  nil # maintenance failed, we will try again later
182
+ # rescue Exception => error # file locking error
183
+ # log.error("Database maintenance locking error: #{error.message}.")
184
+ # nil # maintenance failed, we will try again later
177
185
  end
178
186
 
179
187
  # Returns +true+ if this connection is currently read locked.
@@ -107,7 +107,7 @@ module ScoutAgent
107
107
  end
108
108
  true
109
109
  rescue Errno::EEXIST # pid_file already exists
110
- File.open(pid_file) do |pid|
110
+ File.open(pid_file, "r+") do |pid|
111
111
  if pid.flock(File::LOCK_EX | File::LOCK_NB)
112
112
  if pid.read =~ /\A\d+/
113
113
  begin
@@ -294,15 +294,15 @@ module ScoutAgent
294
294
  if self.class.needs.all? { |l| library_available?(l) }
295
295
  begin
296
296
  build_report
297
- rescue Exception
298
- raise if $!.is_a? SystemExit # don't catch exit() calls
297
+ rescue Exception => error # an error while running the code
298
+ raise if error.is_a? SystemExit # don't catch exit() calls
299
299
  error "#{@name} run failed with an error", <<-END_ERROR.trim
300
300
  Error:
301
- #{$!.class}
301
+ #{error.class}
302
302
  Message:
303
- #{$!.message}
303
+ #{error.message}
304
304
  Backtrace:
305
- #{$!.backtrace.map { |line| " #{line}\n" }.join}
305
+ #{error.backtrace.map { |line| " #{line}\n" }.join}
306
306
  END_ERROR
307
307
  end
308
308
  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.2
4
+ version: 3.1.3
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-03 00:00:00 -05:00
15
+ date: 2009-05-05 00:00:00 -05:00
16
16
  default_executable:
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
@@ -182,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
182
182
  requirements: []
183
183
 
184
184
  rubyforge_project: scout
185
- rubygems_version: 1.3.2
185
+ rubygems_version: 1.3.3
186
186
  signing_key:
187
187
  specification_version: 3
188
188
  summary: Scout makes monitoring and reporting on your servers as flexible and simple as possible.