cpee 2.1.41 → 2.1.43
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/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
|