jobmanager 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +7 -1
- data/Manifest.txt +6 -2
- data/README.txt +66 -32
- data/Rakefile +2 -2
- data/examples/jobmanager.yaml +19 -9
- data/lib/jobmanager/application.rb +32 -31
- data/lib/jobmanager/applicationconfig.rb +15 -3
- data/lib/jobmanager/applicationoptionparser.rb +19 -5
- data/lib/jobmanager/openonfirstwritefile.rb +65 -0
- data/lib/jobmanager/system.rb +15 -8
- data/lib/jobmanager/teestream.rb +21 -39
- data/lib/jobmanager/timestampedstream.rb +89 -0
- data/test/configs/all_values.yaml +7 -1
- data/test/configs/jobmanager_4_bad_job_logs_directory_1.yaml +1 -1
- data/test/configs/{jobmanager_4_bad_job_logs_directory_2.yaml → jobmanager_5_bad_job_log_file.yaml} +0 -0
- data/test/configs/jobmanager_6.yaml +9 -0
- data/test/configs/jobmanager_7_no_log_rotation.yaml +15 -0
- data/test/test_applicationlogger.rb +3 -0
- data/test/test_config.rb +33 -22
- data/test/test_jobmanager.rb +133 -62
- data/test/test_openonfirstwritefile.rb +71 -0
- data/test/test_system.rb +3 -3
- data/test/test_teestream.rb +45 -2
- metadata +11 -6
- data/examples/mysql_backup.rb +0 -18
data/History.txt
CHANGED
@@ -1,4 +1,10 @@
|
|
1
|
-
=== 1.0
|
1
|
+
=== 1.1.0 / 2009-06-01
|
2
|
+
The following changes were made:
|
3
|
+
* jobmanager no longer generates a job log file (nor rotates) in the case that the job output is empty.
|
4
|
+
* jobmanager can now be configured to email job results only when the job output is not empty ("on_job_output_or_failure").
|
5
|
+
* jobmanager can now be configured to not rotate the job log files
|
6
|
+
* jobmanager can now be configured to prepend the date/time to each line of a job log file.
|
7
|
+
=== 1.0.1 / 2008-08-27
|
2
8
|
Remove the dependency on the sys-host gem.
|
3
9
|
=== 1.0.0 / 2008-07-18
|
4
10
|
Initial release of jobmanager. This package is unit tested fully.
|
data/Manifest.txt
CHANGED
@@ -7,21 +7,23 @@ Rakefile
|
|
7
7
|
bin/jobmanager
|
8
8
|
examples/email_settings.rb
|
9
9
|
examples/example.rb
|
10
|
-
examples/mysql_backup.rb
|
11
10
|
examples/jobmanager.yaml
|
12
11
|
lib/jobmanager.rb
|
13
12
|
lib/jobmanager/applicationconfig.rb
|
14
13
|
lib/jobmanager/applicationlogger.rb
|
15
14
|
lib/jobmanager/applicationoptionparser.rb
|
16
15
|
lib/jobmanager/application.rb
|
16
|
+
lib/jobmanager/openonfirstwritefile.rb
|
17
17
|
lib/jobmanager/system.rb
|
18
18
|
lib/jobmanager/teestream.rb
|
19
|
+
lib/jobmanager/timestampedstream.rb
|
19
20
|
lib/jobmanager/util.rb
|
20
21
|
test/helpers.rb
|
21
22
|
test/mock_syslog.rb
|
22
23
|
test/test_applicationlogger.rb
|
23
24
|
test/test_config.rb
|
24
25
|
test/test_jobmanager.rb
|
26
|
+
test/test_openonfirstwritefile.rb
|
25
27
|
test/test_system.rb
|
26
28
|
test/test_teestream.rb
|
27
29
|
test/configs/email_settings.rb
|
@@ -37,6 +39,8 @@ test/configs/jobmanager_3.yaml
|
|
37
39
|
test/configs/jobmanager_4_bad_central_log_file.yaml
|
38
40
|
test/configs/jobmanager_4_bad_email_settings_file.yaml
|
39
41
|
test/configs/jobmanager_4_bad_job_logs_directory_1.yaml
|
40
|
-
test/configs/
|
42
|
+
test/configs/jobmanager_5_bad_job_log_file.yaml
|
43
|
+
test/configs/jobmanager_6.yaml
|
44
|
+
test/configs/jobmanager_7_no_log_rotation.yaml
|
41
45
|
test/configs/minimum_plus_email_settings.yaml
|
42
46
|
test/configs/minimum_required.yaml
|
data/README.txt
CHANGED
@@ -25,11 +25,11 @@ added value:
|
|
25
25
|
Lets walk through an example invocation of +jobmanager+ via cron.
|
26
26
|
|
27
27
|
Here is an example +crontab+ entry that invokes a simplified database
|
28
|
-
backup script via +jobmanager+ every day at
|
29
|
-
|
28
|
+
backup script via +jobmanager+ every day at 17:16.
|
29
|
+
16 17 * * * jobmanager --job_name nightly_backup "mysql_backup test"
|
30
30
|
|
31
31
|
Here is the example +mysql_backup+ script referenced above:
|
32
|
-
======<tt>examples/mysql_backup
|
32
|
+
======<tt>examples/mysql_backup</tt>:
|
33
33
|
#!/usr/bin/env ruby
|
34
34
|
|
35
35
|
print "=================================================\n"
|
@@ -50,10 +50,10 @@ Here is the example +mysql_backup+ script referenced above:
|
|
50
50
|
|
51
51
|
|
52
52
|
|
53
|
-
Here is the configuration file to be read by +jobmanager+.
|
53
|
+
Here is the example configuration file to be read by +jobmanager+.
|
54
54
|
======<tt>/etc/jobmanager.yaml</tt>:
|
55
55
|
################################################################################
|
56
|
-
#
|
56
|
+
# An example jobmanager configuration file.
|
57
57
|
#
|
58
58
|
# For a full description of each of the fields, and their default values,
|
59
59
|
# see the CONFIGURATION FILE section in README.txt.
|
@@ -76,14 +76,14 @@ Here is the configuration file to be read by +jobmanager+.
|
|
76
76
|
# variables: user_name.
|
77
77
|
central_log_file: /tmp/logs/jobmanager.log
|
78
78
|
|
79
|
-
# The path to search for the command that jobmanager is invoked with.
|
79
|
+
# The path to search for the command that jobmanager is invoked with.
|
80
80
|
#command_path: /usr/bin:/usr/designingpatterns/bin
|
81
81
|
|
82
82
|
# Whether jobmanager should print debug trace to the central log file.
|
83
|
-
debug:
|
83
|
+
#debug: true
|
84
84
|
|
85
85
|
# The condition upon which condition results should be emailed.
|
86
|
-
# Possible values are: always, never, on_failure.
|
86
|
+
# Possible values are: always, never, on_failure, on_job_output_or_failure.
|
87
87
|
email_condition: always
|
88
88
|
|
89
89
|
# The configuration file for the simpleemail gem. This parameter will
|
@@ -96,21 +96,31 @@ Here is the configuration file to be read by +jobmanager+.
|
|
96
96
|
# Allowed variables: job_name, command, host_name, results, user_name.
|
97
97
|
email_subject: "jobmanager results for <%=job_name%> on <%=host_name%> : <%=result%>"
|
98
98
|
|
99
|
-
#
|
100
|
-
#
|
101
|
-
|
99
|
+
# Whether the job log file should be rotated.
|
100
|
+
#rotate_job_log: false
|
101
|
+
|
102
|
+
# The extension of the rotated job log file.
|
103
|
+
# True -> The extension is a date_time.
|
104
|
+
# False -> It is a simple count (.1, .2, etc.).
|
105
|
+
#date_time_extension: true
|
102
106
|
|
103
107
|
# If date_time_extension is true, this field will be used as the
|
104
108
|
# format for the date/time extension of the rotated job log file
|
105
109
|
# name.
|
106
|
-
date_time_extension_format: '%F_%T'
|
110
|
+
#date_time_extension_format: '%F_%T'
|
107
111
|
|
108
112
|
# Whether the rotated job log file should be zipped.
|
109
|
-
zip_rotated_log_file:
|
113
|
+
#zip_rotated_log_file: true
|
110
114
|
|
111
115
|
# The timeout (in seconds). If not present, no timeout will be used.
|
112
116
|
timeout: 1800
|
113
117
|
|
118
|
+
# Whether each line in the job log file will be prepended with the date/time.
|
119
|
+
#job_log_prepend_date_time: true
|
120
|
+
|
121
|
+
# The date/time format of the prepended date/time.
|
122
|
+
#job_log_prepend_date_time: '%F_%T'
|
123
|
+
|
114
124
|
# The sender of emails sent from jobmanager. This can also be
|
115
125
|
# specified in the email_settings_file (attribute default_from).
|
116
126
|
#email_from_address: "Sender <sender@gmail.com>"
|
@@ -141,15 +151,21 @@ sendmail is also an option. This file is documented further in the
|
|
141
151
|
SimpleEmail::Email.default_to = "Receiver Address <receiver_address@gmail.com>"
|
142
152
|
|
143
153
|
|
154
|
+
Note: In order to run this example oneself, either
|
155
|
+
* +mysql_backup+ script must live in a directory that is in one's path, or
|
156
|
+
* the +command_path+ field in +jobmanager.yaml+ must be set to include the path
|
157
|
+
where +mysql_backup+ lives.
|
158
|
+
|
144
159
|
Here is the central log file that +jobmanager+ updated.
|
145
160
|
======<tt>/tmp/logs/jobmanager.log</tt>:
|
146
|
-
I, [
|
147
|
-
I, [
|
148
|
-
I, [
|
161
|
+
I, [2009-06-01T17:16:32 #32235] INFO -- : [janet, nightly_backup] Command (/usr/bin/mysql_backup test) launched, pid = 32237.
|
162
|
+
I, [2009-06-01T17:16:33 #32235] INFO -- : [janet, nightly_backup] Job exited successfully
|
163
|
+
I, [2009-06-01T17:16:33 #32235] INFO -- : [janet, nightly_backup] Job log rotated to /tmp/logs/nightly_backup.log.2009-06-01_17:16:33.
|
164
|
+
I, [2009-06-01T17:16:33 #32235] INFO -- : [janet, nightly_backup] Sent mail to Receiver Address <receiver_address@gmail.com>
|
149
165
|
|
150
166
|
|
151
167
|
Here is the rotated job log file.
|
152
|
-
======<tt>/tmp/logs/nightly_backup.log.
|
168
|
+
======<tt>/tmp/logs/nightly_backup.log.2009-06-01_17:16:33</tt>:
|
153
169
|
=================================================
|
154
170
|
Backing up Database
|
155
171
|
=================================================
|
@@ -157,6 +173,7 @@ Here is the rotated job log file.
|
|
157
173
|
|
158
174
|
Success!
|
159
175
|
|
176
|
+
|
160
177
|
Here is the subject and body of the email that was sent upon job completion.
|
161
178
|
|
162
179
|
======<tt>Email Subject</tt>:
|
@@ -166,9 +183,9 @@ Here is the subject and body of the email that was sent upon job completion.
|
|
166
183
|
---------------------------------------------------------
|
167
184
|
jobmanager Output:
|
168
185
|
---------------------------------------------------------
|
169
|
-
I, [
|
170
|
-
I, [
|
171
|
-
I, [
|
186
|
+
I, [2009-06-01T17:16:23 #32219] INFO -- : [janet, nightly_backup] Command (/usr/bin/mysql_backup test) launched, pid = 32222.
|
187
|
+
I, [2009-06-01T17:16:24 #32219] INFO -- : [janet, nightly_backup] Job exited successfully
|
188
|
+
I, [2009-06-01T17:16:24 #32219] INFO -- : [janet, nightly_backup] Job log rotated to /tmp/logs/nightly_backup.log.2009-06-01_17:16:24.
|
172
189
|
|
173
190
|
---------------------------------------------------------
|
174
191
|
Job Output:
|
@@ -216,6 +233,15 @@ The configuration file provides the following parameters:
|
|
216
233
|
[+number_of_job_logs+: optional, default: +3+]
|
217
234
|
The number of logs to be kept per job.
|
218
235
|
|
236
|
+
[+job_log_prepend_date_time+: optional, default: +false+]
|
237
|
+
Whether the current date/time should be prepended to each line of the
|
238
|
+
job log file.
|
239
|
+
|
240
|
+
[+job_log_prepend_date_time_format+: optional, default: <tt>'%F_%T'</tt> ]
|
241
|
+
if +job_log_prepend_date_time+ is +true+, this parameter will be used as
|
242
|
+
the format for the date/time that is prepended to each line of the job
|
243
|
+
log file.
|
244
|
+
|
219
245
|
[+command_path+: optional, default: <tt>ENV['PATH']</tt> ]
|
220
246
|
The path to be searched for the command that +jobmanager+ is
|
221
247
|
invoked with. If unspecified, the environment path will be used.
|
@@ -225,7 +251,9 @@ The configuration file provides the following parameters:
|
|
225
251
|
|
226
252
|
[+email_condition+: optional, default: +on_failure+]
|
227
253
|
The condition upon which results should be emailed. Possible
|
228
|
-
values are: <tt>always, never, on_failure</tt>.
|
254
|
+
values are: <tt>always, never, on_failure, on_job_output_or_failure</tt>.
|
255
|
+
The condition +on_job_output_or_failure+ denotes that an email will be
|
256
|
+
sent if the job failed and/or the job output was non-empty.
|
229
257
|
|
230
258
|
[+email_settings_file+: optional, default: +email_settings.rb+]
|
231
259
|
The configuration file for the
|
@@ -243,34 +271,38 @@ The configuration file provides the following parameters:
|
|
243
271
|
separate email settings files.
|
244
272
|
|
245
273
|
|
246
|
-
[+email_subject
|
274
|
+
[+email_subject+: optional, default: <tt>"jobmanager results for <%=job_name%> on <%=host_name%> : <%=result%>"</tt>]
|
247
275
|
The email subject, to be interpreted by ERB. Allowed variables
|
248
276
|
inside the string are: <tt>job_name, command, host_name, results, user_name</tt>.
|
249
277
|
|
250
|
-
[+
|
278
|
+
[+rotate_job_log+: optional, default: +true+]
|
279
|
+
Whether the job log file should be rotated. If the job log file is not
|
280
|
+
rotated, it will simply be appended to during each run.
|
281
|
+
|
282
|
+
[+date_time_extension+: optional, default: +true+]
|
251
283
|
This refers to the extension of the rotated job log file. If
|
252
284
|
+date_time_extension+ is present and set to +true+, the extension
|
253
285
|
represents a date and time. Otherwise, it is a simple count (.1, .2, etc.).
|
254
286
|
|
255
|
-
[+date_time_extension_format
|
287
|
+
[+date_time_extension_format+: optional, default: <tt>'%F_%T'</tt>]
|
256
288
|
If +date_time_extension+ is +true+, this parameter will be used as the
|
257
289
|
format for the date and time extension of the rotated job log file.
|
258
290
|
|
259
|
-
[+zip_rotated_log_file
|
291
|
+
[+zip_rotated_log_file+: optional, default: +false+]
|
260
292
|
Whether the rotated job log file should be gzip'ed.
|
261
293
|
|
262
|
-
[+timeout
|
294
|
+
[+timeout+: optional]
|
263
295
|
The timeout (in seconds). If the job spawned by +jobmanager+ does not
|
264
296
|
exit after +timeout+ seconds, +jobmanager+ will kill the process, and
|
265
297
|
report failure. If +timeout+ is unspecifed, +jobmanager+ will let the
|
266
298
|
process run for an unlimited amount of time (+jobmanager+ will simply
|
267
299
|
wait til it returns).
|
268
300
|
|
269
|
-
[+email_from_address
|
301
|
+
[+email_from_address+: optional]
|
270
302
|
The sender of emails sent from +jobmanager+. This can also be
|
271
303
|
specified in the +email_settings_file+ (attribute +default_from+).
|
272
304
|
|
273
|
-
[+email_to_address
|
305
|
+
[+email_to_address+: optional]
|
274
306
|
The receiver of emails sent from +jobmanager+. This can also be
|
275
307
|
specified in the +email_settings_file+ (attribute +default_to+).
|
276
308
|
|
@@ -321,7 +353,8 @@ listed above are required for the proper functioning of the
|
|
321
353
|
|
322
354
|
2. Set up the +jobmanager+ configuration file (+jobmanager.yaml+).
|
323
355
|
For more detailed instructions, see the CONFIGURATION FILE section
|
324
|
-
above.
|
356
|
+
above. There is an example file provided in this distribution:
|
357
|
+
+examples/jobmanager.yaml+.
|
325
358
|
|
326
359
|
3. Set up the simpleemail configuration file (+email_settings.rb+).
|
327
360
|
Alternately, if you want to disable email, set the configuration
|
@@ -329,9 +362,10 @@ listed above are required for the proper functioning of the
|
|
329
362
|
the {+simpleemail+}[http://simpleemail.rubyforge.org] gem rdoc for
|
330
363
|
more details.
|
331
364
|
|
332
|
-
4. Confirm that the configuration files are valid by invoking
|
333
|
-
|
334
|
-
|
365
|
+
4. Confirm that the configuration files are valid by invoking +jobmanager+
|
366
|
+
from the command line with one of your cron jobs or a test command. If
|
367
|
+
+jobmanager+ is invoked via the command line, the central log will be
|
368
|
+
redirected to screen (instead of the central log file).
|
335
369
|
|
336
370
|
5. Edit your +crontab+ to run new and/or existing cron jobs through
|
337
371
|
+jobmanager+.
|
data/Rakefile
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
require 'rubygems'
|
3
3
|
require 'hoe'
|
4
4
|
|
5
|
-
Hoe.new('jobmanager', "1.0
|
5
|
+
Hoe.new('jobmanager', "1.1.0") do |p|
|
6
6
|
p.remote_rdoc_dir = ''
|
7
7
|
p.developer('DesigningPatterns', 'technical.inquiries@designingpatterns.com')
|
8
8
|
|
9
9
|
p.extra_deps << ['simpleemail']
|
10
10
|
p.extra_deps << ['configtoolkit', '>= 2.2']
|
11
11
|
p.extra_deps << ['relative']
|
12
|
-
p.extra_deps << ['logrotate']
|
12
|
+
p.extra_deps << ['logrotate', '>= 1.1']
|
13
13
|
p.extra_deps << ['SyslogLogger']
|
14
14
|
end
|
15
15
|
|
data/examples/jobmanager.yaml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
################################################################################
|
2
|
-
#
|
2
|
+
# An example jobmanager configuration file.
|
3
3
|
#
|
4
4
|
# For a full description of each of the fields, and their default values,
|
5
5
|
# see the CONFIGURATION FILE section in README.txt.
|
@@ -22,14 +22,14 @@ central_log_mode: file
|
|
22
22
|
# variables: user_name.
|
23
23
|
central_log_file: /tmp/logs/jobmanager.log
|
24
24
|
|
25
|
-
# The path to search for the command that jobmanager is invoked with.
|
25
|
+
# The path to search for the command that jobmanager is invoked with.
|
26
26
|
#command_path: /usr/bin:/usr/designingpatterns/bin
|
27
27
|
|
28
28
|
# Whether jobmanager should print debug trace to the central log file.
|
29
|
-
debug:
|
29
|
+
#debug: true
|
30
30
|
|
31
31
|
# The condition upon which condition results should be emailed.
|
32
|
-
# Possible values are: always, never, on_failure.
|
32
|
+
# Possible values are: always, never, on_failure, on_job_output_or_failure.
|
33
33
|
email_condition: always
|
34
34
|
|
35
35
|
# The configuration file for the simpleemail gem. This parameter will
|
@@ -42,21 +42,31 @@ email_settings_file: email_settings.rb
|
|
42
42
|
# Allowed variables: job_name, command, host_name, results, user_name.
|
43
43
|
email_subject: "jobmanager results for <%=job_name%> on <%=host_name%> : <%=result%>"
|
44
44
|
|
45
|
-
#
|
46
|
-
#
|
47
|
-
|
45
|
+
# Whether the job log file should be rotated.
|
46
|
+
#rotate_job_log: false
|
47
|
+
|
48
|
+
# The extension of the rotated job log file.
|
49
|
+
# True -> The extension is a date_time.
|
50
|
+
# False -> It is a simple count (.1, .2, etc.).
|
51
|
+
#date_time_extension: true
|
48
52
|
|
49
53
|
# If date_time_extension is true, this field will be used as the
|
50
54
|
# format for the date/time extension of the rotated job log file
|
51
55
|
# name.
|
52
|
-
date_time_extension_format: '%F_%T'
|
56
|
+
#date_time_extension_format: '%F_%T'
|
53
57
|
|
54
58
|
# Whether the rotated job log file should be zipped.
|
55
|
-
zip_rotated_log_file:
|
59
|
+
#zip_rotated_log_file: true
|
56
60
|
|
57
61
|
# The timeout (in seconds). If not present, no timeout will be used.
|
58
62
|
timeout: 1800
|
59
63
|
|
64
|
+
# Whether each line in the job log file will be prepended with the date/time.
|
65
|
+
#job_log_prepend_date_time: true
|
66
|
+
|
67
|
+
# The date/time format of the prepended date/time.
|
68
|
+
#job_log_prepend_date_time: '%F_%T'
|
69
|
+
|
60
70
|
# The sender of emails sent from jobmanager. This can also be
|
61
71
|
# specified in the email_settings_file (attribute default_from).
|
62
72
|
#email_from_address: "Sender <sender@gmail.com>"
|
@@ -22,7 +22,9 @@ require 'jobmanager/applicationconfig'
|
|
22
22
|
require 'jobmanager/applicationoptionparser'
|
23
23
|
require 'jobmanager/system'
|
24
24
|
require 'jobmanager/teestream'
|
25
|
+
require 'jobmanager/timestampedstream'
|
25
26
|
require 'jobmanager/applicationlogger'
|
27
|
+
require 'jobmanager/openonfirstwritefile'
|
26
28
|
|
27
29
|
module JobManager
|
28
30
|
|
@@ -182,20 +184,15 @@ module JobManager
|
|
182
184
|
def run()
|
183
185
|
success = false
|
184
186
|
|
185
|
-
begin
|
186
|
-
FileUtils.mkdir_p(@config.job_logs_directory)
|
187
|
-
rescue => e
|
188
|
-
raise ComposedError.new("Error creating job_logs_directory", e)
|
189
|
-
end
|
190
|
-
|
191
187
|
job_log_file = File.join(@config.job_logs_directory, "#{@config.job_name}.log")
|
192
|
-
@mgr_logger.debug("
|
188
|
+
@mgr_logger.debug("Job log file: #{job_log_file}.")
|
193
189
|
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
190
|
+
#
|
191
|
+
# Create a stream that only opens the specified file when the
|
192
|
+
# first write is called. This is to prevent empty files from
|
193
|
+
# being created.
|
194
|
+
#
|
195
|
+
job_log_file_stream = OpenOnFirstWriteFile.new(job_log_file, "a")
|
199
196
|
|
200
197
|
#
|
201
198
|
# The output of the job that will be invoked will be sent back
|
@@ -216,9 +213,13 @@ module JobManager
|
|
216
213
|
# TeeStream to forward strings to the job log file stream and a
|
217
214
|
# string stream (which will be later used for emailing results).
|
218
215
|
#
|
216
|
+
job_output = ""
|
219
217
|
begin
|
220
|
-
|
221
|
-
|
218
|
+
job_stream = TeeStream.new(:file => job_log_file_stream,
|
219
|
+
:stringio => StringIO.new())
|
220
|
+
if (@config.job_log_prepend_date_time)
|
221
|
+
job_stream = TimestampedStream.new(job_stream, @config.job_log_prepend_date_time_format)
|
222
|
+
end
|
222
223
|
|
223
224
|
optional_args = {}
|
224
225
|
if @config.timeout then optional_args[:timeout] = @config.timeout end
|
@@ -226,23 +227,23 @@ module JobManager
|
|
226
227
|
|
227
228
|
# invoke the command - fork and exec the process, and wait til it finishes to reap the status.
|
228
229
|
success = System::invoke_command(@config.command,
|
229
|
-
|
230
|
+
job_stream,
|
230
231
|
@mgr_logger,
|
231
232
|
optional_args)
|
232
233
|
|
233
|
-
|
234
|
-
|
234
|
+
if (job_stream.is_a?(TimestampedStream))
|
235
|
+
job_stream = job_stream.stream()
|
236
|
+
end
|
237
|
+
job_output = job_stream.stream(:stringio).string()
|
238
|
+
job_stream.close()
|
235
239
|
|
236
240
|
rescue => e
|
237
241
|
@mgr_logger.record_tagged_exception("Error running job", e)
|
238
242
|
end
|
239
243
|
|
240
244
|
# Rotate the job log file.
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
before_entries = Dir.glob("#{@config.job_logs_directory}/#{@config.job_name}*")
|
245
|
-
|
245
|
+
if (@config.rotate_job_log && File.file?(job_log_file))
|
246
|
+
begin
|
246
247
|
logrotate_options = {
|
247
248
|
:count => @config.number_of_job_logs,
|
248
249
|
:date_time_ext => @config.date_time_extension,
|
@@ -250,20 +251,20 @@ module JobManager
|
|
250
251
|
:gzip => @config.zip_rotated_log_file
|
251
252
|
}
|
252
253
|
|
253
|
-
LogRotate.rotate_file(job_log_file, logrotate_options)
|
254
|
+
result = LogRotate.rotate_file(job_log_file, logrotate_options)
|
254
255
|
|
255
|
-
|
256
|
-
|
256
|
+
@mgr_logger.info("Job log rotated to #{result.new_rotated_file}.")
|
257
|
+
rescue => e
|
258
|
+
success = false
|
259
|
+
@mgr_logger.record_tagged_exception("Error rotating file #{job_log_file}", e)
|
257
260
|
end
|
258
|
-
rescue => e
|
259
|
-
success = false
|
260
|
-
@mgr_logger.record_tagged_exception("Error rotating file #{job_log_file}", e)
|
261
261
|
end
|
262
262
|
|
263
263
|
# Email the results!
|
264
264
|
begin
|
265
265
|
if (@config.email_condition == :always ||
|
266
|
-
(@config.email_condition == :on_failure && !success)
|
266
|
+
(@config.email_condition == :on_failure && !success) ||
|
267
|
+
(@config.email_condition == :on_job_output_or_failure && (!success || job_output.length > 0)))
|
267
268
|
|
268
269
|
email_results(success, job_output)
|
269
270
|
end
|
@@ -340,7 +341,7 @@ module JobManager
|
|
340
341
|
|
341
342
|
@config.email_settings_file = value
|
342
343
|
end
|
343
|
-
|
344
|
+
|
344
345
|
# Note: From/To email addresses can be specified in either the
|
345
346
|
# jobmanager configuration file or the simpleemail gem
|
346
347
|
# configuration file.
|
@@ -372,7 +373,7 @@ module JobManager
|
|
372
373
|
begin
|
373
374
|
new_logger = ApplicationFileLogger.new(@config.central_log_file,
|
374
375
|
@user_name)
|
375
|
-
|
376
|
+
|
376
377
|
old_logger = @mgr_logger
|
377
378
|
@mgr_logger = new_logger
|
378
379
|
old_logger.close
|