ntswf 2.2.2 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/ntswf/activity_worker.rb +1 -6
- data/lib/ntswf/base.rb +53 -26
- data/lib/ntswf/client.rb +8 -3
- data/lib/ntswf/decision_worker.rb +3 -5
- data/lib/ntswf/worker.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eaca998680d15e5774111c72cec550bf007f4b3b
|
4
|
+
data.tar.gz: 85ef085caee9057b275ac3dbea0283f7bc4a3226
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1c424625e79cf8b2dd61467b75653a339f64d892d0e117e16f28c643c5ee6ca8e33f6db15d04b94ded33a429602e471810ca58a2b973d96dc62a1e821ba2992
|
7
|
+
data.tar.gz: 0d5a73d6197c85cfec21f61fa26e372daff066fb2b663e57eaba14bd8b6ea40b8894ff050cd752e7dc5ddb26ce0e08779a40d7d08dd0c04e269791e96d37cb7c
|
data/README.md
CHANGED
@@ -39,7 +39,7 @@ Ntswf.create(:decision_worker, config).process_decisions
|
|
39
39
|
```
|
40
40
|
config = {domain: 'my_domain', unit: 'my_worker'} # ...
|
41
41
|
worker = Ntswf.create(:activity_worker, config)
|
42
|
-
worker.
|
42
|
+
worker.on_activity ->(task) { {outcome: task.params['my_param']} }
|
43
43
|
worker.process_activities
|
44
44
|
```
|
45
45
|
|
@@ -47,11 +47,6 @@ module Ntswf
|
|
47
47
|
|
48
48
|
protected
|
49
49
|
|
50
|
-
def activity_task_list
|
51
|
-
activity_task_lists[default_unit] or raise Errors::InvalidArgument.new(
|
52
|
-
"Missing activity task list configuration for default unit '#{default_unit}'")
|
53
|
-
end
|
54
|
-
|
55
50
|
def process_single_task(activity_task)
|
56
51
|
returned_hash = @task_callback.call(describe(activity_task)) if @task_callback
|
57
52
|
process_returned_hash(activity_task, returned_hash)
|
@@ -93,4 +88,4 @@ module Ntswf
|
|
93
88
|
end
|
94
89
|
end
|
95
90
|
end
|
96
|
-
end
|
91
|
+
end
|
data/lib/ntswf/base.rb
CHANGED
@@ -6,16 +6,20 @@ module Ntswf
|
|
6
6
|
module Base
|
7
7
|
# @param config [Hash] A configuration with the following keys:
|
8
8
|
# @option config [String] :access_key_id
|
9
|
-
# AWS credential
|
9
|
+
# *deprecated:* AWS credential. Deprecated, use :swf instead.
|
10
10
|
# @option config [Hash] :activity_task_lists
|
11
|
-
# The task list names for activities
|
12
|
-
# @option config [String] :decision_task_list
|
13
|
-
#
|
11
|
+
# The task list names for activities per :unit.
|
12
|
+
# @option config [String] :decision_task_list
|
13
|
+
# *deprecated:* The task list name for decisions.
|
14
|
+
# Deprecated, use :decision_task_lists instead.
|
15
|
+
# @option config [Hash] :decision_task_lists
|
16
|
+
# The task list names for decisions per :unit.
|
17
|
+
# @option config [String] :domain The SWF domain name.
|
14
18
|
# @option config [String] :execution_id_prefix
|
15
19
|
# (value of :unit) Workflow ID prefix
|
16
|
-
# (see {Client#start_execution}'s
|
20
|
+
# (see {Client#start_execution}'s :execution_id for allowed values).
|
17
21
|
# @option config [Numeric] :execution_version
|
18
|
-
# Value allowing clients to reject future execution versions
|
22
|
+
# Value allowing clients to reject future execution versions.
|
19
23
|
# @option config [String] :identity_suffix
|
20
24
|
# When polling for a task, the suffix will be appended to the (default) identity
|
21
25
|
# (<hostname>:<pid>), delimited by a ":".
|
@@ -25,17 +29,16 @@ module Ntswf
|
|
25
29
|
# A random ID is stored at the given path, and prepended to task list names and execution IDs.
|
26
30
|
# @option config [String] :pidfile
|
27
31
|
# A path receiving the current PID for looping methods. Causes exit, if
|
28
|
-
# overwritten by another process. See {Worker#in_subprocess}
|
32
|
+
# overwritten by another process. See {Worker#in_subprocess}.
|
29
33
|
# @option config [String] :secret_access_key
|
30
|
-
# AWS credential
|
31
|
-
# @option config [Numeric] :subprocess_retries (0)
|
34
|
+
# *deprecated:* AWS credential. Deprecated, use :swf instead.
|
35
|
+
# @option config [Numeric] :subprocess_retries (0) See {Worker#in_subprocess}.
|
32
36
|
# @option config [AWS::SimpleWorkflow] :swf
|
33
|
-
# AWS simple workflow object (created e.g. with AWS::SimpleWorkflow.new)
|
34
|
-
# @option config [String] :unit This worker/client's activity task list key
|
35
|
-
# @raise [Errors::InvalidArgument] If a task list name is invalid
|
37
|
+
# AWS simple workflow object (created e.g. with AWS::SimpleWorkflow.new).
|
38
|
+
# @option config [String] :unit This worker/client's activity task list key.
|
39
|
+
# @raise [Errors::InvalidArgument] If a task list name is invalid.
|
36
40
|
def configure(config)
|
37
41
|
@config = OpenStruct.new(config)
|
38
|
-
autocomplete_task_list_names!
|
39
42
|
raise_if_invalid_task_list
|
40
43
|
end
|
41
44
|
|
@@ -74,12 +77,24 @@ module Ntswf
|
|
74
77
|
end
|
75
78
|
|
76
79
|
def activity_task_lists
|
77
|
-
|
80
|
+
autocompleted_activity_task_lists || {}
|
78
81
|
end
|
79
82
|
|
80
|
-
def
|
81
|
-
|
82
|
-
|
83
|
+
def activity_task_list(unit: nil)
|
84
|
+
unit ||= default_unit
|
85
|
+
activity_task_lists[unit] or raise Errors::InvalidArgument.new(
|
86
|
+
"Missing activity task list configuration for unit '#{unit}'")
|
87
|
+
end
|
88
|
+
|
89
|
+
def decision_task_lists
|
90
|
+
autocompleted_decision_task_lists || fallback_decision_task_lists
|
91
|
+
end
|
92
|
+
|
93
|
+
def decision_task_list(unit: nil)
|
94
|
+
unit ||= default_unit
|
95
|
+
decision_task_lists[unit] || decision_task_lists[default_unit] or
|
96
|
+
raise Errors::InvalidArgument.new(
|
97
|
+
"Missing decision task list configuration for unit '#{unit}'")
|
83
98
|
end
|
84
99
|
|
85
100
|
def default_unit
|
@@ -131,8 +146,7 @@ module Ntswf
|
|
131
146
|
end
|
132
147
|
|
133
148
|
def raise_if_invalid_task_list
|
134
|
-
|
135
|
-
[*atl_values, *@config.decision_task_list].each do |task_list|
|
149
|
+
all_task_list_names.each do |task_list|
|
136
150
|
if task_list.include?(separator)
|
137
151
|
raise Errors::InvalidArgument.new(
|
138
152
|
"Invalid config '#{task_list}': Separator '#{separator}' is reserved for internal use.")
|
@@ -144,13 +158,26 @@ module Ntswf
|
|
144
158
|
end
|
145
159
|
end
|
146
160
|
|
147
|
-
def
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
161
|
+
def all_task_list_names
|
162
|
+
[*activity_task_lists.values, *decision_task_lists.values, *@config.decision_task_list]
|
163
|
+
end
|
164
|
+
|
165
|
+
def autocompleted_activity_task_lists
|
166
|
+
autocompleted_task_lists(@config.activity_task_lists, :atl)
|
167
|
+
end
|
168
|
+
|
169
|
+
def autocompleted_decision_task_lists
|
170
|
+
autocompleted_task_lists(@config.decision_task_lists, :dtl)
|
171
|
+
end
|
172
|
+
|
173
|
+
def autocompleted_task_lists(raw_task_lists, suffix)
|
174
|
+
Hash(raw_task_lists).map do |unit, name|
|
175
|
+
{unit => autocomplete(name, "#{unit}-#{suffix}")}
|
176
|
+
end.reduce(:merge)
|
177
|
+
end
|
178
|
+
|
179
|
+
def fallback_decision_task_lists
|
180
|
+
{default_unit => autocomplete(@config.decision_task_list, "master-dtl")}
|
154
181
|
end
|
155
182
|
|
156
183
|
def autocomplete(value, fallback)
|
data/lib/ntswf/client.rb
CHANGED
@@ -10,6 +10,9 @@ module Ntswf
|
|
10
10
|
# The options configure the control flow of the task.
|
11
11
|
# Excluding *:execution_id* they will be stored in the *input* argument of the task as JSON.
|
12
12
|
# @param options [Hash] The task's options. Keys with special meaning:
|
13
|
+
# @option options [String] :activity_task_list
|
14
|
+
# The activity task list that this execution's activity tasks are routed to.
|
15
|
+
# Should be +nil+ if the execution is not bound to a specific activity task list.
|
13
16
|
# @option options [String] :execution_id
|
14
17
|
# Mandatory workflow ID suffix, allowed IDs are documented at docs.amazonwebservices.com
|
15
18
|
# (WorkflowId Property)
|
@@ -21,7 +24,8 @@ module Ntswf
|
|
21
24
|
# @option options [Array<String>] :tag_list
|
22
25
|
# Additional strings that will be added to to the tag list of the workflow execution.
|
23
26
|
# @option options [String] :unit
|
24
|
-
# The executing unit's key
|
27
|
+
# The executing unit's key.
|
28
|
+
# Corresponding task lists must be configured. See {Base#configure}.
|
25
29
|
# @option options [Numeric] :version
|
26
30
|
# Optional minimum version of the client. The task may be rescheduled by older clients.
|
27
31
|
# @return [Hash]
|
@@ -67,12 +71,13 @@ module Ntswf
|
|
67
71
|
|
68
72
|
def start_swf_workflow_execution(options)
|
69
73
|
execution_id = options.delete(:execution_id)
|
74
|
+
unit = options[:unit]
|
70
75
|
workflow_type.start_execution(
|
71
76
|
child_policy: :terminate,
|
72
77
|
execution_start_to_close_timeout: 48 * 3600,
|
73
78
|
input: options.to_json,
|
74
|
-
tag_list: [
|
75
|
-
task_list: decision_task_list,
|
79
|
+
tag_list: [unit.to_s, options[:name].to_s] + Array(options[:tag_list]),
|
80
|
+
task_list: decision_task_list(unit: unit),
|
76
81
|
task_start_to_close_timeout: 10 * 60,
|
77
82
|
workflow_id: workflow_id(execution_id_prefix, execution_id),
|
78
83
|
)
|
@@ -94,10 +94,8 @@ module Ntswf
|
|
94
94
|
def schedule(task, data_providing_event)
|
95
95
|
input = data_providing_event.attributes.input
|
96
96
|
options = parse_input(input)
|
97
|
-
|
98
|
-
|
99
|
-
raise Errors::InvalidArgument.new(
|
100
|
-
"Missing activity task list config for #{app_in_charge.inspect}") unless task_list
|
97
|
+
task_list = options['activity_task_list'] ||
|
98
|
+
activity_task_list(unit: options['unit'] || guess_app_from(data_providing_event))
|
101
99
|
|
102
100
|
task.schedule_activity_task(activity_type, {
|
103
101
|
heartbeat_timeout: :none,
|
@@ -132,4 +130,4 @@ module Ntswf
|
|
132
130
|
data_providing_event.workflow_execution.workflow_type.name[/\w+/]
|
133
131
|
end
|
134
132
|
end
|
135
|
-
end
|
133
|
+
end
|
data/lib/ntswf/worker.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ntswf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Infopark AG
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-v1
|
@@ -81,7 +81,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
81
81
|
requirements:
|
82
82
|
- - ">="
|
83
83
|
- !ruby/object:Gem::Version
|
84
|
-
version:
|
84
|
+
version: 2.0.0
|
85
85
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -89,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
89
89
|
version: '0'
|
90
90
|
requirements: []
|
91
91
|
rubyforge_project:
|
92
|
-
rubygems_version: 2.4.5
|
92
|
+
rubygems_version: 2.4.5.1
|
93
93
|
signing_key:
|
94
94
|
specification_version: 4
|
95
95
|
summary: Not That Simple Workflow
|