taskflow-mongoid 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|