jflow 0.1.0 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e8525329c288e5a0027699c40ad1539367224ec2
4
- data.tar.gz: 3545904aeda9e29048224b2983e55a805fbaec39
3
+ metadata.gz: 1c19f0cda04bce68e814c8a80b8c1e12373cfd5d
4
+ data.tar.gz: 3e5d33715df6f02f4b5dd89d1a80f9723df53c2c
5
5
  SHA512:
6
- metadata.gz: cdae9e071195443da31a403513674b2cf69378d4b59afde71f5f22d113ed99f9aa9a764d067ebc78a54dd5e5bc7828e4d29a2f8c31d94f091bf54c7c28fac57c
7
- data.tar.gz: 0b9d85ff36b13e3bd6bee7568b8a622927ae5b9d0cb87b41e25b956215835a98c11f686051e4fe6650fa1fbf7c503009eeffee701367724bad2d93e6438c2d98
6
+ metadata.gz: 79c03d1f96f1b1f6993ae9b6aaa0a58de9c9933dcf6e98fda164a54d1e5397c5ebf1421218a4e1d97a833005f6639b63f1ab4a39f09c6cde58d07cfd84d170b2
7
+ data.tar.gz: 7f4ac32fdce779941b00b9a3ec316d2638b026109d98ef65287a517f13cae4ef9e0b8fe3043f0086a844693131f997b2feedf525cb6c4b52df8d49028d5b051a
data/.travis.yml CHANGED
@@ -1,4 +1,3 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- before_install: gem install bundler -v 1.10.6
3
+ - jruby-9.0.4.0
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Jflow
2
2
 
3
+ [![Build Status](https://travis-ci.org/djpate/jflow.svg?branch=master)](https://travis-ci.org/djpate/jflow)
4
+
3
5
  JFlow is a gem that aims to let you start SWF flow activity workers for JRuby.
4
6
 
5
7
  The official framework uses Forking and thus not compatible with the JVM. This aims to give an alternative for Jruby.
@@ -28,7 +30,7 @@ Or install it yourself as:
28
30
 
29
31
  ```ruby
30
32
  Class FooActivity
31
- include JFlow::ActivityMixin
33
+ include JFlow::Activity::Mixin
32
34
 
33
35
  activity "policy_scan.run" do
34
36
  {
@@ -76,5 +78,5 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
76
78
 
77
79
  ## Contributing
78
80
 
79
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/jflow.
81
+ Bug reports and pull requests are welcome on GitHub at https://github.com/djpate/jflow.
80
82
 
data/bin/jflow_worker CHANGED
@@ -22,6 +22,7 @@ raise "configuration is invalid! #{validator.errors}" unless validator.valid?
22
22
 
23
23
  JFlow.configure do |c|
24
24
  c.load_paths = configuration["activities_path"]
25
+ c.swf_client = Aws::SWF::Client.new
25
26
  end
26
27
 
27
28
  JFlow.load_activities
@@ -32,7 +33,7 @@ configuration["number_of_workers"].times do |i|
32
33
  threads << Thread.new do
33
34
  domain = configuration["domain"]
34
35
  tasklist = configuration["tasklist"]
35
- JFlow::ActivityWorker.new(domain, tasklist)
36
+ JFlow::Activity::Worker.new(domain, tasklist)
36
37
  .start!
37
38
  end
38
39
  end
data/jflow.gemspec CHANGED
@@ -26,11 +26,13 @@ Gem::Specification.new do |spec|
26
26
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ["lib"]
28
28
 
29
+ spec.add_dependency "slop", "~> 4"
30
+
29
31
  spec.add_development_dependency "bundler", "~> 1.10"
30
32
  spec.add_development_dependency "rake", "~> 10.0"
31
33
  spec.add_development_dependency "rspec"
34
+ spec.add_development_dependency "simplecov"
35
+ spec.add_development_dependency "hash_validator"
36
+ spec.add_development_dependency "aws-sdk", "~> 2"
32
37
 
33
- spec.add_dependency "aws-sdk", "~> 2"
34
- spec.add_dependency "hash_validator"
35
- spec.add_dependency "slop", "~> 4"
36
38
  end
data/lib/jflow.rb CHANGED
@@ -1,12 +1,15 @@
1
- require "jflow/version"
2
- require "jflow/activity.rb"
3
- require "jflow/activity_mixin.rb"
4
- require "jflow/activity_worker.rb"
5
- require "jflow/configuration.rb"
6
1
  require "yaml"
7
2
  require "json"
8
3
  require "hash_validator"
9
4
  require 'aws-sdk'
5
+ require 'logger'
6
+ require "jflow/version"
7
+ require "jflow/configuration.rb"
8
+ require "jflow/activity/definition.rb"
9
+ require "jflow/activity/mixin.rb"
10
+ require "jflow/activity/task.rb"
11
+ require "jflow/activity/map.rb"
12
+ require "jflow/activity/worker.rb"
10
13
 
11
14
  module JFlow
12
15
  class << self
@@ -17,10 +20,6 @@ module JFlow
17
20
  @configuration ||= Configuration.new
18
21
  end
19
22
 
20
- def self.reset
21
- @configuration = Configuration.new
22
- end
23
-
24
23
  def self.configure
25
24
  yield(configuration)
26
25
  end
@@ -0,0 +1,83 @@
1
+ module JFlow
2
+ module Activity
3
+ class Definition
4
+
5
+ DEFAULT_OPTIONS = {}
6
+
7
+ OPTIONS_VALIDATOR = {
8
+ :version => "string",
9
+ :domain => "string",
10
+ :name => "string",
11
+ :default_task_list => {
12
+ :name => "string"
13
+ }
14
+ }
15
+
16
+ attr_reader :options, :klass
17
+
18
+ # Possible options are :
19
+ # domain: "DomainName", # required
20
+ # name: "Name", # required
21
+ # version: "Version", # required
22
+ # description: "Description",
23
+ # default_task_start_to_close_timeout: "DurationInSecondsOptional",
24
+ # default_task_heartbeat_timeout: "DurationInSecondsOptional",
25
+ # default_task_list: {
26
+ # name: "Name", # required
27
+ # },
28
+ # default_task_priority: "TaskPriority",
29
+ # default_task_schedule_to_start_timeout: "DurationInSecondsOptional",
30
+ # default_task_schedule_to_close_timeout: "DurationInSecondsOptional",
31
+ def initialize(klass, options = {})
32
+ @klass = klass
33
+ @options = DEFAULT_OPTIONS.merge(options)
34
+ @options[:name] = name
35
+ validate_activity!
36
+ register_activity unless registered?
37
+ add_to_activity_mapping
38
+ end
39
+
40
+ def register_activity
41
+ JFlow.configuration.swf_client.register_activity_type(options)
42
+ JFlow.configuration.logger.info "Activity #{name} was registered successfuly"
43
+ end
44
+
45
+ def add_to_activity_mapping
46
+ JFlow.configuration.activity_map.add_activity(name, options[:version], klass, options)
47
+ end
48
+
49
+ def name
50
+ @options[:name] || klass.name.to_s.split('::').last.scan(/[A-Z][a-z]*/).join("_").downcase
51
+ end
52
+
53
+ def version
54
+ @options[:version]
55
+ end
56
+
57
+ def registered?
58
+ response = JFlow.configuration.swf_client.list_activity_types({
59
+ domain: options[:domain],
60
+ name: name,
61
+ registration_status: "REGISTERED"
62
+ })
63
+
64
+ response.type_infos.each do |type_info|
65
+ if type_info.activity_type.name == name && type_info.activity_type.version == version
66
+ JFlow.configuration.logger.info "Activity #{name} #{version} is already registered"
67
+ return true
68
+ end
69
+ end
70
+
71
+ return false
72
+ end
73
+
74
+ private
75
+
76
+ def validate_activity!
77
+ validator = HashValidator.validate(@options, OPTIONS_VALIDATOR)
78
+ raise "Activity #{options[:name]}definition is invalid! #{validator.errors}" unless validator.valid?
79
+ end
80
+
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,21 @@
1
+ module JFlow
2
+ module Activity
3
+ class Map
4
+ def initialize
5
+ @map = {}
6
+ end
7
+
8
+ def add_activity(name, version, klass, options)
9
+ @map ||= {}
10
+ @map[name] ||= {}
11
+ @map[name][version] = {:class => klass, :options => options}
12
+ end
13
+
14
+ def klass_for(name, version)
15
+ return nil if !@map.has_key?(name) || !@map[name][version]
16
+ @map[name][version][:class]
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,20 @@
1
+ module JFlow
2
+ module Activity
3
+ module Mixin
4
+
5
+ def self.included base
6
+ base.extend ClassMethods
7
+ end
8
+
9
+ module ClassMethods
10
+ def activity(name = nil)
11
+ options = {}
12
+ options = yield if block_given?
13
+ options[:name] = name
14
+ JFlow.configuration.logger.debug "loading #{name}"
15
+ JFlow::Activity::Definition.new(self, options)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,77 @@
1
+ module JFlow
2
+ module Activity
3
+ class Task
4
+
5
+ attr_reader :task
6
+
7
+ def initialize(task)
8
+ @task = task
9
+ end
10
+
11
+ def input
12
+ YAML.load(task.input)
13
+ end
14
+
15
+
16
+ def name
17
+ task.activity_type.name
18
+ end
19
+
20
+ def version
21
+ task.activity_type.version
22
+ end
23
+
24
+ def token
25
+ task.token
26
+ end
27
+
28
+ def klass
29
+ @klass_value ||= JFlow.configuration.activity_map.klass_for(name,version)
30
+ raise "Could not find code to run for given activity" unless @klass_value
31
+ @klass_value
32
+ end
33
+
34
+ def method
35
+ if name.split('.').size > 1
36
+ method = name.split('.').last
37
+ else
38
+ method = "process"
39
+ end
40
+ end
41
+
42
+ def run!
43
+ log "Started #{klass}##{method} with #{input}"
44
+ result = klass.new.send(method, input) || "done"
45
+ log "Result is #{result.class} #{result}"
46
+ completed!(result)
47
+ end
48
+
49
+ def completed!(result)
50
+ swf_client.respond_activity_task_completed({
51
+ task_token: token,
52
+ result: result,
53
+ })
54
+ end
55
+
56
+
57
+ def failed!(exception)
58
+ swf_client.respond_activity_task_failed({
59
+ task_token: token,
60
+ reason: exception.message,
61
+ details: exception.backtrace.join("\n"),
62
+ })
63
+ end
64
+
65
+ private
66
+
67
+ def swf_client
68
+ JFlow.configuration
69
+ .swf_client
70
+ end
71
+
72
+ def log(str)
73
+ JFlow.configuration.logger.info "[#{Thread.current.object_id}] #{str}"
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,60 @@
1
+ module JFlow
2
+ module Activity
3
+ class Worker
4
+
5
+ attr_reader :domain, :tasklist
6
+
7
+ def initialize(domain, tasklist)
8
+ @domain = domain
9
+ @tasklist = tasklist
10
+ end
11
+
12
+ def start!
13
+ loop do
14
+ log "Polling for task on #{domain} - #{tasklist}"
15
+ poll
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def poll
22
+ response = JFlow.configuration.swf_client.poll_for_activity_task(poll_params)
23
+ if response.task_token
24
+ process_task(response)
25
+ else
26
+ log "Got no task"
27
+ end
28
+ end
29
+
30
+ def process_task(response)
31
+ log "Got task #{response.task_token}"
32
+ task = ActivityTask.new(response)
33
+ begin
34
+ task.run!
35
+ rescue => exception
36
+ task.failed!(e)
37
+ end
38
+ end
39
+
40
+ def identity
41
+ @identity ||= "#{`hostname`.chomp}-#{Thread.current.object_id}"
42
+ end
43
+
44
+ def log(str)
45
+ JFlow.configuration.logger.info "[#{Thread.current.object_id}] #{str}"
46
+ end
47
+
48
+ def poll_params
49
+ {
50
+ domain: domain,
51
+ task_list: {
52
+ name: tasklist,
53
+ },
54
+ identity: identity,
55
+ }
56
+ end
57
+
58
+ end
59
+ end
60
+ end
@@ -1,12 +1,13 @@
1
1
  module JFlow
2
2
  class Configuration
3
3
 
4
- attr_accessor :swf_client, :load_paths, :logger
4
+ attr_accessor :swf_client, :load_paths, :logger, :activity_map
5
5
 
6
6
  def initialize
7
- @swf_client = Aws::SWF::Client.new
8
- @load_paths = []
9
- @logger = Logger.new(STDOUT)
7
+ @swf_client = nil
8
+ @load_paths = []
9
+ @logger = Logger.new(STDOUT)
10
+ @activity_map = JFlow::Activity::Map.new
10
11
  end
11
12
  end
12
13
  end
data/lib/jflow/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module JFlow
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jflow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christophe Verbinnen
@@ -10,16 +10,30 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2016-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: slop
15
+ version_requirements: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4'
20
+ requirement: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - "~>"
23
+ - !ruby/object:Gem::Version
24
+ version: '4'
25
+ prerelease: false
26
+ type: :runtime
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  version_requirements: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - ~>
31
+ - - "~>"
18
32
  - !ruby/object:Gem::Version
19
33
  version: '1.10'
20
34
  requirement: !ruby/object:Gem::Requirement
21
35
  requirements:
22
- - - ~>
36
+ - - "~>"
23
37
  - !ruby/object:Gem::Version
24
38
  version: '1.10'
25
39
  prerelease: false
@@ -28,12 +42,12 @@ dependencies:
28
42
  name: rake
29
43
  version_requirements: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - ~>
45
+ - - "~>"
32
46
  - !ruby/object:Gem::Version
33
47
  version: '10.0'
34
48
  requirement: !ruby/object:Gem::Requirement
35
49
  requirements:
36
- - - ~>
50
+ - - "~>"
37
51
  - !ruby/object:Gem::Version
38
52
  version: '10.0'
39
53
  prerelease: false
@@ -42,58 +56,58 @@ dependencies:
42
56
  name: rspec
43
57
  version_requirements: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - '>='
59
+ - - ">="
46
60
  - !ruby/object:Gem::Version
47
61
  version: '0'
48
62
  requirement: !ruby/object:Gem::Requirement
49
63
  requirements:
50
- - - '>='
64
+ - - ">="
51
65
  - !ruby/object:Gem::Version
52
66
  version: '0'
53
67
  prerelease: false
54
68
  type: :development
55
69
  - !ruby/object:Gem::Dependency
56
- name: aws-sdk
70
+ name: simplecov
57
71
  version_requirements: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - ~>
73
+ - - ">="
60
74
  - !ruby/object:Gem::Version
61
- version: '2'
75
+ version: '0'
62
76
  requirement: !ruby/object:Gem::Requirement
63
77
  requirements:
64
- - - ~>
78
+ - - ">="
65
79
  - !ruby/object:Gem::Version
66
- version: '2'
80
+ version: '0'
67
81
  prerelease: false
68
- type: :runtime
82
+ type: :development
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: hash_validator
71
85
  version_requirements: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - '>='
87
+ - - ">="
74
88
  - !ruby/object:Gem::Version
75
89
  version: '0'
76
90
  requirement: !ruby/object:Gem::Requirement
77
91
  requirements:
78
- - - '>='
92
+ - - ">="
79
93
  - !ruby/object:Gem::Version
80
94
  version: '0'
81
95
  prerelease: false
82
- type: :runtime
96
+ type: :development
83
97
  - !ruby/object:Gem::Dependency
84
- name: slop
98
+ name: aws-sdk
85
99
  version_requirements: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - ~>
101
+ - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '4'
103
+ version: '2'
90
104
  requirement: !ruby/object:Gem::Requirement
91
105
  requirements:
92
- - - ~>
106
+ - - "~>"
93
107
  - !ruby/object:Gem::Version
94
- version: '4'
108
+ version: '2'
95
109
  prerelease: false
96
- type: :runtime
110
+ type: :development
97
111
  description: you know, for flow
98
112
  email:
99
113
  - christophe.verbinnen@lookout.com
@@ -104,9 +118,9 @@ executables:
104
118
  extensions: []
105
119
  extra_rdoc_files: []
106
120
  files:
107
- - .gitignore
108
- - .rspec
109
- - .travis.yml
121
+ - ".gitignore"
122
+ - ".rspec"
123
+ - ".travis.yml"
110
124
  - Gemfile
111
125
  - README.md
112
126
  - Rakefile
@@ -115,9 +129,11 @@ files:
115
129
  - bin/setup
116
130
  - jflow.gemspec
117
131
  - lib/jflow.rb
118
- - lib/jflow/activity.rb
119
- - lib/jflow/activity_mixin.rb
120
- - lib/jflow/activity_worker.rb
132
+ - lib/jflow/activity/definition.rb
133
+ - lib/jflow/activity/map.rb
134
+ - lib/jflow/activity/mixin.rb
135
+ - lib/jflow/activity/task.rb
136
+ - lib/jflow/activity/worker.rb
121
137
  - lib/jflow/configuration.rb
122
138
  - lib/jflow/version.rb
123
139
  homepage: https://github.com/djpate/jflow
@@ -130,17 +146,17 @@ require_paths:
130
146
  - lib
131
147
  required_ruby_version: !ruby/object:Gem::Requirement
132
148
  requirements:
133
- - - '>='
149
+ - - ">="
134
150
  - !ruby/object:Gem::Version
135
151
  version: '0'
136
152
  required_rubygems_version: !ruby/object:Gem::Requirement
137
153
  requirements:
138
- - - '>='
154
+ - - ">="
139
155
  - !ruby/object:Gem::Version
140
156
  version: '0'
141
157
  requirements: []
142
158
  rubyforge_project:
143
- rubygems_version: 2.4.5
159
+ rubygems_version: 2.4.8
144
160
  signing_key:
145
161
  specification_version: 4
146
162
  summary: SWF Flow framework for jRuby
@@ -1,81 +0,0 @@
1
- module JFlow
2
- class Activity
3
-
4
- DEFAULT_OPTIONS = {}
5
-
6
- OPTIONS_VALIDATOR = {
7
- :version => "string",
8
- :domain => "string",
9
- :name => "string",
10
- :default_task_list => {
11
- :name => "string"
12
- }
13
- }
14
-
15
- attr_reader :options, :klass
16
-
17
- # Possible options are :
18
- # domain: "DomainName", # required
19
- # name: "Name", # required
20
- # version: "Version", # required
21
- # description: "Description",
22
- # default_task_start_to_close_timeout: "DurationInSecondsOptional",
23
- # default_task_heartbeat_timeout: "DurationInSecondsOptional",
24
- # default_task_list: {
25
- # name: "Name", # required
26
- # },
27
- # default_task_priority: "TaskPriority",
28
- # default_task_schedule_to_start_timeout: "DurationInSecondsOptional",
29
- # default_task_schedule_to_close_timeout: "DurationInSecondsOptional",
30
- def initialize(klass, options = {})
31
- @klass = klass
32
- @options = DEFAULT_OPTIONS.merge(options)
33
- @options[:name] = name
34
- validate_activity!
35
- register_activity unless registered?
36
- add_to_activity_mapping
37
- end
38
-
39
- def register_activity
40
- JFlow.configuration.swf_client.register_activity_type(options)
41
- JFlow.configuration.logger.info "Activity #{name} was registered successfuly"
42
- end
43
-
44
- def add_to_activity_mapping
45
- $activity_map ||= {}
46
- $activity_map[name] ||= {}
47
- $activity_map[name][options[:version]] = {:class => klass, :options => options}
48
- end
49
-
50
- def name
51
- @options[:name] || klass.name.to_s.split('::').last.scan(/[A-Z][a-z]*/).join("_").downcase
52
- end
53
-
54
- def version
55
- @options[:version]
56
- end
57
-
58
- def validate_activity!
59
- validator = HashValidator.validate(@options, OPTIONS_VALIDATOR)
60
- raise "Activity #{options[:name]}definition is invalid! #{validator.errors}" unless validator.valid?
61
- end
62
-
63
- def registered?
64
- response = JFlow.configuration.swf_client.list_activity_types({
65
- domain: options[:domain],
66
- name: name,
67
- registration_status: "REGISTERED"
68
- })
69
-
70
- response.type_infos.each do |type_info|
71
- if type_info.activity_type.name == name && type_info.activity_type.version == version
72
- JFlow.configuration.logger.info "Activity #{name} #{version} is already registered"
73
- return true
74
- end
75
- end
76
-
77
- return false
78
- end
79
-
80
- end
81
- end
@@ -1,18 +0,0 @@
1
- module JFlow
2
- module ActivityMixin
3
-
4
- def self.included base
5
- base.extend ClassMethods
6
- end
7
-
8
- module ClassMethods
9
- def activity(name = nil)
10
- options = {}
11
- options = yield if block_given?
12
- options[:name] = name
13
- JFlow.configuration.logger.debug "loading #{name}"
14
- JFlow::Activity.new(self, options)
15
- end
16
- end
17
- end
18
- end
@@ -1,81 +0,0 @@
1
- module JFlow
2
- class ActivityWorker
3
-
4
- attr_reader :domain, :tasklist
5
-
6
- def initialize(domain, tasklist)
7
- @domain = domain
8
- @tasklist = tasklist
9
- end
10
-
11
- def start!
12
- loop do
13
- log "Polling for task on #{domain} - #{tasklist}"
14
- poll
15
- end
16
- end
17
-
18
- private
19
-
20
- def poll
21
- response = JFlow.configuration.swf_client.poll_for_activity_task(poll_params)
22
- if response.task_token
23
- process_task(response)
24
- else
25
- log "Got no task"
26
- end
27
- end
28
-
29
- def process_task(response)
30
- log "Got task #{response.task_token}"
31
-
32
- klass = class_for_activity(response.activity_type)
33
- raise "Could not find code to run for given activity" unless klass
34
-
35
- begin
36
- JFlow.configuration.logger.debug "Started #{klass}#process with #{YAML.load(response.input)}"
37
- if response.activity_type.name.split('.').size > 1
38
- method = response.activity_type.name.split('.').last
39
- else
40
- method = "process"
41
- end
42
- result = klass.new.send(method, YAML.load(response.input)) || true
43
- JFlow.configuration.logger.debug "Done #{klass}##{method}"
44
- JFlow.configuration.swf_client.respond_activity_task_completed({
45
- task_token: response.task_token,
46
- result: result,
47
- })
48
- rescue => e
49
- JFlow.configuration.swf_client.respond_activity_task_failed({
50
- task_token: response.task_token,
51
- reason: e.message,
52
- details: e.backtrace.join("\n"),
53
- })
54
- end
55
-
56
- end
57
-
58
- def identity
59
- @identity ||= "#{`hostname`.chomp}-#{Thread.current.object_id}"
60
- end
61
-
62
- def log(str)
63
- JFlow.configuration.logger.info "[#{Thread.current.object_id}] #{str}"
64
- end
65
-
66
- def poll_params
67
- {
68
- domain: domain,
69
- task_list: {
70
- name: tasklist,
71
- },
72
- identity: identity,
73
- }
74
- end
75
-
76
- def class_for_activity(activity_type)
77
- $activity_map[activity_type.name][activity_type.version][:class]
78
- end
79
-
80
- end
81
- end