cpee 2.1.29 → 2.1.30

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/cockpit/templates/Worklist.xml +47 -18
  3. data/cockpit/themes/compact/theme.js +1 -1
  4. data/cockpit/themes/control/theme.js +1 -1
  5. data/cockpit/themes/default/theme.js +1 -1
  6. data/cockpit/themes/extended/theme.js +1 -1
  7. data/cockpit/themes/model/theme.js +1 -1
  8. data/cockpit/themes/packed/theme.js +1 -1
  9. data/cockpit/themes/preset/theme.js +1 -1
  10. data/cpee.gemspec +1 -1
  11. data/lib/cpee/fail.rb +23 -0
  12. data/lib/cpee/implementation.rb +32 -23
  13. data/lib/cpee/implementation_callbacks.rb +11 -10
  14. data/lib/cpee/implementation_notifications.rb +4 -3
  15. data/lib/cpee/implementation_properties.rb +1 -0
  16. data/lib/cpee/message.rb +15 -13
  17. data/lib/cpee/persistence.rb +30 -11
  18. data/server/executionhandlers/ruby/connection.rb +2 -0
  19. data/server/executionhandlers/ruby/controller.rb +5 -3
  20. data/server/executionhandlers/ruby/dsl_to_dslx.xsl +2 -2
  21. data/server/routing/end.pid +1 -0
  22. data/server/routing/forward-events.pid +1 -0
  23. data/server/routing/forward-events.rb +6 -0
  24. data/server/routing/forward-votes.pid +1 -0
  25. data/server/routing/persist.pid +1 -0
  26. data/server/routing/persist.rb +4 -2
  27. data/server/server.conf +1 -1
  28. metadata +7 -12
  29. data/cockpit/templates/Coopis 2010.xml.active +0 -1
  30. data/cockpit/templates/Coopis 2010.xml.active-uuid +0 -1
  31. data/cockpit/templates/Subprocess.xml.active +0 -1
  32. data/cockpit/templates/Subprocess.xml.active-uuid +0 -1
  33. data/cockpit/templates/Track Test.xml.active +0 -1
  34. data/cockpit/templates/Track Test.xml.active-uuid +0 -1
  35. data/cockpit/templates/UR-VUE 2020 Solution Baseline.xml.active +0 -1
  36. data/cockpit/templates/UR-VUE 2020 Solution Baseline.xml.active-uuid +0 -1
  37. data/cockpit/templates/Wait.xml.active +0 -1
  38. data/cockpit/templates/Wait.xml.active-uuid +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 56e67e4d9fd57c8c9b51f5c5e2dd281f37fc0c219fe607c41d56e8da68cf3802
4
- data.tar.gz: 5c537c87ed397e3da5a58fa9a06a410371408229d72f8302ac3f8d1aad07bddc
3
+ metadata.gz: e5b91153e5d1f79bffd42f93f011cce42a0595f5fe17cfd0b7f6dd5a39852518
4
+ data.tar.gz: 8cfccd832f88ea23ed93d4d5bda91e2b5e9414ca195e797a665911b62b2373f5
5
5
  SHA512:
6
- metadata.gz: 1e2ffe8f6b2594b0d7badfef16628e2444df2762a639bbaf93f36191c44d69b81a120bd3ed66502f869689039fb8a5e1b0d7c10cfc36200101fc512678678a59
7
- data.tar.gz: 6eca82caf6987dd5e17c0629be864747444efd7e0d03e202d98c4759e2b5d2d29625911d08fe11c222e8b8a8d05211f7880645c260987b9225216daa93948a82
6
+ metadata.gz: b1e149e8b4ae2b28df6a30d2757b29c54aab7d65ca4f51ee7d9c226b36bceb448064439ae6e93995ee0e32a0fba01b6841ab1fb8b88afbefd2483b38c426b798
7
+ data.tar.gz: 75a3f332f847963e76c1c8557cf14af6f9f6f0b61d7722bdc09a9a864d86ae2593a2f4a695c23e1c30a12c1fa86aa0f2ef2858d8acfeeb6653eee14578d8f03a
@@ -1,3 +1,4 @@
1
+ <?xml version="1.0"?>
1
2
  <testset xmlns="http://cpee.org/ns/properties/2.0">
2
3
  <executionhandler>ruby</executionhandler>
3
4
  <dataelements>
@@ -7,7 +8,16 @@
7
8
  <timeout>http://gruppe.wst.univie.ac.at/~mangler/services/timeout.php</timeout>
8
9
  <worklist>http://cpee.org:9398</worklist>
9
10
  </endpoints>
10
- <positions/>
11
+ <attributes>
12
+ <info>Worklist</info>
13
+ <modeltype>CPEE</modeltype>
14
+ <organisation1>http://cpee.org/~demo/orgviz/organisation_informatik.xml</organisation1>
15
+ <theme>extended</theme>
16
+ <creator>Christine Ashcreek</creator>
17
+ <author>Christine Ashcreek</author>
18
+ <design_stage>development</design_stage>
19
+ <design_dir>Templates.dir</design_dir>
20
+ </attributes>
11
21
  <description>
12
22
  <description xmlns="http://cpee.org/ns/description/1.0">
13
23
  <call id="a1" endpoint="worklist">
@@ -16,19 +26,48 @@
16
26
  <method>:post</method>
17
27
  <arguments>
18
28
  <orgmodel>organisation1</orgmodel>
19
- <domain>Virtual Business 1</domain>
20
- <form>http://cpee.org/~demo/form/form-f.html</form>
21
- <role>Regular</role>
29
+ <domain>VirtualBusiness1</domain>
30
+ <form>https://cpee.org/~demo/form/form-f.html</form>
31
+ <role>Assistant</role>
22
32
  <schaden>55546</schaden>
23
33
  <text>fetzen hin</text>
24
34
  </arguments>
25
35
  </parameters>
26
36
  <code>
27
- <finalize>data.bla = result</finalize>
37
+ <prepare/>
38
+ <finalize output="result">data.bla = result</finalize>
39
+ <update output="result"/>
40
+ <rescue output="result"/>
28
41
  </code>
29
- <annotations/>
30
- <documentation/>
42
+ <annotations>
43
+ <_timing>
44
+ <_timing_weight/>
45
+ <_timing_avg/>
46
+ <explanations/>
47
+ </_timing>
48
+ <_context_data_analysis>
49
+ <probes/>
50
+ <ips/>
51
+ </_context_data_analysis>
52
+ <report>
53
+ <url/>
54
+ </report>
55
+ <_notes>
56
+ <_notes_general/>
57
+ </_notes>
58
+ </annotations>
59
+ <documentation>
60
+ <input/>
61
+ <output/>
62
+ <implementation>
63
+ <description/>
64
+ </implementation>
65
+ <code>
66
+ <description/>
67
+ </code>
68
+ </documentation>
31
69
  </call>
70
+ <stop id="a2"/>
32
71
  </description>
33
72
  </description>
34
73
  <transformation>
@@ -36,14 +75,4 @@
36
75
  <dataelements type="none"/>
37
76
  <endpoints type="none"/>
38
77
  </transformation>
39
- <attributes>
40
- <info>Worklist</info>
41
- <modeltype>CPEE</modeltype>
42
- <organisation1>http://cpee.org/~demo/orgviz/organisation_informatik.xml</organisation1>
43
- <theme>extended</theme>
44
- <creator>Christine Ashcreek</creator>
45
- <author>Christine Ashcreek</author>
46
- <design_stage>development</design_stage>
47
- <design_dir>Templates.dir</design_dir>
48
- </attributes>
49
- </testset>
78
+ </testset>
@@ -311,7 +311,7 @@ function WFAdaptorManifestation(adaptor) {
311
311
  },
312
312
  'info': function(node){ return { 'element-endpoint': $(node).attr('endpoint') }; },
313
313
  'resolve_symbol': function(node) {
314
- if($('code', node).length > 0) {
314
+ if($('> code', node).length > 0) {
315
315
  return 'callmanipulate';
316
316
  } else {
317
317
  return 'call';
@@ -329,7 +329,7 @@ function WFAdaptorManifestation(adaptor) {
329
329
  },
330
330
  'info': function(node){ return { 'element-endpoint': $(node).attr('endpoint') }; },
331
331
  'resolve_symbol': function(node) {
332
- if($('code', node).length > 0) {
332
+ if($('> code', node).length > 0) {
333
333
  return 'callmanipulate';
334
334
  } else {
335
335
  return 'call';
@@ -311,7 +311,7 @@ function WFAdaptorManifestation(adaptor) {
311
311
  },
312
312
  'info': function(node){ return { 'element-endpoint': $(node).attr('endpoint') }; },
313
313
  'resolve_symbol': function(node) {
314
- if($('code', node).length > 0) {
314
+ if($('> code', node).length > 0) {
315
315
  return 'callmanipulate';
316
316
  } else {
317
317
  return 'call';
@@ -329,7 +329,7 @@ function WFAdaptorManifestation(adaptor) {
329
329
  },
330
330
  'info': function(node){ return { 'element-endpoint': $(node).attr('endpoint') }; },
331
331
  'resolve_symbol': function(node) {
332
- if($('code', node).length > 0) {
332
+ if($('> code', node).length > 0) {
333
333
  return 'callmanipulate';
334
334
  } else {
335
335
  return 'call';
@@ -292,7 +292,7 @@ function WFAdaptorManifestation(adaptor) {
292
292
  },
293
293
  'info': function(node){ return { 'element-endpoint': $(node).attr('endpoint') }; },
294
294
  'resolve_symbol': function(node) {
295
- if($('code', node).length > 0) {
295
+ if($('> code', node).length > 0) {
296
296
  return 'callmanipulate';
297
297
  } else {
298
298
  return 'call';
@@ -311,7 +311,7 @@ function WFAdaptorManifestation(adaptor) {
311
311
  },
312
312
  'info': function(node){ return { 'element-endpoint': $(node).attr('endpoint') }; },
313
313
  'resolve_symbol': function(node) {
314
- if($('code', node).length > 0) {
314
+ if($('> code', node).length > 0) {
315
315
  return 'callmanipulate';
316
316
  } else {
317
317
  return 'call';
@@ -311,7 +311,7 @@ function WFAdaptorManifestation(adaptor) {
311
311
  },
312
312
  'info': function(node){ return { 'element-endpoint': $(node).attr('endpoint') }; },
313
313
  'resolve_symbol': function(node) {
314
- if($('code', node).length > 0) {
314
+ if($('> code', node).length > 0) {
315
315
  return 'callmanipulate';
316
316
  } else {
317
317
  return 'call';
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.29"
3
+ s.version = "2.1.30"
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."
data/lib/cpee/fail.rb ADDED
@@ -0,0 +1,23 @@
1
+
2
+ # This file is part of CPEE.
3
+ #
4
+ # CPEE is free software: you can redistribute it and/or modify it under the terms
5
+ # of the GNU General Public License as published by the Free Software Foundation,
6
+ # either version 3 of the License, or (at your option) any later version.
7
+ #
8
+ # CPEE is distributed in the hope that it will be useful, but WITHOUT ANY
9
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
10
+ # PARTICULAR PURPOSE. See the GNU General Public License for more details.
11
+ #
12
+ # You should have received a copy of the GNU General Public License along with
13
+ # CPEE (file COPYING in the main directory). If not, see
14
+ # <http://www.gnu.org/licenses/>.
15
+
16
+ module CPEE
17
+ class FAIL < Riddl::Implementation #{{{
18
+ def response
19
+ @status = 404
20
+ nil
21
+ end
22
+ end #}}}
23
+ end
@@ -16,6 +16,7 @@ require 'fileutils'
16
16
  require 'redis'
17
17
  require 'riddl/server'
18
18
  require 'riddl/client'
19
+ require_relative 'fail'
19
20
  require_relative 'redis'
20
21
  require_relative 'message'
21
22
  require_relative 'persistence'
@@ -83,7 +84,7 @@ module CPEE
83
84
  opts[:sse_connections] = {}
84
85
 
85
86
  opts[:statemachine] = CPEE::StateMachine.new opts[:states], %w{running simulating replaying finishing stopping abandoned finished} do |id|
86
- opts[:redis].get("instance:#{id}/state")
87
+ CPEE::Persistence::extract_item(id,opts,"state")
87
88
  end
88
89
 
89
90
  opts[:runtime_cmds] << [
@@ -176,16 +177,14 @@ module CPEE
176
177
 
177
178
  class Instances < Riddl::Implementation #{{{
178
179
  def response
179
- redis = @a[0][:redis]
180
+ opts = @a[0]
180
181
  Riddl::Parameter::Complex.new("wis","text/xml") do
181
182
  ins = XML::Smart::string('<instances/>')
182
- redis.zrevrange('instances',0,-1).each do |instance|
183
- statekey = "instance:#{instance}/state"
184
- attributes = "instance:#{instance}/attributes/"
185
- info = redis.get(attributes + 'info')
186
- uuid = redis.get(attributes + 'uuid')
187
- state = redis.get(statekey)
188
- state_changed = redis.get(File.join(statekey,'@changed'))
183
+ CPEE::Persistence::each_object(opts) do |instance|
184
+ info = CPEE::Persistence::extract_item(instance,opts,'attributes/info')
185
+ uuid = CPEE::Persistence::extract_item(instance,opts,'attributes/uuid')
186
+ state = CPEE::Persistence::extract_item(instance,opts,'state')
187
+ state_changed = CPEE::Persistence::extract_item(instance,opts,'state/@changed')
189
188
  ins.root.add('instance', info, 'uuid' => uuid, 'id' => instance, 'state' => state, 'state_changed' => state_changed )
190
189
  end
191
190
  ins.to_s
@@ -209,9 +208,9 @@ module CPEE
209
208
  doc = XML::Smart::open_unprotected(opts[:properties_init])
210
209
  doc.register_namespace 'p', 'http://cpee.org/ns/properties/2.0'
211
210
  name = @p[0].value
212
- id = redis.zrevrange('instances', 0, 0).first.to_i + 1
211
+ id = CPEE::Persistence::new_object(opts)
213
212
  uuid = SecureRandom.uuid
214
- instance = 'instance:' + id.to_s
213
+ instance = CPEE::Persistence::OBJ + ':' + id.to_s
215
214
  redis.multi do |multi|
216
215
  multi.zadd('instances',id,id)
217
216
  doc.root.find(PROPERTIES_PATHS_FULL.join(' | ')).each do |e|
@@ -235,12 +234,12 @@ module CPEE
235
234
  doc.register_namespace 'np', 'http://riddl.org/ns/common-patterns/notifications-producer/2.0'
236
235
  key = File.basename(File.dirname(f))
237
236
  url = doc.find('string(/np:subscription/@url)')
238
- multi.sadd("instance:#{id}/handlers",key)
239
- multi.set("instance:#{id}/handlers/#{key}/url",url)
237
+ multi.sadd(CPEE::Persistence::OBJ + ":#{id}/handlers",key)
238
+ multi.set(CPEE::Persistence::OBJ + ":#{id}/handlers/#{key}/url",url)
240
239
  doc.find('/np:subscription/np:topic/*').each do |e|
241
240
  c = File.join(e.parent.attributes['id'],e.qname.name,e.text)
242
- multi.sadd("instance:#{id}/handlers/#{key}",c)
243
- multi.sadd("instance:#{id}/handlers/#{c}",key)
241
+ multi.sadd(CPEE::Persistence::OBJ + ":#{id}/handlers/#{key}",c)
242
+ multi.sadd(CPEE::Persistence::OBJ + ":#{id}/handlers/#{c}",key)
244
243
  end
245
244
  end rescue nil # all the ones that are not ok, are ignored
246
245
  end
@@ -251,6 +250,12 @@ module CPEE
251
250
  multi.set(File.join(instance, 'state', '@changed'), Time.now.xmlschema(3))
252
251
  end
253
252
 
253
+ content = {
254
+ :state => 'ready',
255
+ :attributes => CPEE::Persistence::extract_list(id,opts,'attributes').to_h
256
+ }
257
+ CPEE::Message::send(:event,'state/change',File.join(opts[:url],'/'),id,uuid,name,content,redis)
258
+
254
259
  @headers << Riddl::Header.new("CPEE-INSTANCE", id.to_s)
255
260
  @headers << Riddl::Header.new("CPEE-INSTANCE-URL", File.join(opts[:url].to_s,id.to_s,'/'))
256
261
  @headers << Riddl::Header.new("CPEE-INSTANCE-UUID", uuid)
@@ -289,7 +294,18 @@ module CPEE
289
294
  @status = 404
290
295
  return
291
296
  end
292
- empt = redis.keys("instance:#{id}/*").to_a
297
+
298
+ content = {
299
+ :state => 'purged',
300
+ :attributes => CPEE::Persistence::extract_list(id,opts,'attributes').to_h
301
+ }
302
+ state = CPEE::Persistence::extract_item(id,opts,'state')
303
+ if state == 'stopped' || state == 'ready'
304
+ CPEE::Message::send(:event,'state/change',File.join(opts[:url],'/'),id,content[:attributes]['uuid'],content[:attributes]['info'],content,redis)
305
+ end
306
+
307
+ empt = CPEE::Persistence::keys(id,opts).to_a
308
+ empt.delete_if{|e| e =~ /\/handlers/ }
293
309
  redis.multi do |multi|
294
310
  multi.del empt
295
311
  multi.zrem 'instances', id
@@ -297,11 +313,4 @@ module CPEE
297
313
  end
298
314
  end #}}}
299
315
 
300
- class FAIL < Riddl::Implementation #{{{
301
- def response
302
- @status = 404
303
- nil
304
- end
305
- end #}}}
306
-
307
316
  end
@@ -13,6 +13,7 @@
13
13
  # <http://www.gnu.org/licenses/>.
14
14
 
15
15
  require 'json'
16
+ require_relative 'fail'
16
17
 
17
18
  module CPEE
18
19
  module Callbacks
@@ -54,13 +55,13 @@ module CPEE
54
55
  opts = @a[1]
55
56
  callback = @r[-1]
56
57
 
57
- if opts[:redis].sismember("instance:#{id}/callbacks",callback)
58
+ if CPEE::Persistence::is_member?(id,opts,'callbacks',callback)
58
59
  res = {}
59
- res[:uuid] = opts[:redis].get("instance:#{id}/callback/#{callback}/uuid")
60
- res[:type] = opts[:redis].get("instance:#{id}/callback/#{callback}/type")
61
- res[:position] = opts[:redis].get("instance:#{id}/callback/#{callback}/position")
62
- res[:label] = opts[:redis].get("instance:#{id}/callback/#{callback}/label")
63
- if sub = opts[:redis].get("instance:#{id}/callback/#{callback}/subscription")
60
+ res[:uuid] = CPEE::Persistence::extract_item(id,opts,"callback/#{callback}/uuid")
61
+ res[:type] = CPEE::Persistence::extract_item(id,opts,"callback/#{callback}/type")
62
+ res[:position] = CPEE::Persistence::extract_item(id,opts,"callback/#{callback}/position")
63
+ res[:label] = CPEE::Persistence::extract_item(id,opts,"callback/#{callback}/label")
64
+ if sub = CPEE::Persistence::extract_item(id,opts,"callback/#{callback}/subscription")
64
65
  res[:subscription] = sub
65
66
  end
66
67
 
@@ -77,7 +78,7 @@ module CPEE
77
78
  opts = @a[1]
78
79
  callback = @r[-1]
79
80
 
80
- if opts[:redis].get("instance:#{id}/callback/#{callback}/type") == 'callback'
81
+ if CPEE::Persistence::extract_item(id,opts,"callback/#{callback}/type") == 'callback'
81
82
  CPEE::Message::send(
82
83
  :'callback-end',
83
84
  callback,
@@ -88,7 +89,7 @@ module CPEE
88
89
  {},
89
90
  opts[:redis]
90
91
  )
91
- elsif opts[:redis].get("instance:#{id}/callback/#{callback}/type") == 'vote'
92
+ elsif CPEE::Persistence::extract_item(id,opts,"callback/#{callback}/type") == 'vote'
92
93
  CPEE::Message::send(
93
94
  :'vote-response',
94
95
  callback,
@@ -112,7 +113,7 @@ module CPEE
112
113
  opts = @a[1]
113
114
  callback = @r[-1]
114
115
 
115
- if opts[:redis].get("instance:#{id}/callback/#{callback}/type") == 'callback'
116
+ if CPEE::Persistence::extract_item(id,opts,"callback/#{callback}/type") == 'callback'
116
117
  ret = {}
117
118
  ret['values'] = @p.map{ |e|
118
119
  [e.name, e.class == Riddl::Parameter::Simple ? [:simple,e.value] : [:complex,e.mimetype,e.value.path] ]
@@ -129,7 +130,7 @@ module CPEE
129
130
  ret,
130
131
  opts[:redis]
131
132
  )
132
- elsif opts[:redis].get("instance:#{id}/callback/#{callback}/type") == 'vote'
133
+ elsif CPEE::Persistence::extract_item(id,opts,"callback/#{callback}/type") == 'vote'
133
134
  if @p.length == 1 && @p[0].name == 'continue' && @p[0].class == Riddl::Parameter::Simple
134
135
  CPEE::Message::send(
135
136
  :'vote-response',
@@ -13,6 +13,7 @@
13
13
  # <http://www.gnu.org/licenses/>.
14
14
 
15
15
  require 'json'
16
+ require_relative 'fail'
16
17
 
17
18
  module CPEE
18
19
  module Notifications
@@ -188,7 +189,7 @@ module CPEE
188
189
  on.pmessage do |pat, what, message|
189
190
  if pat == 'forward:*'
190
191
  id, key = what.match(/forward:([^\/]+)\/(.+)/).captures
191
- if sse = opts.dig(:sse_connections,id.to_i,key)
192
+ if sse = opts.dig(:sse_connections,id,key)
192
193
  sse.send message
193
194
  else
194
195
  DeleteSubscription::set(id,opts,key)
@@ -197,7 +198,7 @@ module CPEE
197
198
  mess = JSON.parse(message[message.index(' ')+1..-1])
198
199
  state = mess.dig('content','state')
199
200
  if state == 'finished' || state == 'abandoned'
200
- opts.dig(:sse_connections,mess.dig('instance').to_i)&.each do |key,sse|
201
+ opts.dig(:sse_connections,mess.dig('instance').to_s)&.each do |key,sse|
201
202
  EM.add_timer(10) do # just to be sure that all messages arrived. 10 seconds should be enough ... we think ... therefore we are (not sure)
202
203
  sse.close
203
204
  end
@@ -218,7 +219,7 @@ module CPEE
218
219
  class SSE < Riddl::SSEImplementation #{{{
219
220
  def onopen
220
221
  @opts = @a[1]
221
- @id = @a[0]
222
+ @id = @a[0].to_s
222
223
  @key = @r[-2]
223
224
  if CPEE::Persistence::exists_handler?(@id,@opts,@key)
224
225
  @opts[:sse_connections][@id] ||= {}
@@ -13,6 +13,7 @@
13
13
  # <http://www.gnu.org/licenses/>.
14
14
 
15
15
  require_relative 'attributes_helper'
16
+ require_relative 'fail'
16
17
  require_relative 'value_helper'
17
18
  require 'json'
18
19
  require 'erb'
data/lib/cpee/message.rb CHANGED
@@ -15,25 +15,27 @@
15
15
  module CPEE
16
16
 
17
17
  module Message
18
+ WHO = 'cpee'
19
+ TYPE = 'instance'
18
20
 
19
21
  def self::send(type, event, cpee, instance, instance_uuid, instance_name, content={}, backend)
20
22
  topic = ::File::dirname(event)
21
23
  name = ::File::basename(event)
24
+ payload = {
25
+ WHO => cpee,
26
+ TYPE + '-url' => File.join(cpee,instance.to_s),
27
+ TYPE => instance,
28
+ 'topic' => topic,
29
+ 'type' => type,
30
+ 'name' => name,
31
+ 'timestamp' => Time.now.xmlschema(3),
32
+ 'content' => content
33
+ }
34
+ payload[TYPE + '-uuid'] = instance_uuid if instance_uuid
35
+ payload[TYPE + '-name'] = instance_name if instance_name
22
36
  backend.publish(type.to_s + ':' + event,
23
37
  instance.to_s + ' ' +
24
- JSON::generate(
25
- { 'cpee' => cpee,
26
- 'instance-url' => File.join(cpee,instance.to_s),
27
- 'instance-uuid' => instance_uuid,
28
- 'instance-name' => instance_name,
29
- 'instance' => instance,
30
- 'topic' => topic,
31
- 'type' => type,
32
- 'name' => name,
33
- 'timestamp' => Time.now.xmlschema(3),
34
- 'content' => content
35
- }
36
- )
38
+ JSON::generate(payload)
37
39
  )
38
40
  end
39
41
 
@@ -15,6 +15,8 @@
15
15
  module CPEE
16
16
 
17
17
  module Persistence
18
+ OBJ = 'instance'
19
+
18
20
  def self::set_list(id,opts,item,values,deleted=[]) #{{{
19
21
  ah = AttributesHelper.new
20
22
  attributes = Persistence::extract_list(id,opts,'attributes').to_h
@@ -37,13 +39,13 @@ module CPEE
37
39
  )
38
40
  end #}}}
39
41
  def self::extract_set(id,opts,item) #{{{
40
- opts[:redis].smembers("instance:#{id}/#{item}").map do |e|
41
- [e,opts[:redis].get("instance:#{id}/#{item}/#{e}")]
42
+ opts[:redis].smembers(OBJ + ":#{id}/#{item}").map do |e|
43
+ [e,opts[:redis].get(OBJ + ":#{id}/#{item}/#{e}")]
42
44
  end
43
45
  end #}}}
44
46
  def self::extract_list(id,opts,item) #{{{
45
- opts[:redis].zrange("instance:#{id}/#{item}",0,-1).map do |e|
46
- [e,opts[:redis].get("instance:#{id}/#{item}/#{e}")]
47
+ opts[:redis].zrange(OBJ + ":#{id}/#{item}",0,-1).map do |e|
48
+ [e,opts[:redis].get(OBJ + ":#{id}/#{item}/#{e}")]
47
49
  end
48
50
  end #}}}
49
51
 
@@ -60,15 +62,32 @@ module CPEE
60
62
  )
61
63
  end #}}}
62
64
  def self::extract_item(id,opts,item) #{{{
63
- opts[:redis].get("instance:#{id}/#{item}")
65
+ opts[:redis].get(OBJ + ":#{id}/#{item}")
64
66
  end #}}}
65
67
 
66
68
  def self::exists?(id,opts) #{{{
67
- opts[:redis].exists?("instance:#{id}/state")
69
+ opts[:redis].exists?(OBJ + ":#{id}/state")
68
70
  end #}}}
71
+ def self::is_member?(id,opts,item,value) #{{{
72
+ opts[:redis].sismember(OBJ + ":#{id}/#{item}",value)
73
+ end #}}}
74
+
75
+ def self::each_object(opts)
76
+ opts[:redis].zrevrange(OBJ + 's',0,-1).each do |instance|
77
+ yield instance
78
+ end
79
+ end
80
+
81
+ def self::new_object(opts)
82
+ opts[:redis].zrevrange(OBJ + 's', 0, 0).first.to_i + 1
83
+ end
84
+
85
+ def self::keys(id,opts,item=nil)
86
+ opts[:redis].keys(File.join(OBJ + ":#{id}",item.to_s,'*'))
87
+ end
69
88
 
70
89
  def self::set_handler(id,opts,key,url,values,update=false) #{{{
71
- exis = opts[:redis].smembers("instance:#{id}/handlers/#{key}")
90
+ exis = opts[:redis].smembers(OBJ + ":#{id}/handlers/#{key}")
72
91
 
73
92
  if update == false && exis.length > 0
74
93
  return 405
@@ -101,14 +120,14 @@ module CPEE
101
120
  200
102
121
  end #}}}
103
122
  def self::extract_handler(id,opts,key) #{{{
104
- opts[:redis].smembers("instance:#{id}/handlers/#{key}")
123
+ opts[:redis].smembers(OBJ + ":#{id}/handlers/#{key}")
105
124
  end #}}}
106
125
  def self::exists_handler?(id,opts,key) #{{{
107
- opts[:redis].exists?("instance:#{id}/handlers/#{key}")
126
+ opts[:redis].exists?(OBJ + ":#{id}/handlers/#{key}")
108
127
  end #}}}
109
128
  def self::extract_handlers(id,opts) #{{{
110
- opts[:redis].smembers("instance:#{id}/handlers").map do |e|
111
- [e, opts[:redis].get("instance:#{id}/handlers/#{e}/url")]
129
+ opts[:redis].smembers(OBJ + ":#{id}/handlers").map do |e|
130
+ [e, opts[:redis].get(OBJ + ":#{id}/handlers/#{e}/url")]
112
131
  end
113
132
  end #}}}
114
133
  end
@@ -220,6 +220,8 @@ class ConnectionWrapper < WEEL::ConnectionWrapperBase
220
220
  elsif result[0].is_a? Riddl::Parameter::Complex
221
221
  if result[0].mimetype == 'application/json'
222
222
  result = JSON::parse(result[0].value.read) rescue nil
223
+ elsif result[0].mimetype == 'text/yaml'
224
+ result = YAML::load(result[0].value.read) rescue nil
223
225
  elsif result[0].mimetype == 'application/xml' || result[0].mimetype == 'text/xml'
224
226
  result = XML::Smart::string(result[0].value.read) rescue nil
225
227
  elsif result[0].mimetype == 'text/plain'
@@ -21,6 +21,7 @@ require 'cpee/value_helper'
21
21
  require 'cpee/attributes_helper'
22
22
  require 'cpee/message'
23
23
  require 'cpee/redis'
24
+ require 'cpee/persistence'
24
25
 
25
26
  require 'ostruct'
26
27
  class ParaStruct < OpenStruct
@@ -41,8 +42,8 @@ class Controller
41
42
  @id = id
42
43
 
43
44
  @attributes = {}
44
- @redis.keys("instance:#{id}/attributes/*").each do |key|
45
- @attributes[File.basename(key)] = @redis.get(key)
45
+ CPEE::Persistence::extract_list(id,opts,'attributes').each do |de|
46
+ @attributes[de[0]] = de[1]
46
47
  end
47
48
 
48
49
  @attributes_helper = AttributesHelper.new
@@ -152,7 +153,8 @@ class Controller
152
153
  topic, name = what.split('/')
153
154
  handler = File.join(topic,'vote',name)
154
155
  votes = []
155
- @redis.smembers("instance:#{id}/handlers/#{handler}").each do |client|
156
+
157
+ CPEE::Persistence::extract_handler(id,@opts,handler).each do |client|
156
158
  voteid = Digest::MD5.hexdigest(Kernel::rand().to_s)
157
159
  content[:key] = voteid
158
160
  content[:attributes] = attributes_translated
@@ -6,10 +6,10 @@
6
6
  <xsl:template match="/">
7
7
  <xsl:text>control flow do</xsl:text>
8
8
  <xsl:call-template name="print-newline"/>
9
- <xsl:apply-templates select="//d:description"/>
9
+ <xsl:apply-templates select="/d:description"/>
10
10
  <xsl:text>end</xsl:text>
11
11
  </xsl:template>
12
- <xsl:template match="//d:description">
12
+ <xsl:template match="/d:description">
13
13
  <xsl:apply-templates>
14
14
  <xsl:with-param name="myspace">
15
15
  <xsl:value-of select="0*$myspacemultiplier"/>
@@ -0,0 +1 @@
1
+ 1772897
@@ -0,0 +1 @@
1
+ 1772901
@@ -62,6 +62,12 @@ Daemonite.new do |opts|
62
62
  end
63
63
  end
64
64
  end
65
+ unless opts[:redis].exists?("instance:#{instance}/state")
66
+ empt = opts[:redis].keys("instance:#{instance}/*").to_a
67
+ opts[:redis].multi do |multi|
68
+ multi.del empt
69
+ end
70
+ end
65
71
  rescue => e
66
72
  puts e.message
67
73
  puts e.backtrace
@@ -0,0 +1 @@
1
+ 1772905
@@ -0,0 +1 @@
1
+ 1772911
@@ -66,8 +66,10 @@ Daemonite.new do |opts|
66
66
  end
67
67
  when 'event:state/change'
68
68
  opts[:redis].multi do |multi|
69
- multi.set("instance:#{instance}/state",mess.dig('content','state'))
70
- multi.set("instance:#{instance}/state/@changed",mess.dig('timestamp'))
69
+ unless mess.dig('content','state') == 'purged'
70
+ multi.set("instance:#{instance}/state",mess.dig('content','state'))
71
+ multi.set("instance:#{instance}/state/@changed",mess.dig('timestamp'))
72
+ end
71
73
  end
72
74
  when 'event:executionhandler/change'
73
75
  opts[:redis].set("instance:#{instance}/executionhandler",mess.dig('content','executionhandler'))
data/server/server.conf CHANGED
@@ -1,4 +1,4 @@
1
1
  :host: tango.wst.univie.ac.at
2
2
  :port: 8298
3
- :url: http://tango.wst.univie.ac.at:8298
3
+ :url: http://tango.wst.univie.ac.at/flow/engine/
4
4
  :secure: false
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.29
4
+ version: 2.1.30
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: 2021-11-18 00:00:00.000000000 Z
13
+ date: 2022-01-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: riddl
@@ -221,30 +221,20 @@ files:
221
221
  - cockpit/templates.legacy/testsets.xml
222
222
  - cockpit/templates.legacy/transformations.xml
223
223
  - cockpit/templates/Coopis 2010.xml
224
- - cockpit/templates/Coopis 2010.xml.active
225
- - cockpit/templates/Coopis 2010.xml.active-uuid
226
224
  - cockpit/templates/IUPC arXiv:1104.3609 P34 1.xml
227
225
  - cockpit/templates/IUPC arXiv:1104.3609 P34 2.xml
228
226
  - cockpit/templates/IUPC arXiv:1104.3609 P34 3.xml
229
227
  - cockpit/templates/Subprocess.xml
230
- - cockpit/templates/Subprocess.xml.active
231
- - cockpit/templates/Subprocess.xml.active-uuid
232
228
  - cockpit/templates/Subprocess.xml.attrs
233
229
  - cockpit/templates/Track Test Local.xml
234
230
  - cockpit/templates/Track Test.xml
235
- - cockpit/templates/Track Test.xml.active
236
- - cockpit/templates/Track Test.xml.active-uuid
237
231
  - cockpit/templates/Track Test.xml.attrs
238
232
  - cockpit/templates/UR-VUE 2020 Manual Adjust.xml
239
233
  - cockpit/templates/UR-VUE 2020 Solution Baseline.xml
240
- - cockpit/templates/UR-VUE 2020 Solution Baseline.xml.active
241
- - cockpit/templates/UR-VUE 2020 Solution Baseline.xml.active-uuid
242
234
  - cockpit/templates/UR-VUE 2020 Solution NN.xml
243
235
  - cockpit/templates/UR-VUE 2020 Solution View.xml
244
236
  - cockpit/templates/UR-VUE 2020.xml
245
237
  - cockpit/templates/Wait.xml
246
- - cockpit/templates/Wait.xml.active
247
- - cockpit/templates/Wait.xml.active-uuid
248
238
  - cockpit/templates/Wait.xml.attrs
249
239
  - cockpit/templates/Worklist.xml
250
240
  - cockpit/templates/instantiate.local/Take_Sub.xml
@@ -616,6 +606,7 @@ files:
616
606
  - lib/callbacks/callbacks.rng
617
607
  - lib/cpee.xml
618
608
  - lib/cpee/attributes_helper.rb
609
+ - lib/cpee/fail.rb
619
610
  - lib/cpee/implementation.rb
620
611
  - lib/cpee/implementation_callbacks.rb
621
612
  - lib/cpee/implementation_notifications.rb
@@ -672,9 +663,13 @@ files:
672
663
  - server/resources/states.xml
673
664
  - server/resources/topics.xml
674
665
  - server/resources/transformation.xml
666
+ - server/routing/end.pid
675
667
  - server/routing/end.rb
668
+ - server/routing/forward-events.pid
676
669
  - server/routing/forward-events.rb
670
+ - server/routing/forward-votes.pid
677
671
  - server/routing/forward-votes.rb
672
+ - server/routing/persist.pid
678
673
  - server/routing/persist.rb
679
674
  - server/server.conf
680
675
  - server/server.rb
@@ -1 +0,0 @@
1
- https://cpee.org/flow/engine/542
@@ -1 +0,0 @@
1
- 692f7da6-a212-4876-9e72-dd8fc242651d
@@ -1 +0,0 @@
1
- https://cpee.org/flow/engine/215
@@ -1 +0,0 @@
1
- e109897c-8484-4d87-b7d3-8786731a2f0a
@@ -1 +0,0 @@
1
- https://cpee.org/flow/engine/194
@@ -1 +0,0 @@
1
- 92a04ef3-759d-451b-97ef-a5dab3c8809a
@@ -1 +0,0 @@
1
- https://cpee.org/flow/engine/613
@@ -1 +0,0 @@
1
- ffbc55c8-0759-42f8-955e-30ebf9c086a6
@@ -1 +0,0 @@
1
- https://cpee.org/flow/engine/199
@@ -1 +0,0 @@
1
- bf96a05e-845c-4f6e-88a8-b0d0d0ea9b8f