taskflow-mongoid 0.1.1 → 0.1.2
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/lib/taskflow/flow.rb +56 -25
- data/lib/taskflow/version.rb +1 -1
- data/lib/taskflow/worker.rb +2 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eeeffb90deeb6366c7eb33ed0af49391f1f89353
|
4
|
+
data.tar.gz: 9ccc0648722b456c3820c351edd278817e971150
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07f79dc97c64af40fbfc204d10f4a760768080b5f007edb3f89950a66e3c8ab73e9c66226e8d915ae65e5cc658702e501c27d04f560f0f089c3ad343f422e67c
|
7
|
+
data.tar.gz: 83f96943374f2bef0c92591627bd09862f2613bd196c276cccc7bbef99dd021f1ba8f6e36622ab0f60b9025c92386c77eb55e33994d9b93f7d9a74610152f74f
|
data/lib/taskflow/flow.rb
CHANGED
@@ -46,28 +46,6 @@ class Taskflow::Flow
|
|
46
46
|
self.tasks.in(state: ['running','paused'])
|
47
47
|
end
|
48
48
|
|
49
|
-
# opts support :name,:params
|
50
|
-
def run(klass,opts={})
|
51
|
-
obj = {
|
52
|
-
klass: klass.to_s,
|
53
|
-
name: opts[:name] || klass.to_s,
|
54
|
-
input: opts[:params],
|
55
|
-
index: self.tasks.size + 1
|
56
|
-
}
|
57
|
-
task = klass.create obj.select{|k,v| v }
|
58
|
-
if opts[:before]
|
59
|
-
task.downstream << opts[:before]
|
60
|
-
end
|
61
|
-
if opts[:after]
|
62
|
-
task.upstream << opts[:after]
|
63
|
-
end
|
64
|
-
if opts[:before].nil? && opts[:after].nil? && self.tasks.last
|
65
|
-
self.tasks.last.downstream << task
|
66
|
-
end
|
67
|
-
self.tasks << task
|
68
|
-
task
|
69
|
-
end
|
70
|
-
|
71
49
|
def stop!(user_id=nil)
|
72
50
|
percent = self.tasks.map(&:progress).sum / self.tasks.size
|
73
51
|
self.update_attributes! progress: percent,halt_by: user_id,ended_at: Time.now, state: 'stopped',result: 'warning'
|
@@ -94,10 +72,14 @@ class Taskflow::Flow
|
|
94
72
|
end
|
95
73
|
|
96
74
|
private
|
75
|
+
|
97
76
|
def configure_tasks
|
98
77
|
begin
|
78
|
+
@task_list = []
|
99
79
|
configure
|
100
80
|
sort_index 1,[]
|
81
|
+
TaskFlow::Task.collection.insert @task_list
|
82
|
+
@task_list = nil
|
101
83
|
rescue=>exception
|
102
84
|
self.destroy
|
103
85
|
raise exception
|
@@ -105,12 +87,61 @@ class Taskflow::Flow
|
|
105
87
|
reload
|
106
88
|
end
|
107
89
|
|
90
|
+
# opts support :name,:params
|
91
|
+
def run(klass,opts={})
|
92
|
+
task_data = {
|
93
|
+
klass: klass.to_s,
|
94
|
+
name: opts[:name] || klass.to_s,
|
95
|
+
input: opts[:params] || {},
|
96
|
+
index: @task_list.size + 1,
|
97
|
+
_type: klass.to_s,
|
98
|
+
state: 'pending',
|
99
|
+
output: {},
|
100
|
+
progress: 0,
|
101
|
+
data: {},
|
102
|
+
flow_id: self.id,
|
103
|
+
_id: BSON::ObjectId.new,
|
104
|
+
downstream_ids: [],
|
105
|
+
upstream_ids: []
|
106
|
+
}.select{|k,v| v }
|
107
|
+
if opts[:before]
|
108
|
+
if opts[:before].is_a? Array
|
109
|
+
opts[:before].flatten!
|
110
|
+
opts[:before].each do |b|
|
111
|
+
b[:upstream_ids] << task_data[:_id]
|
112
|
+
task_data[:downstream_ids] << b[:_id]
|
113
|
+
end
|
114
|
+
else
|
115
|
+
task_data[:downstream_ids] << opts[:before][:_id]
|
116
|
+
opts[:before][:upstream_ids] << task_data[:_id]
|
117
|
+
end
|
118
|
+
end
|
119
|
+
if opts[:after]
|
120
|
+
if opts[:after].is_a? Array
|
121
|
+
opts[:after].flatten!
|
122
|
+
opts[:after].each do |a|
|
123
|
+
task_data[:upstream_ids] << a[:_id]
|
124
|
+
a[:downstream_ids] << task_data[:_id]
|
125
|
+
end
|
126
|
+
else
|
127
|
+
task_data[:upstream_ids] << opts[:after][:_id]
|
128
|
+
opts[:after][:downstream_ids] << task_data[:_id]
|
129
|
+
end
|
130
|
+
end
|
131
|
+
if opts[:before].nil? && opts[:after].nil? && @task_list.last
|
132
|
+
@task_list.last[:downstream_ids] << task_data
|
133
|
+
task_data[:upstream_ids] << @task_list.last[:_id]
|
134
|
+
end
|
135
|
+
@task_list << task_data
|
136
|
+
task_data
|
137
|
+
end
|
138
|
+
|
108
139
|
def sort_index(i,scanned)
|
109
|
-
queue =
|
140
|
+
queue = @task_list.select{|t| !scanned.include?(t[:_id]) && (t[:upstream_ids].nil? || t[:upstream_ids].empty? || t[:upstream_ids].all?{|uid| scanned.include?(uid)}) }
|
110
141
|
return if queue.empty?
|
111
142
|
queue.each do |task|
|
112
|
-
task
|
113
|
-
scanned << task
|
143
|
+
task[:index] = i
|
144
|
+
scanned << task[:_id]
|
114
145
|
end
|
115
146
|
sort_index i + 1,scanned
|
116
147
|
end
|
data/lib/taskflow/version.rb
CHANGED
data/lib/taskflow/worker.rb
CHANGED
@@ -69,9 +69,9 @@ class Taskflow::Worker
|
|
69
69
|
flow.state = 'stopped'
|
70
70
|
elsif flow.tasks.all?{|t| %w(stopped skipped).include? t.state }
|
71
71
|
flow.state = 'stopped'
|
72
|
-
elsif flow.tasks.
|
72
|
+
elsif paused_task = flow.tasks.find_by(state: 'paused')
|
73
73
|
flow.state = 'paused'
|
74
|
-
flow.result =
|
74
|
+
flow.result = paused_task.result
|
75
75
|
else
|
76
76
|
flow.state = 'running'
|
77
77
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: taskflow-mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- qujianping
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -116,3 +116,4 @@ signing_key:
|
|
116
116
|
specification_version: 4
|
117
117
|
summary: Easy task flow based on sidekiq.
|
118
118
|
test_files: []
|
119
|
+
has_rdoc:
|