Skip to content

Instantly share code, notes, and snippets.

@mcorner
Created April 23, 2013 15:01
Show Gist options
  • Save mcorner/5444310 to your computer and use it in GitHub Desktop.
Save mcorner/5444310 to your computer and use it in GitHub Desktop.
desision.rb:
require 'aws-sdk'
config_path = File.expand_path(File.dirname(__FILE__)+"/aws.yml")
AWS.config(YAML.load(File.read(config_path)))
swf = AWS::SimpleWorkflow.new
domain = swf.domains['my-domain']
#test_id = rand(1000000000)
test_id = 9
puts "Test ID #{test_id}"
process_name = "my-long-process-#{test_id}"
task_list_name = "my-task-list-#{test_id}"
activity_name = "do-something-#{test_id}"
begin
workflow_type = domain.workflow_types.create(process_name, '1',
:default_task_list => task_list_name,
:default_child_policy => :terminate,
# :default_child_policy => :abandon,
:default_task_start_to_close_timeout => 60,
:default_execution_start_to_close_timeout => 45)
rescue ::AWS::SimpleWorkflow::Errors::TypeAlreadyExistsFault
end
begin
activity_type = domain.activity_types.create(activity_name, '1',
:default_task_list => task_list_name,
:default_task_heartbeat_timeout => 900,
:default_task_schedule_to_start_timeout => 30,
:default_task_schedule_to_close_timeout => 35,
:default_task_start_to_close_timeout => 30)
rescue ::AWS::SimpleWorkflow::Errors::TypeAlreadyExistsFault
end
workflow_execution = domain.workflow_types[process_name, 1].start_execution(:input => 'foobar')
puts workflow_execution.inspect
# poll for decision tasks from 'my-task-list'
domain.decision_tasks.poll(task_list_name) do |task|
# investigate new events and make decisions
task.new_events.each do |event|
puts "Event: #{event.event_type}"
case event.event_type
when 'WorkflowExecutionStarted'
puts "Scheduling Activity"
activity_type = domain.activity_types[activity_name, 1]
task.schedule_activity_task(activity_type, {:input => 'abc xyz'})
when 'ActivityTaskCompleted'
puts "Activity Task Completed"
task.complete_workflow_execution({:result => "done"})
end
end
end # decision task is completed here
activity.rb:
require 'aws-sdk'
config_path = File.expand_path(File.dirname(__FILE__)+"/aws.yml")
AWS.config(YAML.load(File.read(config_path)))
swf = AWS::SimpleWorkflow.new
domain = swf.domains['my-domain']
test_id = ARGV[0].to_i
puts "Test ID #{test_id}"
process_name = "my-long-process-#{test_id}"
task_list_name = "my-task-list-#{test_id}"
activity_name = "do-something-#{test_id}"
puts "Activity: #{activity_name}"
# poll 'my-task-list' for activities
domain.activity_tasks.poll(task_list_name) do |activity_task|
puts "here"
case activity_task.activity_type.name
when activity_name
puts " doing something"
activity_task.complete!
else
puts "fail"
activity_task.fail! :reason => 'unknown activity task type'
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment