minicron 0.2 → 0.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.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/bin/minicron +17 -2
- data/lib/minicron.rb +30 -32
- data/lib/minicron/alert/pagerduty.rb +1 -1
- data/lib/minicron/cli.rb +19 -208
- data/lib/minicron/cli/commands.rb +194 -0
- data/lib/minicron/constants.rb +1 -1
- data/lib/minicron/cron.rb +10 -15
- data/lib/minicron/hub/app.rb +2 -2
- data/lib/minicron/hub/controllers/api/hosts.rb +2 -3
- data/lib/minicron/hub/db/schema.rb +65 -70
- data/lib/minicron/hub/db/schema.sql +0 -14
- data/lib/minicron/monitor.rb +1 -1
- data/lib/minicron/transport/client.rb +4 -3
- data/lib/minicron/transport/faye/client.rb +1 -1
- data/lib/minicron/transport/faye/server.rb +6 -6
- data/lib/minicron/transport/server.rb +14 -10
- data/spec/minicron/alert/pagerduty_spec.rb +66 -0
- data/spec/minicron/alert/sms_spec.rb +69 -0
- data/spec/minicron/cli_spec.rb +35 -20
- data/spec/minicron/transport/client_spec.rb +70 -1
- data/spec/minicron/transport/faye/client_spec.rb +41 -27
- data/spec/minicron/transport/server_spec.rb +7 -11
- data/spec/minicron_spec.rb +45 -5
- data/spec/spec_helper.rb +1 -0
- data/spec/valid_config.toml +0 -1
- metadata +110 -92
- data/lib/minicron/hub/assets/js/auth/ember-auth-9.0.7.min.js +0 -2
- data/lib/minicron/hub/assets/js/auth/ember-auth-request-jquery-1.0.3.min.js +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9dd39723811b197138d5655e871e4c07fb49d4d4
|
4
|
+
data.tar.gz: 30b855c523a3ce04c9aaa83bc0a348b950e947c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5cb855f69d4a2727a5f837df5a96f9c1ff68a85f74150ca2f1c9497729f733af92517e7eb72fbf65457b0483205055c0f2ec9d9b596751f468da79449e2ae13a
|
7
|
+
data.tar.gz: 3181ea25877f42863c5317d39bb8a6998d563b5d55f75f6d06c0f478c140c3c76114e342edc30fd8d49c68e40c56abb7c1aa91318088eb330ede9b94ef116c79
|
data/README.md
CHANGED
@@ -84,7 +84,7 @@ but I encourage you to give it a try in a non critical environment and help me t
|
|
84
84
|
|
85
85
|
2. On some distributions you may need to install the ````ruby-dev```` and ````build-essential```` packages
|
86
86
|
|
87
|
-
3. To install the latest release (currently 0.
|
87
|
+
3. To install the latest release (currently 0.3) you can ````gem install minicron````, depending on your ruby setup
|
88
88
|
you may need to run this with ````sudo````
|
89
89
|
|
90
90
|
4. Set your database configuration options in ````/etc/minicron.toml````, you can use the [default.config.toml](https://github.com/jamesrwhite/minicron/blob/master/default.config.toml) as a guide on what options are configurable
|
@@ -144,7 +144,7 @@ by default it will bind to port 9292 on the host 127.0.0.1 but this can be confi
|
|
144
144
|
arguments ````--host```` ````--port```` and ````--path```` or in the config file.
|
145
145
|
|
146
146
|
By default the server will run as a daemon with its process id stored in ````/tmp/minicron.pid````
|
147
|
-
you can also use the ````stop````
|
147
|
+
you can also use the ````stop```` and ````status```` commands to control the server.
|
148
148
|
|
149
149
|
To run the server in debug mode, i.e not as a daemon so you can see its output you can pass the ````--debug````
|
150
150
|
option.
|
data/bin/minicron
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
require 'insidious'
|
2
3
|
require 'minicron'
|
4
|
+
require 'minicron/cli'
|
5
|
+
require 'minicron/transport/server'
|
3
6
|
|
4
7
|
begin
|
5
8
|
# Capture any output from STDERR so we can handle it how we want to
|
6
9
|
Minicron.capture_output(:type => :stderr) do
|
7
10
|
# Run the CLI and pass it all arguments passed to us
|
8
|
-
Minicron::CLI.
|
11
|
+
Minicron::CLI.run(ARGV) do |output|
|
9
12
|
print output
|
10
13
|
STDOUT.flush
|
11
14
|
end
|
@@ -13,14 +16,26 @@ begin
|
|
13
16
|
# Handle ctrl-c and other nasty interruptions
|
14
17
|
rescue Interrupt, SignalException
|
15
18
|
puts "\nExiting.."
|
19
|
+
|
20
|
+
# Stop the daemon if it's running i.e tidy up the pid file
|
21
|
+
insidious = Insidious.new(:pid_file => '/tmp/minicron.pid')
|
22
|
+
|
23
|
+
if insidious.running?
|
24
|
+
insidious.stop!
|
25
|
+
end
|
16
26
|
# Accept failure
|
17
27
|
rescue Exception => e
|
18
28
|
$stderr.write("#{e.message}\n")
|
19
29
|
|
20
|
-
if Minicron.config['
|
30
|
+
if Minicron.config['trace']
|
21
31
|
puts
|
22
32
|
fail e
|
23
33
|
end
|
24
34
|
|
25
35
|
exit(1)
|
36
|
+
ensure
|
37
|
+
# Shut down the server if it's running
|
38
|
+
if Minicron::Transport::Server.running?
|
39
|
+
Minicron::Transport::Server.stop!
|
40
|
+
end
|
26
41
|
end
|
data/lib/minicron.rb
CHANGED
@@ -1,17 +1,14 @@
|
|
1
1
|
require 'stringio'
|
2
2
|
require 'toml'
|
3
3
|
require 'sshkey'
|
4
|
-
require 'minicron/cli'
|
5
4
|
require 'minicron/constants'
|
6
5
|
|
7
6
|
# @author James White <dev.jameswhite+minicron@gmail.com>
|
8
7
|
module Minicron
|
9
8
|
# Default configuration, this can be overriden
|
10
9
|
@config = {
|
11
|
-
'
|
12
|
-
|
13
|
-
'trace' => false
|
14
|
-
},
|
10
|
+
'verbose' => false,
|
11
|
+
'trace' => false,
|
15
12
|
'client' => {
|
16
13
|
'scheme' => 'http',
|
17
14
|
'host' => '127.0.0.1',
|
@@ -77,22 +74,24 @@ module Minicron
|
|
77
74
|
raise Exception, "Unable to the load the file '#{file_path}', are you sure it exists?"
|
78
75
|
end
|
79
76
|
rescue Errno::EACCES
|
80
|
-
fail Exception, "Unable to the
|
77
|
+
fail Exception, "Unable to the read the file '#{file_path}', check it has the right permissions."
|
81
78
|
rescue TOML::ParseError
|
82
79
|
fail Exception, "An error occured parsing the config file '#{file_path}', please check it uses valid TOML syntax."
|
83
80
|
end
|
84
81
|
end
|
85
82
|
|
86
|
-
# Parses the config options from the
|
87
|
-
#
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
83
|
+
# Parses the config options from the given hash that matches the expected
|
84
|
+
# config format in Minicron.config
|
85
|
+
def self.parse_config_hash(options = {})
|
86
|
+
options.each do |key, value|
|
87
|
+
if options[key].respond_to?(:each)
|
88
|
+
options[key].each do |k, v|
|
89
|
+
if !v.nil?
|
90
|
+
@config[key][k] = v
|
91
|
+
end
|
95
92
|
end
|
93
|
+
else
|
94
|
+
@config[key] = value
|
96
95
|
end
|
97
96
|
end
|
98
97
|
end
|
@@ -143,21 +142,6 @@ module Minicron
|
|
143
142
|
end
|
144
143
|
end
|
145
144
|
|
146
|
-
# Sanitize a filename - taken from http://guides.rubyonrails.org/security.html
|
147
|
-
#
|
148
|
-
# @param filename [String]
|
149
|
-
# @return [String]
|
150
|
-
def self.sanitize_filename(filename)
|
151
|
-
filename.strip.tap do |name|
|
152
|
-
name.sub!(/\A.*(\\|\/)/, '')
|
153
|
-
# Finally, replace all non alphanumeric, underscore
|
154
|
-
# or periods with underscore
|
155
|
-
name.gsub!(/[^\w\.\-]/, '_')
|
156
|
-
end
|
157
|
-
|
158
|
-
filename
|
159
|
-
end
|
160
|
-
|
161
145
|
# Used to generate SSH keys for hosts but is completely generic
|
162
146
|
#
|
163
147
|
# @param type [String] the thing that is using the key, this is just here
|
@@ -168,8 +152,8 @@ module Minicron
|
|
168
152
|
key = SSHKey.generate(:comment => "minicron public key for #{name}")
|
169
153
|
|
170
154
|
# Set the locations to save the public key private key pair
|
171
|
-
private_key_path =
|
172
|
-
public_key_path =
|
155
|
+
private_key_path = File.expand_path("~/.ssh/minicron_#{type}_#{id}_rsa")
|
156
|
+
public_key_path = File.expand_path("~/.ssh/minicron_#{type}_#{id}_rsa.pub")
|
173
157
|
|
174
158
|
# Save the public key private key pair
|
175
159
|
File.write(private_key_path, key.private_key)
|
@@ -181,4 +165,18 @@ module Minicron
|
|
181
165
|
|
182
166
|
key
|
183
167
|
end
|
168
|
+
|
169
|
+
# Get the system fully qualified domain name
|
170
|
+
#
|
171
|
+
# @return [String]
|
172
|
+
def self.get_fqdn
|
173
|
+
`hostname -f`.strip
|
174
|
+
end
|
175
|
+
|
176
|
+
# Get the system short hostname
|
177
|
+
#
|
178
|
+
# @return [String]
|
179
|
+
def self.get_hostname
|
180
|
+
`hostname -s`.strip
|
181
|
+
end
|
184
182
|
end
|
data/lib/minicron/cli.rb
CHANGED
@@ -2,8 +2,8 @@ require 'pty'
|
|
2
2
|
require 'English'
|
3
3
|
require 'rainbow/ext/string'
|
4
4
|
require 'commander'
|
5
|
-
require 'insidious'
|
6
5
|
require 'minicron/constants'
|
6
|
+
require 'minicron/cli/commands'
|
7
7
|
require 'minicron/transport'
|
8
8
|
require 'minicron/transport/client'
|
9
9
|
require 'minicron/transport/server'
|
@@ -14,20 +14,18 @@ include Commander::UI
|
|
14
14
|
module Minicron
|
15
15
|
# Handles the main CLI interaction of minicron
|
16
16
|
# TODO: this class is probably too complicated and should be refactored a bit
|
17
|
-
|
17
|
+
module CLI
|
18
18
|
# Function to the parse the config of the options passed to commands
|
19
19
|
#
|
20
20
|
# @param opts [Hash] The Commander provided options hash
|
21
|
-
def parse_config(opts)
|
21
|
+
def self.parse_config(opts)
|
22
22
|
# Parse the --config file options if it was passed
|
23
23
|
Minicron.parse_file_config(opts.config)
|
24
24
|
|
25
25
|
# Parse the cli options
|
26
|
-
Minicron.
|
27
|
-
'
|
28
|
-
|
29
|
-
'trace' => opts.trace
|
30
|
-
},
|
26
|
+
Minicron.parse_config_hash(
|
27
|
+
'verbose' => opts.verbose,
|
28
|
+
'trace' => opts.trace,
|
31
29
|
'cli' => {
|
32
30
|
'mode' => opts.mode,
|
33
31
|
'dry_run' => opts.dry_run
|
@@ -46,7 +44,7 @@ module Minicron
|
|
46
44
|
# @param type [Symbol] The type of command output, currently one of :status, :command and :verbose
|
47
45
|
# @param output [String]
|
48
46
|
# @return [Hash]
|
49
|
-
def structured(type, output)
|
47
|
+
def self.structured(type, output)
|
50
48
|
{ :type => type, :output => output }
|
51
49
|
end
|
52
50
|
|
@@ -57,7 +55,7 @@ module Minicron
|
|
57
55
|
# @raise [ArgumentError] if no arguments are passed to the run cli command
|
58
56
|
# i.e when the argv param is ['run']. A second option (the command to execute)
|
59
57
|
# should be present in the array
|
60
|
-
def run(argv)
|
58
|
+
def self.run(argv)
|
61
59
|
# replace ARGV with the contents of argv to aid testability
|
62
60
|
ARGV.replace(argv)
|
63
61
|
|
@@ -65,16 +63,16 @@ module Minicron
|
|
65
63
|
@cli = Commander::Runner.new
|
66
64
|
|
67
65
|
# Set some default otions on it
|
68
|
-
|
66
|
+
setup
|
69
67
|
|
70
68
|
# Add the run command to the cli
|
71
|
-
add_run_cli_command { |output| yield output }
|
69
|
+
Minicron::CLI::Commands.add_run_cli_command(@cli) { |output| yield output }
|
72
70
|
|
73
71
|
# Add the server command to the cli
|
74
|
-
add_server_cli_command
|
72
|
+
Minicron::CLI::Commands.add_server_cli_command(@cli)
|
75
73
|
|
76
74
|
# Add the db command to the cli
|
77
|
-
add_db_cli_command
|
75
|
+
Minicron::CLI::Commands.add_db_cli_command(@cli)
|
78
76
|
|
79
77
|
# And off we go!
|
80
78
|
@cli.run!
|
@@ -88,7 +86,7 @@ module Minicron
|
|
88
86
|
# @option options [Boolean] verbose whether or not to output extra
|
89
87
|
# information for debugging purposes.
|
90
88
|
# @yieldparam output [String] output from the command execution
|
91
|
-
def run_command(command, options = {})
|
89
|
+
def self.run_command(command, options = {})
|
92
90
|
# Default the options
|
93
91
|
options[:mode] ||= 'line'
|
94
92
|
options[:verbose] ||= false
|
@@ -159,7 +157,7 @@ module Minicron
|
|
159
157
|
# enabled by default
|
160
158
|
#
|
161
159
|
# @return [Boolean] whether rainbow is enabled or not
|
162
|
-
def coloured_output?
|
160
|
+
def self.coloured_output?
|
163
161
|
Rainbow.enabled
|
164
162
|
end
|
165
163
|
|
@@ -167,7 +165,7 @@ module Minicron
|
|
167
165
|
# by default
|
168
166
|
#
|
169
167
|
# @return [Boolean] whether rainbow is enabled or not
|
170
|
-
def enable_coloured_output!
|
168
|
+
def self.enable_coloured_output!
|
171
169
|
Rainbow.enabled = true
|
172
170
|
end
|
173
171
|
|
@@ -175,14 +173,14 @@ module Minicron
|
|
175
173
|
# by default
|
176
174
|
#
|
177
175
|
# @return [Boolean] whether rainbow is enabled or not
|
178
|
-
def disable_coloured_output!
|
176
|
+
def self.disable_coloured_output!
|
179
177
|
Rainbow.enabled = false
|
180
178
|
end
|
181
179
|
|
182
180
|
private
|
183
181
|
|
184
182
|
# Sets the basic options for a commander cli instance
|
185
|
-
def
|
183
|
+
def self.setup
|
186
184
|
# basic information for the help menu
|
187
185
|
@cli.program :name, 'minicron'
|
188
186
|
@cli.program :help, 'Author', 'James White <dev.jameswhite+minicron@gmail.com>'
|
@@ -195,203 +193,16 @@ module Minicron
|
|
195
193
|
|
196
194
|
# Check if --trace was pased or not
|
197
195
|
if @cli.instance_variable_get(:@args).include? '--trace'
|
198
|
-
Minicron.config['
|
196
|
+
Minicron.config['trace'] = true
|
199
197
|
end
|
200
198
|
|
201
199
|
# Add a global option for verbose mode
|
202
200
|
@cli.global_option '--verbose', "Turn on verbose mode. Default: #{Minicron.config['cli']['verbose']}" do
|
203
|
-
Minicron.config['
|
201
|
+
Minicron.config['verbose'] = true
|
204
202
|
end
|
205
203
|
|
206
204
|
# Add a global option for passing the path to a config file
|
207
205
|
@cli.global_option '--config FILE', 'Set the config file to use'
|
208
206
|
end
|
209
|
-
|
210
|
-
# Setup a job by sending the SETUP command to the server
|
211
|
-
#
|
212
|
-
# @param command [String] the job command
|
213
|
-
# @param faye a faye client instance
|
214
|
-
# @return [Hash] the job_id and execution_id
|
215
|
-
def setup_job(command, faye)
|
216
|
-
# Get the fully qualified domain name of the currnet host
|
217
|
-
fqdn = `hostname -f`.strip
|
218
|
-
|
219
|
-
# Get the short hostname of the current host
|
220
|
-
hostname = `hostname -s`.strip
|
221
|
-
|
222
|
-
# Get the md5 hash for the job
|
223
|
-
job_hash = Minicron::Transport.get_job_hash(command, fqdn)
|
224
|
-
|
225
|
-
# Fire up eventmachine
|
226
|
-
faye.ensure_em_running
|
227
|
-
|
228
|
-
# Setup the job on the server
|
229
|
-
ids = faye.setup(job_hash, command, fqdn, hostname)
|
230
|
-
|
231
|
-
# Wait until we get the execution id
|
232
|
-
faye.ensure_delivery
|
233
|
-
|
234
|
-
# Return the ids
|
235
|
-
ids
|
236
|
-
end
|
237
|
-
|
238
|
-
# Start the server and monitor
|
239
|
-
def start_server
|
240
|
-
# Run the execution monitor (this runs in a separate thread)
|
241
|
-
monitor = Minicron::Monitor.new
|
242
|
-
monitor.start!
|
243
|
-
|
244
|
-
# Start the server!
|
245
|
-
server = Minicron::Transport::Server.new
|
246
|
-
server.start!(
|
247
|
-
Minicron.config['server']['host'],
|
248
|
-
Minicron.config['server']['port'],
|
249
|
-
Minicron.config['server']['path']
|
250
|
-
)
|
251
|
-
end
|
252
|
-
|
253
|
-
# Add the `minicron db` command
|
254
|
-
def add_db_cli_command
|
255
|
-
@cli.command :db do |c|
|
256
|
-
c.syntax = 'minicron db [setup]'
|
257
|
-
c.description = 'Sets up the minicron database schema.'
|
258
|
-
|
259
|
-
c.action do |args, opts|
|
260
|
-
# Check that exactly one argument has been passed
|
261
|
-
if args.length != 1
|
262
|
-
fail ArgumentError, 'A valid command to run is required! See `minicron help db`'
|
263
|
-
end
|
264
|
-
|
265
|
-
# Parse the file and cli config options
|
266
|
-
parse_config(opts)
|
267
|
-
|
268
|
-
# These are inlined as we only need them in this use case
|
269
|
-
require 'rake'
|
270
|
-
require 'minicron/hub/app'
|
271
|
-
require 'sinatra/activerecord/rake'
|
272
|
-
|
273
|
-
# Setup the db
|
274
|
-
Minicron::Hub::App.setup_db
|
275
|
-
|
276
|
-
# Tell activerecord where the db folder is, it assumes it is in db/
|
277
|
-
Sinatra::ActiveRecordTasks.db_dir = Minicron::HUB_PATH + '/db'
|
278
|
-
|
279
|
-
# Adjust the task name
|
280
|
-
task = args.first == 'setup' ? 'load' : args.first
|
281
|
-
|
282
|
-
# Run the task
|
283
|
-
Rake.application['db:schema:' + task].invoke
|
284
|
-
end
|
285
|
-
end
|
286
|
-
end
|
287
|
-
|
288
|
-
# Add the `minicron server` command
|
289
|
-
def add_server_cli_command
|
290
|
-
@cli.command :server do |c|
|
291
|
-
c.syntax = 'minicron server [start|stop|restart|status]'
|
292
|
-
c.description = 'Controls the minicron server.'
|
293
|
-
c.option '--host STRING', String, "The host for the server to listen on. Default: #{Minicron.config['server']['host']}"
|
294
|
-
c.option '--port STRING', Integer, "How port for the server to listed on. Default: #{Minicron.config['server']['port']}"
|
295
|
-
c.option '--path STRING', String, "The path on the host. Default: #{Minicron.config['server']['path']}"
|
296
|
-
c.option '--debug', "Enable debug mode. Default: #{Minicron.config['server']['debug']}"
|
297
|
-
|
298
|
-
c.action do |args, opts|
|
299
|
-
# Parse the file and @cli config options
|
300
|
-
parse_config(opts)
|
301
|
-
|
302
|
-
# If we get no arguments then default the action to start
|
303
|
-
action = args.first.nil? ? 'start' : args.first
|
304
|
-
|
305
|
-
# Get an instance of insidious and set the pid file
|
306
|
-
insidious = Insidious.new(
|
307
|
-
:pid_file => '/tmp/minicron.pid',
|
308
|
-
:daemonize => Minicron.config['server']['debug'] == false
|
309
|
-
)
|
310
|
-
|
311
|
-
case action
|
312
|
-
when 'start'
|
313
|
-
insidious.start! { start_server }
|
314
|
-
when 'stop'
|
315
|
-
insidious.stop!
|
316
|
-
when 'restart'
|
317
|
-
insidious.restart! { start_server }
|
318
|
-
when 'status'
|
319
|
-
if insidious.running?
|
320
|
-
puts 'minicron is running'
|
321
|
-
else
|
322
|
-
puts 'minicron is not running'
|
323
|
-
end
|
324
|
-
end
|
325
|
-
end
|
326
|
-
end
|
327
|
-
end
|
328
|
-
|
329
|
-
# Add the `minicron run [command]` command
|
330
|
-
# @yieldparam output [String] output from the cli
|
331
|
-
def add_run_cli_command
|
332
|
-
# Add the run command to the cli
|
333
|
-
@cli.command :run do |c|
|
334
|
-
c.syntax = "minicron run 'command -option value'"
|
335
|
-
c.description = 'Runs the command passed as an argument.'
|
336
|
-
c.option '--mode STRING', String, "How to capture the command output, each 'line' or each 'char'? Default: #{Minicron.config['cli']['mode']}"
|
337
|
-
c.option '--dry-run', "Run the command without sending the output to the server. Default: #{Minicron.config['cli']['dry_run']}"
|
338
|
-
|
339
|
-
c.action do |args, opts|
|
340
|
-
# Check that exactly one argument has been passed
|
341
|
-
if args.length != 1
|
342
|
-
fail ArgumentError, 'A valid command to run is required! See `minicron help run`'
|
343
|
-
end
|
344
|
-
|
345
|
-
# Parse the file and cli config options
|
346
|
-
parse_config(opts)
|
347
|
-
|
348
|
-
begin
|
349
|
-
# Set up the job and get the job and execution ids
|
350
|
-
unless Minicron.config['cli']['dry_run']
|
351
|
-
# Get a faye instance so we can send data about the job
|
352
|
-
faye = Minicron::Transport::Client.new(
|
353
|
-
Minicron.config['client']['scheme'],
|
354
|
-
Minicron.config['client']['host'],
|
355
|
-
Minicron.config['client']['port'],
|
356
|
-
Minicron.config['client']['path']
|
357
|
-
)
|
358
|
-
|
359
|
-
# Set up the job and get the jexecution and job ids back from the server
|
360
|
-
ids = setup_job(args.first, faye)
|
361
|
-
end
|
362
|
-
|
363
|
-
# Execute the command and yield the output
|
364
|
-
run_command(args.first, :mode => Minicron.config['cli']['mode'], :verbose => Minicron.config['global']['verbose']) do |output|
|
365
|
-
# We need to handle the yielded output differently based on it's type
|
366
|
-
case output[:type]
|
367
|
-
when :status
|
368
|
-
unless Minicron.config['cli']['dry_run']
|
369
|
-
faye.send(:job_id => ids[:job_id], :execution_id => ids[:execution_id], :type => :status, :message => output[:output])
|
370
|
-
end
|
371
|
-
when :command
|
372
|
-
unless Minicron.config['cli']['dry_run']
|
373
|
-
faye.send(:job_id => ids[:job_id], :execution_id => ids[:execution_id], :type => :output, :message => output[:output])
|
374
|
-
end
|
375
|
-
end
|
376
|
-
|
377
|
-
yield output[:output] unless output[:type] == :status
|
378
|
-
end
|
379
|
-
rescue Exception => e
|
380
|
-
# Send the exception message to the server and yield it
|
381
|
-
unless Minicron.config['cli']['dry_run']
|
382
|
-
faye.send(:job_id => ids[:job_id], :execution_id => ids[:execution_id], :type => :output, :message => e.message)
|
383
|
-
end
|
384
|
-
|
385
|
-
raise e
|
386
|
-
ensure
|
387
|
-
# Ensure that all messages are delivered and that we
|
388
|
-
unless Minicron.config['cli']['dry_run']
|
389
|
-
faye.ensure_delivery
|
390
|
-
faye.tidy_up
|
391
|
-
end
|
392
|
-
end
|
393
|
-
end
|
394
|
-
end
|
395
|
-
end
|
396
207
|
end
|
397
208
|
end
|