task-orchestrator 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -2,7 +2,9 @@
2
2
 
3
3
  Simple task orchestration framework driven by Yaml config files
4
4
 
5
- ![travis](https://secure.travis-ci.org/piavlo/task-orchestrator.png)
5
+ [![Build Status](https://secure.travis-ci.org/piavlo/task-orchestrator.png)](https://travis-ci.org/piavlo/task-orchestrator)
6
+ [![Dependency Status](https://gemnasium.com/piavlo/task-orchestrator.png)](https://gemnasium.com/piavlo/task-orchestrator)
7
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/piavlo/task-orchestrator)
6
8
 
7
9
  ## Installation
8
10
 
data/bin/orchestrator CHANGED
@@ -8,4 +8,4 @@ require 'orchestrator'
8
8
 
9
9
  options = Orchestrator::Cli.parse(ARGV)
10
10
  task = Orchestrator::Task.new(options)
11
- task.run
11
+ task.run
@@ -6,6 +6,8 @@ orchestrator:
6
6
  steps:
7
7
  - type: sequential
8
8
  scripts:
9
- - command: exit 0
9
+ - command: "echo cool"
10
+ ok_handler: "echo OK Handler"
11
+ failure_handler: "echo Failure Handler"
10
12
  failure_handler: "echo Step has failed"
11
13
  failure_handler: "echo Task :::ARG.name::: has failed"
data/examples/timeouts CHANGED
@@ -8,10 +8,10 @@ orchestrator:
8
8
  # on_failure: die
9
9
  on_failure: ignore
10
10
  scripts:
11
- - command: sleep 1
12
- timeout: 2
13
11
  - command: sleep 5
14
12
  timeout: 2
13
+ - command: sleep 1
14
+ timeout: 2
15
15
  timeouts2:
16
16
  description: timeouts test 2
17
17
  save: true
@@ -82,10 +82,15 @@ module Orchestrator
82
82
  if command.is_a?(String)
83
83
  command = { 'command' => interpolate_command(command) }
84
84
  elsif command.is_a?(Hash)
85
- invalid(error_prefix + " command is invalid") unless command.has_key?('command') && command['command'].is_a?(String)
86
- command['command'] = interpolate_command(command['command'])
85
+ invalid(error_prefix + " is missing command attribute") unless command.has_key?('command')
86
+ ['command', 'ok_handler', 'failure_handler'].each do |attribute|
87
+ if command.has_key?(attribute)
88
+ invalid(error_prefix + " #{attribute} attribute is invalid") unless command[attribute].is_a?(String)
89
+ command[attribute] = interpolate_command(command[attribute])
90
+ end
91
+ end
87
92
  else
88
- invalid(error_prefix + " is invalid")
93
+ invalid(error_prefix + " has invalid format")
89
94
  end
90
95
  command
91
96
  end
@@ -154,38 +159,32 @@ module Orchestrator
154
159
  ) if @options.sms and @options.sms_on_success
155
160
  end
156
161
 
157
- def run_script(script)
162
+ def run_command(command,timeout)
158
163
  result = ""
159
164
  error = ""
160
165
 
161
- timeout = script.has_key?('timeout') ? script['timeout'].to_i : @timeout
162
-
163
- script['status'] = 'STARTED'
164
- save_state
165
-
166
166
  # start = Time.now
167
-
167
+
168
+ status = 'STARTED'
168
169
  begin
169
170
  Timeout::timeout(timeout) do
170
- status = POpen4::popen4(script['command']) do |stdout, stderr, stdin, pid|
171
+ status = POpen4::popen4(command) do |stdout, stderr, stdin, pid|
171
172
  result = stdout.read.strip
172
173
  error = stderr.read.strip
173
174
  end
174
- script['status'] = (status.nil? or status.exitstatus != 0) ? 'FAILED' : 'OK'
175
+ status = (status.nil? or status.exitstatus != 0) ? 'FAILED' : 'OK'
175
176
  end
176
177
  rescue Timeout::Error
177
- script['status'] = 'TIMEOUT'
178
+ status = 'TIMEOUT'
178
179
  end
179
180
 
180
- save_state
181
-
182
181
  # runtime = Time.now - start
183
182
  # runtime = runtime > 60 ? runtime/60 : runtime
184
183
 
185
184
  @mutex.synchronize do
186
185
  output = <<-EOF
187
186
 
188
- Running: #{script['command']} - #{script['status']}
187
+ Running: #{command} - #{status}
189
188
  ============ STDOUT ============
190
189
  #{result}
191
190
  ============ STDERR ============
@@ -197,7 +196,31 @@ EOF
197
196
  puts output if @options.verbose
198
197
  end
199
198
 
200
- script['status'] == 'OK'
199
+ return status
200
+ end
201
+
202
+ def run_post_script_handlers(script,status)
203
+ handler = nil
204
+ if status
205
+ handler = 'ok_handler' if script.has_key?('ok_handler')
206
+ else
207
+ handler = 'failure_handler' if script.has_key?('failure_handler')
208
+ end
209
+ if handler
210
+ timeout = script.has_key?('timeout') ? script['timeout'].to_i : @timeout
211
+ run_command(script[handler],timeout)
212
+ end
213
+ end
214
+
215
+ def run_script(script)
216
+ timeout = script.has_key?('timeout') ? script['timeout'].to_i : @timeout
217
+
218
+ script['status'] = 'STARTED'
219
+ save_state
220
+ script['status'] = run_command(script['command'],timeout)
221
+ save_state
222
+
223
+ return script['status'] == 'OK'
201
224
  end
202
225
 
203
226
  def thread_wrapper(i,script)
@@ -231,6 +254,7 @@ EOF
231
254
  end
232
255
 
233
256
  @threads.delete(i)
257
+ run_post_script_handlers(script,@statuses[i])
234
258
  fail if @on_failure == :die and not @statuses[i]
235
259
  end
236
260
 
@@ -295,6 +319,7 @@ EOF
295
319
  break if failures > @retries
296
320
  sleep @retry_delay
297
321
  end
322
+ run_post_script_handlers(step['scripts'][index],@statuses[index])
298
323
  fail if not @statuses[index] and @on_failure == :die
299
324
  end
300
325
  fail if @on_failure != :ignore and @statuses.find_index(false)
@@ -1,3 +1,3 @@
1
1
  module Orchestrator
2
- VERSION ||= '0.0.7'
2
+ VERSION ||= '0.0.8'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: task-orchestrator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-09 00:00:00.000000000 Z
12
+ date: 2013-02-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pony
@@ -85,16 +85,16 @@ extra_rdoc_files: []
85
85
  files:
86
86
  - bin/orchestrator
87
87
  - lib/orchestrator.rb
88
- - lib/orchestrator/task.rb
89
88
  - lib/orchestrator/version.rb
90
89
  - lib/orchestrator/cli.rb
90
+ - lib/orchestrator/task.rb
91
+ - examples/timeouts
92
+ - examples/interpolation
93
+ - examples/dependencies
91
94
  - examples/sequential
92
95
  - examples/failure_handler
93
- - examples/multistep
94
96
  - examples/parallel
95
- - examples/interpolation
96
- - examples/timeouts
97
- - examples/dependencies
97
+ - examples/multistep
98
98
  - task-orchestrator.gemspec
99
99
  - LICENSE
100
100
  - README.md