cpee 2.1.41 → 2.1.43
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/cpee.gemspec +3 -3
- data/lib/cpee/implementation.rb +8 -7
- data/server/executionhandlers/ruby/controller.rb +17 -13
- data/server/routing/end.rb +2 -1
- data/server/routing/forward-votes.rb +2 -1
- data/server/routing/persist.rb +33 -34
- metadata +6 -18
- data/server/routing/end.pid +0 -1
- data/server/routing/forward-events-00.pid +0 -1
- data/server/routing/forward-events-01.pid +0 -1
- data/server/routing/forward-events-02.pid +0 -1
- data/server/routing/forward-events-03.pid +0 -1
- data/server/routing/forward-events-04.pid +0 -1
- data/server/routing/forward-votes.pid +0 -1
- data/server/routing/persist-00.pid +0 -1
- data/server/routing/persist-01.pid +0 -1
- data/server/routing/persist-02.pid +0 -1
- data/server/routing/persist-03.pid +0 -1
- data/server/routing/persist-04.pid +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: efe2b979ffa5688e94ddc6d344f22a000ec05ee8431829a540a1e029eb6447e0
|
4
|
+
data.tar.gz: e806711116591e7cbf37132ca4950d6b824b90b85fe9806b8d0a2aa2186fe43d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7216bbfcc02ef6e23c085bdbe521f8f84d39c752415bc2e46498fcd658b88eed491e1387bbd85147b1defd9cc49b8872ff82d22ceabe9e4dd4d4035c25c53bf5
|
7
|
+
data.tar.gz: 25de4d62af41f018535725dbd93b493c0e12161553c070f6c1db6dcadcca4dac9621d442eabdb8c9cfc33783e7e622cc7c8e76682a13542c262bcb6d0f0c9ddd
|
data/cpee.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "cpee"
|
3
|
-
s.version = "2.1.
|
3
|
+
s.version = "2.1.43"
|
4
4
|
s.platform = Gem::Platform::RUBY
|
5
5
|
s.license = "LGPL-3.0"
|
6
6
|
s.summary = "Preliminary release of cloud process execution engine (cpee.org). If you just need workflow execution, without a rest service exposing it, then use WEEL."
|
@@ -21,10 +21,10 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.email = 'juergen.mangler@gmail.com'
|
22
22
|
s.homepage = 'http://cpee.org/'
|
23
23
|
|
24
|
-
s.add_runtime_dependency 'riddl', '~> 0.
|
24
|
+
s.add_runtime_dependency 'riddl', '~> 0.126'
|
25
25
|
s.add_runtime_dependency 'weel', '~> 1.99', '>= 1.99.99'
|
26
26
|
s.add_runtime_dependency 'highline', '~> 2.0'
|
27
|
-
s.add_runtime_dependency 'redis', '~>
|
27
|
+
s.add_runtime_dependency 'redis', '~> 5.0'
|
28
28
|
s.add_runtime_dependency 'rubyzip', '~>2'
|
29
29
|
s.add_runtime_dependency 'charlock_holmes', '~>0'
|
30
30
|
s.add_runtime_dependency 'mimemagic', '~>0'
|
data/lib/cpee/implementation.rb
CHANGED
@@ -70,8 +70,8 @@ module CPEE
|
|
70
70
|
opts[:watchdog_start_off] ||= false
|
71
71
|
opts[:infinite_loop_stop] ||= 10000
|
72
72
|
opts[:workers] ||= 1
|
73
|
-
opts[:workers_single] ||= ['end','forward-votes']
|
74
|
-
opts[:workers_multi] ||= ['
|
73
|
+
opts[:workers_single] ||= ['end','persist','forward-votes']
|
74
|
+
opts[:workers_multi] ||= ['forward-events']
|
75
75
|
|
76
76
|
opts[:dashing_frequency] ||= 3
|
77
77
|
opts[:dashing_target] ||= nil
|
@@ -212,12 +212,13 @@ module CPEE
|
|
212
212
|
next if File.exist?(s + '.lock')
|
213
213
|
pid = (File.read(s + '.pid').to_i rescue nil)
|
214
214
|
if (pid.nil? || !(Process.kill(0, pid) rescue false))
|
215
|
-
if url.nil?
|
216
|
-
|
215
|
+
cmd = if url.nil?
|
216
|
+
"-p \"#{path}\" -d #{db} -w #{workers} restart 1>/dev/null 2>&1"
|
217
217
|
else
|
218
|
-
|
218
|
+
"-u \"#{url}\" -d #{db} -w #{workers} restart 1>/dev/null 2>&1"
|
219
219
|
end
|
220
|
-
|
220
|
+
system "#{s}.rb " + cmd + " 1>/dev/null 2>&1"
|
221
|
+
puts "➡ Service #{File.basename(s)} (#{cmd}) started ..."
|
221
222
|
end
|
222
223
|
end
|
223
224
|
workers_multi.each do |s|
|
@@ -338,7 +339,7 @@ module CPEE
|
|
338
339
|
:state => 'ready',
|
339
340
|
:attributes => CPEE::Persistence::extract_list(id,opts,'attributes').to_h
|
340
341
|
}
|
341
|
-
CPEE::Message::send(:event,'state/change',File.join(opts[:url],'/'),id,uuid,name,content,redis
|
342
|
+
CPEE::Message::send(:event,'state/change',File.join(opts[:url],'/'),id,uuid,name,content,redis)
|
342
343
|
|
343
344
|
@headers << Riddl::Header.new("CPEE-INSTANCE", id.to_s)
|
344
345
|
@headers << Riddl::Header.new("CPEE-INSTANCE-URL", File.join(opts[:url].to_s,id.to_s,'/'))
|
@@ -59,23 +59,27 @@ class Controller
|
|
59
59
|
@psredis = @opts[:redis_dyn].call "Instance #{@id} Callback Response"
|
60
60
|
@psredis.psubscribe('callback-response:*','callback-end:*') do |on|
|
61
61
|
on.pmessage do |pat, what, message|
|
62
|
-
if pat == 'callback-response:*'
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
62
|
+
if pat == 'callback-response:*'
|
63
|
+
_, worker, identifier = what.split(':')
|
64
|
+
if @callback_keys.has_key?(identifier)
|
65
|
+
index = message.index(' ')
|
66
|
+
mess = message[index+1..-1]
|
67
|
+
instance = message[0...index]
|
68
|
+
m = JSON.parse(mess)
|
69
|
+
resp = []
|
70
|
+
m['content']['values'].each do |e|
|
71
|
+
if e[1][0] == 'simple'
|
72
|
+
resp << Riddl::Parameter::Simple.new(e[0],e[1][1])
|
73
|
+
elsif e[1][0] == 'complex'
|
74
|
+
resp << Riddl::Parameter::Complex.new(e[0],e[1][1],File.open(e[1][2]))
|
75
|
+
end
|
73
76
|
end
|
77
|
+
@callback_keys[identifier].send(:callback,resp,m['content']['headers'])
|
74
78
|
end
|
75
|
-
@callback_keys[what[18..-1]].send(:callback,resp,m['content']['headers'])
|
76
79
|
end
|
77
80
|
if pat == 'callback-end:*'
|
78
|
-
|
81
|
+
_, worker, identifier = what.split(':')
|
82
|
+
@callback_keys.delete(identifier)
|
79
83
|
end
|
80
84
|
end
|
81
85
|
end
|
data/server/routing/end.rb
CHANGED
@@ -23,7 +23,8 @@ Daemonite.new do |opts|
|
|
23
23
|
opts[:runtime_opts] += [
|
24
24
|
["--url=URL", "-uURL", "Specify redis url", ->(p){ opts[:redis_url] = p }],
|
25
25
|
["--path=PATH", "-pPATH", "Specify redis path, e.g. /tmp/redis.sock", ->(p){ opts[:redis_path] = p }],
|
26
|
-
["--db=DB", "-dDB", "Specify redis db, e.g. 1", ->(p) { opts[:redis_db] = p.to_i }]
|
26
|
+
["--db=DB", "-dDB", "Specify redis db, e.g. 1", ->(p) { opts[:redis_db] = p.to_i }],
|
27
|
+
["--workers=NUM", "-wNUM", "Number of workers that are expected, e.g. 3", ->(p) { opts[:workers] = p.to_i }]
|
27
28
|
]
|
28
29
|
|
29
30
|
on startup do
|
@@ -49,7 +49,8 @@ Daemonite.new do |opts|
|
|
49
49
|
opts[:runtime_opts] += [
|
50
50
|
["--url=URL", "-uURL", "Specify redis url", ->(p){ opts[:redis_url] = p }],
|
51
51
|
["--path=PATH", "-pPATH", "Specify redis path, e.g. /tmp/redis.sock", ->(p){ opts[:redis_path] = p }],
|
52
|
-
["--db=DB", "-dDB", "Specify redis db, e.g. 1", ->(p) { opts[:redis_db] = p.to_i }]
|
52
|
+
["--db=DB", "-dDB", "Specify redis db, e.g. 1", ->(p) { opts[:redis_db] = p.to_i }],
|
53
|
+
["--workers=NUM", "-wNUM", "Number of workers that are expected, e.g. 3", ->(p) { opts[:workers] = p.to_i }]
|
53
54
|
]
|
54
55
|
|
55
56
|
on startup do
|
data/server/routing/persist.rb
CHANGED
@@ -27,44 +27,43 @@ Daemonite.new do |opts|
|
|
27
27
|
["--url=URL", "-uURL", "Specify redis url", ->(p){ opts[:redis_url] = p }],
|
28
28
|
["--path=PATH", "-pPATH", "Specify redis path, e.g. /tmp/redis.sock", ->(p){ opts[:redis_path] = p }],
|
29
29
|
["--db=DB", "-dDB", "Specify redis db, e.g. 1", ->(p) { opts[:redis_db] = p.to_i }],
|
30
|
-
["--
|
30
|
+
["--workers=NUM", "-wNUM", "Number of workers that are expected, e.g. 3", ->(p) { opts[:workers] = p.to_i }]
|
31
31
|
]
|
32
32
|
|
33
|
-
on setup do
|
34
|
-
opts[:worker] ||= 0
|
35
|
-
opts[:worker] = ('%02i' % opts[:worker]).freeze
|
36
|
-
opts[:pidfile] = File.basename(opts[:pidfile],'.pid') + '-' + opts[:worker].to_s + '.pid'
|
37
|
-
end
|
38
|
-
|
39
33
|
on startup do
|
40
34
|
opts[:redis_path] ||= '/tmp/redis.sock'.freeze
|
41
35
|
opts[:redis_db] ||= 1
|
42
|
-
opts[:events] = [
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
36
|
+
opts[:events] = []
|
37
|
+
0.upto(opts[:workers]-1) do |w|
|
38
|
+
opts[:events] += [
|
39
|
+
'event:' + ('%02i' % w) + ':state/change',
|
40
|
+
'event:' + ('%02i' % w) + ':executionhandler/change',
|
41
|
+
'event:' + ('%02i' % w) + ':description/change',
|
42
|
+
'event:' + ('%02i' % w) + ':dataelements/change',
|
43
|
+
'event:' + ('%02i' % w) + ':endpoints/change',
|
44
|
+
'event:' + ('%02i' % w) + ':attributes/change',
|
45
|
+
'event:' + ('%02i' % w) + ':transformation/change',
|
46
|
+
'event:' + ('%02i' % w) + ':status/change',
|
47
|
+
'event:' + ('%02i' % w) + ':position/change',
|
48
|
+
'event:' + ('%02i' % w) + ':handler/change',
|
49
|
+
'callback:' + ('%02i' % w) + ':activity/content'
|
50
|
+
]
|
51
|
+
end
|
52
|
+
opts[:events].freeze
|
55
53
|
CPEE::redis_connect opts, 'Server Routing Persist'
|
56
54
|
opts[:pubsubredis] = opts[:redis_dyn].call 'Server Routing Persist Sub'
|
55
|
+
rescue => e
|
56
|
+
puts e.message
|
57
|
+
puts e.backtrace
|
57
58
|
end
|
58
59
|
|
59
60
|
run do
|
60
|
-
p opts[:events]
|
61
61
|
opts[:pubsubredis].subscribe(opts[:events]) do |on|
|
62
62
|
on.message do |what, message|
|
63
|
-
p 'rrrr'
|
64
63
|
mess = JSON.parse(message[message.index(' ')+1..-1])
|
65
64
|
instance = mess.dig('instance')
|
66
65
|
case what
|
67
|
-
when
|
66
|
+
when /callback:\d+:activity\/content/
|
68
67
|
key = mess.dig('content','key')
|
69
68
|
opts[:redis].multi do |multi|
|
70
69
|
multi.sadd("instance:#{instance}/callbacks",key)
|
@@ -73,28 +72,28 @@ Daemonite.new do |opts|
|
|
73
72
|
multi.set("instance:#{instance}/callback/#{key}/position",mess.dig('content','activity'))
|
74
73
|
multi.set("instance:#{instance}/callback/#{key}/type",'callback')
|
75
74
|
end
|
76
|
-
when
|
75
|
+
when /event:\d+:state\/change/
|
77
76
|
opts[:redis].multi do |multi|
|
78
77
|
unless mess.dig('content','state') == 'purged'
|
79
78
|
multi.set("instance:#{instance}/state",mess.dig('content','state'))
|
80
79
|
multi.set("instance:#{instance}/state/@changed",mess.dig('timestamp'))
|
81
80
|
end
|
82
81
|
end
|
83
|
-
when
|
82
|
+
when /event:\d+:executionhandler\/change/
|
84
83
|
opts[:redis].set("instance:#{instance}/executionhandler",mess.dig('content','executionhandler'))
|
85
|
-
when
|
84
|
+
when /event:\d+:description\/change/
|
86
85
|
opts[:redis].multi do |multi|
|
87
86
|
multi.set("instance:#{instance}/description",mess.dig('content','description'))
|
88
87
|
multi.set("instance:#{instance}/dslx",mess.dig('content','dslx'))
|
89
88
|
multi.set("instance:#{instance}/dsl",mess.dig('content','dsl'))
|
90
89
|
end
|
91
|
-
when
|
90
|
+
when /event:\d+:dataelements\/change/, /event:\d+:endpoints\/change/, /event:\d+:attributes\/change/
|
92
91
|
topic = mess.dig('topic')
|
93
92
|
opts[:redis].multi do |multi|
|
94
93
|
mess.dig('content','changed')&.each_with_index do |c,i|
|
95
|
-
unless what
|
94
|
+
unless what =~ /event:\d+:attributes\/change/ && c == 'uuid'
|
96
95
|
multi.zadd("instance:#{instance}/#{topic}",i,c)
|
97
|
-
if what
|
96
|
+
if what =~ /event:\d+:dataelements\/change/
|
98
97
|
multi.set("instance:#{instance}/#{topic}/#{c}",CPEE::ValueHelper::generate(mess.dig('content','values',c)))
|
99
98
|
else
|
100
99
|
multi.set("instance:#{instance}/#{topic}/#{c}",mess.dig('content','values',c))
|
@@ -102,13 +101,13 @@ Daemonite.new do |opts|
|
|
102
101
|
end
|
103
102
|
end
|
104
103
|
mess.dig('content','deleted')&.to_a&.each do |c|
|
105
|
-
unless what
|
104
|
+
unless what =~ /event:\d+:attributes\/change/ && c == 'uuid'
|
106
105
|
multi.zrem("instance:#{instance}/#{topic}",c)
|
107
106
|
multi.del("instance:#{instance}/#{topic}/#{c}")
|
108
107
|
end
|
109
108
|
end
|
110
109
|
end
|
111
|
-
when
|
110
|
+
when /event:\d+:transformation\/change/
|
112
111
|
opts[:redis].multi do |multi|
|
113
112
|
multi.set("instance:#{instance}/transformation/description",mess.dig('content','description'))
|
114
113
|
multi.set("instance:#{instance}/transformation/description/@type",mess.dig('content','description_type'))
|
@@ -117,12 +116,12 @@ Daemonite.new do |opts|
|
|
117
116
|
multi.set("instance:#{instance}/transformation/endpoints",mess.dig('content','endpoints'))
|
118
117
|
multi.set("instance:#{instance}/transformation/endpoints/@type",mess.dig('content','endpoints_type'))
|
119
118
|
end
|
120
|
-
when
|
119
|
+
when /event:\d+:status\/change/
|
121
120
|
opts[:redis].multi do |multi|
|
122
121
|
multi.set("instance:#{instance}/status/id",mess.dig('content','id'))
|
123
122
|
multi.set("instance:#{instance}/status/message",mess.dig('content','message'))
|
124
123
|
end
|
125
|
-
when
|
124
|
+
when /event:\d+:position\/change/
|
126
125
|
opts[:redis].multi do |multi|
|
127
126
|
c = mess.dig('content')
|
128
127
|
c.dig('unmark')&.each do |ele|
|
@@ -149,7 +148,7 @@ Daemonite.new do |opts|
|
|
149
148
|
multi.set("instance:#{instance}/positions/#{ele['position']}",'after')
|
150
149
|
end
|
151
150
|
end
|
152
|
-
when
|
151
|
+
when /event:\d+:handler\/change/
|
153
152
|
opts[:redis].multi do |multi|
|
154
153
|
mess.dig('content','changed').each do |c|
|
155
154
|
multi.sadd("instance:#{instance}/handlers",mess.dig('content','key'))
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cpee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.43
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juergen eTM Mangler
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: tools
|
12
12
|
cert_chain: []
|
13
|
-
date: 2023-03-
|
13
|
+
date: 2023-03-03 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: riddl
|
@@ -18,14 +18,14 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '0.
|
21
|
+
version: '0.126'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - "~>"
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: '0.
|
28
|
+
version: '0.126'
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: weel
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,14 +66,14 @@ dependencies:
|
|
66
66
|
requirements:
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
69
|
+
version: '5.0'
|
70
70
|
type: :runtime
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
74
|
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: '
|
76
|
+
version: '5.0'
|
77
77
|
- !ruby/object:Gem::Dependency
|
78
78
|
name: rubyzip
|
79
79
|
requirement: !ruby/object:Gem::Requirement
|
@@ -707,21 +707,9 @@ files:
|
|
707
707
|
- server/resources/states.xml
|
708
708
|
- server/resources/topics.xml
|
709
709
|
- server/resources/transformation.xml
|
710
|
-
- server/routing/end.pid
|
711
710
|
- server/routing/end.rb
|
712
|
-
- server/routing/forward-events-00.pid
|
713
|
-
- server/routing/forward-events-01.pid
|
714
|
-
- server/routing/forward-events-02.pid
|
715
|
-
- server/routing/forward-events-03.pid
|
716
|
-
- server/routing/forward-events-04.pid
|
717
711
|
- server/routing/forward-events.rb
|
718
|
-
- server/routing/forward-votes.pid
|
719
712
|
- server/routing/forward-votes.rb
|
720
|
-
- server/routing/persist-00.pid
|
721
|
-
- server/routing/persist-01.pid
|
722
|
-
- server/routing/persist-02.pid
|
723
|
-
- server/routing/persist-03.pid
|
724
|
-
- server/routing/persist-04.pid
|
725
713
|
- server/routing/persist.rb
|
726
714
|
- server/server.conf
|
727
715
|
- server/server.pid
|
data/server/routing/end.pid
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1944554
|
@@ -1 +0,0 @@
|
|
1
|
-
1944613
|
@@ -1 +0,0 @@
|
|
1
|
-
1944633
|
@@ -1 +0,0 @@
|
|
1
|
-
1944637
|
@@ -1 +0,0 @@
|
|
1
|
-
1944645
|
@@ -1 +0,0 @@
|
|
1
|
-
1944650
|
@@ -1 +0,0 @@
|
|
1
|
-
1944558
|
@@ -1 +0,0 @@
|
|
1
|
-
1944562
|
@@ -1 +0,0 @@
|
|
1
|
-
1944566
|
@@ -1 +0,0 @@
|
|
1
|
-
1944570
|
@@ -1 +0,0 @@
|
|
1
|
-
1944598
|
@@ -1 +0,0 @@
|
|
1
|
-
1944602
|