cpee 2.1.70 → 2.1.71

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/cockpit/js/instance.js +13 -1
  3. data/cockpit/templates/{Coopis 2010 Ext.xml → Coopis 2010 Eval.xml } +2 -3
  4. data/cockpit/themes/reduced/rngs/alternative.rng +25 -0
  5. data/cockpit/themes/reduced/rngs/call.rng +228 -0
  6. data/cockpit/themes/reduced/rngs/callmanipulate.rng +257 -0
  7. data/cockpit/themes/reduced/rngs/choose.rng +14 -0
  8. data/cockpit/themes/reduced/rngs/closed_loop.rng +62 -0
  9. data/cockpit/themes/reduced/rngs/closed_loop_cancel.rng +5 -0
  10. data/cockpit/themes/reduced/rngs/closed_loop_control.rng +31 -0
  11. data/cockpit/themes/reduced/rngs/closed_loop_measuring.rng +12 -0
  12. data/cockpit/themes/reduced/rngs/critical.rng +5 -0
  13. data/cockpit/themes/reduced/rngs/escape.rng +1 -0
  14. data/cockpit/themes/reduced/rngs/group.rng +3 -0
  15. data/cockpit/themes/reduced/rngs/loop.rng +22 -0
  16. data/cockpit/themes/reduced/rngs/manipulate.rng +9 -0
  17. data/cockpit/themes/reduced/rngs/otherwise.rng +22 -0
  18. data/cockpit/themes/reduced/rngs/parallel.rng +27 -0
  19. data/cockpit/themes/reduced/rngs/parallel_branch.rng +2 -0
  20. data/cockpit/themes/reduced/rngs/scripts.rng +23 -0
  21. data/cockpit/themes/reduced/rngs/start.rng +131 -0
  22. data/cockpit/themes/reduced/rngs/stop.rng +5 -0
  23. data/cockpit/themes/reduced/rngs/terminate.rng +1 -0
  24. data/cockpit/themes/reduced/symbols/alternative.svg +5 -0
  25. data/cockpit/themes/reduced/symbols/arrow.svg +3 -0
  26. data/cockpit/themes/reduced/symbols/call.svg +6 -0
  27. data/cockpit/themes/reduced/symbols/call_sensor.svg +9 -0
  28. data/cockpit/themes/reduced/symbols/callmanipulate.svg +8 -0
  29. data/cockpit/themes/reduced/symbols/callmanipulate_sensor.svg +11 -0
  30. data/cockpit/themes/reduced/symbols/choose.svg +5 -0
  31. data/cockpit/themes/reduced/symbols/choose_exclusive.svg +5 -0
  32. data/cockpit/themes/reduced/symbols/choose_inclusive.svg +4 -0
  33. data/cockpit/themes/reduced/symbols/closed_loop.svg +5 -0
  34. data/cockpit/themes/reduced/symbols/closed_loop_cancel.svg +5 -0
  35. data/cockpit/themes/reduced/symbols/closed_loop_control.svg +5 -0
  36. data/cockpit/themes/reduced/symbols/closed_loop_measuring.svg +6 -0
  37. data/cockpit/themes/reduced/symbols/complex.svg +8 -0
  38. data/cockpit/themes/reduced/symbols/critical.svg +4 -0
  39. data/cockpit/themes/reduced/symbols/delete.svg +4 -0
  40. data/cockpit/themes/reduced/symbols/end.svg +3 -0
  41. data/cockpit/themes/reduced/symbols/escape.svg +5 -0
  42. data/cockpit/themes/reduced/symbols/event_end.svg +3 -0
  43. data/cockpit/themes/reduced/symbols/loop.svg +5 -0
  44. data/cockpit/themes/reduced/symbols/manipulate.svg +4 -0
  45. data/cockpit/themes/reduced/symbols/otherwise.svg +5 -0
  46. data/cockpit/themes/reduced/symbols/parallel.svg +5 -0
  47. data/cockpit/themes/reduced/symbols/parallel_branch.svg +5 -0
  48. data/cockpit/themes/reduced/symbols/parallel_branch_compact.svg +4 -0
  49. data/cockpit/themes/reduced/symbols/parallel_branch_event.svg +14 -0
  50. data/cockpit/themes/reduced/symbols/parallel_branch_normal.svg +5 -0
  51. data/cockpit/themes/reduced/symbols/parallel_eventbased_exclusive.svg +9 -0
  52. data/cockpit/themes/reduced/symbols/parallel_eventbased_parallel.svg +8 -0
  53. data/cockpit/themes/reduced/symbols/scripts.svg +4 -0
  54. data/cockpit/themes/reduced/symbols/start.svg +3 -0
  55. data/cockpit/themes/reduced/symbols/start_event.svg +5 -0
  56. data/cockpit/themes/reduced/symbols/stop.svg +5 -0
  57. data/cockpit/themes/reduced/symbols/terminate.svg +4 -0
  58. data/cockpit/themes/reduced/theme.js +11 -0
  59. data/cpee.gemspec +1 -1
  60. data/server/executionhandlers/{rubyext → eval}/backend/opts.yaml +1 -3
  61. data/server/executionhandlers/{rubyext → eval}/connection.rb +37 -106
  62. data/server/executionhandlers/{rubyext → eval}/controller.rb +0 -6
  63. data/server/executionhandlers/{rubyext → eval}/execution.rb +20 -22
  64. data/server/executionhandlers/ruby/backend/opts.yaml +2 -0
  65. data/server/executionhandlers/ruby/connection.rb +154 -57
  66. data/server/executionhandlers/ruby/controller.rb +16 -0
  67. data/server/executionhandlers/ruby/dsl_to_dslx.xsl +29 -29
  68. data/server/executionhandlers/ruby/execution.rb +15 -13
  69. data/server/routing/end.pid +1 -1
  70. data/server/routing/forward-events-00.pid +1 -1
  71. data/server/routing/forward-votes.pid +1 -1
  72. data/server/routing/persist.pid +1 -1
  73. metadata +67 -12
  74. /data/server/executionhandlers/{rubyext → eval}/backend/README.md +0 -0
  75. /data/server/executionhandlers/{rubyext → eval}/backend/instance.template +0 -0
  76. /data/server/executionhandlers/{rubyext → eval}/backend/run +0 -0
  77. /data/server/executionhandlers/{rubyext → eval}/dsl_to_dslx.xsl +0 -0
@@ -0,0 +1,5 @@
1
+ <svg class="clickable" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="11" y="6" width="9" height="18" rx="0" class="hline white"/>
3
+ <path class="cline hfill stand" d="M 11,5 C 2,9 2,21 11,25 M 20,5 C 29,9 29,21 20,25" style="stroke-dasharray:1,4;"/>
4
+ <line x1="15.6" y1="4" x2="15.6" y2="27" class="ourline"/>
5
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg class="clickable" xmlns="http://www.w3.org/2000/svg">
2
+ <rect transform="rotate(45,14,12)" x="7" y="3" width="21" height="21" class="cline hfill stand"/>
3
+ <text transform="translate(15,20)" class="small">|||</text>
4
+ </svg>
@@ -0,0 +1,14 @@
1
+ <svg class="clickable" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="1" y="3" width="24" height="24" rx="4" class="hfill rfill cline stand"/>
3
+
4
+ <circle cx="24" cy="15" r="9" class="cline rfill standthin" style="stroke-dasharray: 1,2"/>
5
+ <circle cx="24" cy="15" r="7" class="cline rfill standthin" style="stroke-dasharray: 1,2"/>
6
+ <line x1="24" y1="11" x2="20" y2="18" class="stand"/>
7
+ <line x1="20" y1="18" x2="28" y2="18" class="stand"/>
8
+ <line x1="28" y1="18" x2="24" y2="11" class="stand"/>
9
+
10
+ <circle cx="55.5" cy="15" r="14" class="cline hfill rfill stand"/>
11
+ <line x1="55.5" y1="11" x2="51.5" y2="18" class="stand"/>
12
+ <line x1="51.5" y1="18" x2="59.5" y2="18" class="stand"/>
13
+ <line x1="59.5" y1="18" x2="55.5" y2="11" class="stand"/>
14
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg class="clickable" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="11" y="6" width="9" height="18" rx="0" class="hline white"/>
3
+ <path class="cline hfill stand" d="M 11,5 C 2,9 2,21 11,25 M 20,5 C 29,9 29,21 20,25" style="stroke-dasharray:1,4;"/>
4
+ <line x1="15.6" y1="4" x2="15.6" y2="27" class="ourline"/>
5
+ </svg>
@@ -0,0 +1,9 @@
1
+ <svg class="clickable" xmlns="http://www.w3.org/2000/svg">
2
+ <rect transform="rotate(45,14,12)" x="7" y="3" width="21" height="21" class="cline hfill stand"/>
3
+ <circle cx="15.5" cy="15.5" r="8" class="standthin"/>
4
+ <circle cx="15.5" cy="15.5" r="6" class="standthin"/>
5
+ <path
6
+ d="m 15.500001,11.435193 3.825246,2.779205 -1.461114,4.496849 h -4.728265 l -1.461115,-4.496849 z"
7
+ class="stand"/>
8
+ </svg>
9
+
@@ -0,0 +1,8 @@
1
+ <svg class="clickable" xmlns="http://www.w3.org/2000/svg">
2
+ <rect transform="rotate(45,14,12)" x="7" y="3" width="21" height="21" class="cline hfill stand"/>
3
+ <circle cx="15.5" cy="15.5" r="8" class="standthin"/>
4
+ <circle cx="15.5" cy="15.5" r="6" class="standthin"/>
5
+ <line x1="12.5" y1="15.5" x2="18.5" y2="15.5" class="stand"/>
6
+ <line x1="15.5" y1="12.5" x2="15.5" y2="18.5" class="stand"/>
7
+ </svg>
8
+
@@ -0,0 +1,4 @@
1
+ <svg class="clickable" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="1" y="1" width="28" height="28" rx="4" class="hfill rfill cline stand"/>
3
+ <text transform="translate(15,21)" class="normal">s</text>
4
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg class="clickable" xmlns="http://www.w3.org/2000/svg">
2
+ <circle cx="15" cy="15" r="14" class="cline hfill rfill stand"/>
3
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg class="clickable" xmlns="http://www.w3.org/2000/svg">
2
+ <circle cx="15" cy="15" r="14" class="hfill rfill cline stand"/>
3
+ <rect x="7" y="10" width="16" height="11" class="black" style="fill: none"/>
4
+ <path d="m 7,10 8,6 8,-6" class="black" style="fill: none"/>
5
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg class="clickable" xmlns="http://www.w3.org/2000/svg">
2
+ <circle cx="15" cy="15" r="14" class="hfill rfill cline stand"/>
3
+ <line x1="12.5" y1="22.5" x2="12.5" y2="8.5" class="stand"/>
4
+ <line x1="17.5" y1="22.5" x2="17.5" y2="8.5" class="stand"/>
5
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg class="clickable" xmlns="http://www.w3.org/2000/svg">
2
+ <circle cx="15" cy="15" r="14" class="standfat"/>
3
+ <circle cx="15" cy="15" r="9" class="black"/>
4
+ </svg>
@@ -0,0 +1,11 @@
1
+ WFAdaptorManifestation = class extends WFAdaptorManifestationBase {
2
+ constructor(adaptor) {
3
+ super(adaptor);
4
+ var self = this;
5
+ this.striped = true;
6
+ this.elements.choose.illustrator.label = null;
7
+ this.elements.alternative.illustrator.label = null;
8
+ this.elements.loop_finish.illustrator.label = null;
9
+ this.elements.loop_head.illustrator.label = null;
10
+ }
11
+ }
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.70"
3
+ s.version = "2.1.71"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.license = "LGPL-3.0-or-later"
6
6
  s.summary = "The cloud process execution engine (cpee.org). If you just need workflow execution, without a rest service exposing it, then use WEEL."
@@ -3,6 +3,4 @@
3
3
  :redis_path: /tmp/redis.sock
4
4
  :redis_db: 3
5
5
  :executionhandlers: ../../executionhandlers/
6
- :executionhandler: rubyext
7
- :url_result_transformation: http://localhost:9302/structurize
8
- :url_code: http://localhost:9302/exec
6
+ :executionhandler: eval
@@ -36,18 +36,18 @@ class ConnectionWrapper < WEEL::ConnectionWrapperBase
36
36
  def self::inform_syntax_error(arguments,err,code)# {{{
37
37
  # TODO extract spot (code) where error happened for better error handling (ruby 3.1 only)
38
38
  # https://github.com/rails/rails/pull/45818/commits/3beb2aff3be712e44c34a588fbf35b79c0246ca5
39
- p err
40
- p err.message
41
- p err.backtrace
39
+ puts err.message
40
+ puts err.backtrace
42
41
  controller = arguments[0]
43
- controller.notify("executionhandler/error", :message => err.backtrace[0].match(/(.*?)(, Line |:)(\d+):\s(.*)/)[4] + err.message, :line => err.backtrace[0].match(/(.*?)(, Line |:)(\d+):/)[3], :where => err.backtrace[0].match(/(.*?)(, Line |:)(\d+):/)[1])
44
- #mess = err.backtrace ? err.backtrace[0].gsub(/([\w -_]+):(\d+):in.*/,'\\1, Line \2: ') : ''
45
- #mess += err.message
46
- #controller.notify("description/error", :message => err.message, :line => err.backtrace[0].match(/(.*?):(\d+):/)[2], :where => err.backtrace[0].match(/(.*?):(\d+):/)[1])
42
+ mess = err.backtrace ? err.backtrace[0].gsub(/([\w -_]+):(\d+):in.*/,'\\1, Line \2: ') : ''
43
+ mess += err.message
44
+ controller.notify("description/error", :message => mess)
47
45
  end# }}}
48
46
  def self::inform_connectionwrapper_error(arguments,err) # {{{
49
47
  controller = arguments[0]
50
- controller.notify("executionhandler/error", :message => err.backtrace[0].match(/(.*?), Line (\d+):\s(.*)/)[3] + err.message, :line => err.backtrace[0].match(/(.*?), Line (\d+):/)[2], :where => err.backtrace[0].match(/(.*?), Line (\d+):/)[1])
48
+ puts err.message
49
+ puts err.backtrace
50
+ controller.notify("executionhandler/error", :message => err.backtrace[0].gsub(/([\w -_]+):(\d+):in.*/,'\\1, Line \2: ') + err.message)
51
51
  end # }}}
52
52
  def self::inform_position_change(arguments,ipc={}) # {{{
53
53
  controller = arguments[0]
@@ -249,7 +249,9 @@ class ConnectionWrapper < WEEL::ConnectionWrapperBase
249
249
  @controller.notify("activity/manipulating", :'activity-uuid' => @handler_activity_uuid, :endpoint => @handler_endpoint, :label => @label, :activity => @handler_position)
250
250
  end # }}}
251
251
  def inform_activity_failed(err) # {{{
252
- @controller.notify("activity/failed", :'activity-uuid' => @handler_activity_uuid, :endpoint => @handler_endpoint, :label => @label, :activity => @handler_position, :message => err.backtrace[0].match(/(.*?):(\d+):\s(.*)/)[3], :line => err.backtrace[0].match(/(.*?):(\d+):/)[2], :where => err.backtrace[0].match(/(.*?):(\d+):/)[1])
252
+ puts err.message
253
+ puts err.backtrace
254
+ @controller.notify("activity/failed", :'activity-uuid' => @handler_activity_uuid, :endpoint => @handler_endpoint, :label => @label, :activity => @handler_position, :message => err.message, :line => err.backtrace[0].match(/(.*?):(\d+):/)[2], :where => err.backtrace[0].match(/(.*?):(\d+):/)[1])
253
255
  end # }}}
254
256
  def inform_manipulate_change(status,changed_dataelements,changed_endpoints,dataelements,endpoints) # {{{
255
257
  unless status.nil?
@@ -272,17 +274,10 @@ class ConnectionWrapper < WEEL::ConnectionWrapperBase
272
274
  end # }}}
273
275
 
274
276
  def callback(result=nil,options={}) #{{{
275
- status, ret, headers = Riddl::Client.new(@controller.url_result_transformation).request 'put' => result
276
- recv = if status >= 200 && status < 300
277
- JSON::parse(ret[0].value.read)
278
- else
279
- nil
280
- end
281
-
277
+ recv = CPEE::EvalRuby::Translation::structurize_result(result)
282
278
  @controller.notify("activity/receiving", :'activity-uuid' => @handler_activity_uuid, :label => @label, :activity => @handler_position, :endpoint => @handler_endpoint, :received => recv, :annotations => @anno)
283
279
 
284
280
  @guard_files += result
285
- @guard_files += ret
286
281
 
287
282
  if options['CPEE_INSTANTIATION']
288
283
  @controller.notify("task/instantiation", :'activity-uuid' => @handler_activity_uuid, :label => @label, :activity => @handler_position, :endpoint => @handler_endpoint, :received => CPEE::ValueHelper.parse(options['CPEE_INSTANTIATION']))
@@ -323,106 +318,42 @@ class ConnectionWrapper < WEEL::ConnectionWrapperBase
323
318
  GC.start
324
319
  end #}}}
325
320
 
326
- def code_error_handling(ret,where,what=RuntimeError) #{{{
327
- sig = ret.find{|e| e.name == "signal" }.value
328
- sigt = ret.find{|e| e.name == "signal_text" }.value
329
- case sig
330
- when 'Signal::Again'; throw WEEL::Signal::Again
331
- when 'Signal::Error'; raise what, '', [where + ' ' + sigt]
332
- when 'Signal::Stop'; raise WEEL::Signal::Stop
333
- when 'Signal::SyntaxError'; raise SyntaxError, '', [where + ' ' + sigt]
334
- else
335
- raise 'something bad happened, but we dont know what.'
336
- end
337
- end #}}}
338
- def prepare(lock,dataelements,endpoints,status,local,additional,code,exec_endpoints,exec_parameters) #{{{
339
- struct = if code
340
- manipulate(true,lock,dataelements,endpoints,status,local,additional,code,'prepare')
321
+ def prepare(__lock,__dataelements,__endpoints,__status,__local,__additional,__code,__exec_endpoints,__exec_parameters) #{{{
322
+ __struct = if __code
323
+ manipulate(true,__lock,__dataelements,__endpoints,__status,__local,__additional,__code,'Parameter')
341
324
  else
342
- WEEL::ReadStructure.new(dataelements,endpoints,local,additional)
325
+ WEEL::ReadStructure.new(__dataelements,__endpoints,__local,__additional)
343
326
  end
344
- @handler_endpoint = exec_endpoints.is_a?(Array) ? exec_endpoints.map{ |ep| struct.endpoints[ep] }.compact : struct.endpoints[exec_endpoints]
327
+ @handler_endpoint = __exec_endpoints.is_a?(Array) ? __exec_endpoints.map{ |ep| __struct.endpoints[ep] }.compact : __struct.endpoints[__exec_endpoints]
345
328
  if @controller.attributes['twin_engine']
346
329
  @handler_endpoint_orig = @handler_endpoint
347
330
  @handler_endpoint = @controller.attributes['twin_engine'].to_s + '?original_endpoint=' + Riddl::Protocols::Utils::escape(@handler_endpoint)
348
331
  end
349
- params = exec_parameters.dup
350
- params[:arguments] = params[:arguments].dup if params[:arguments]
351
- params[:arguments]&.map! do |ele|
352
- t = ele.dup
353
- if t.value.is_a?(WEEL::ProcString)
354
- send = []
355
- send.push Riddl::Parameter::Simple::new('code',t.value.code)
356
- send.push Riddl::Parameter::Complex::new('dataelements','application/json', JSON::generate(struct.data))
357
- send.push Riddl::Parameter::Complex::new('local','application/json', JSON::generate(struct.local)) if struct.local
358
- send.push Riddl::Parameter::Complex::new('endpoints','application/json', JSON::generate(struct.endpoints))
359
- send.push Riddl::Parameter::Complex::new('additional','application/json', JSON::generate(struct.additional))
360
-
361
- status, ret, headers = Riddl::Client.new(@controller.url_code).request 'put' => send
362
- recv = if status >= 200 && status < 300
363
- ret[0].value
364
- else
365
- code_error_handling ret, 'Parameter ' + t.value.code
366
- end
367
- t.value = recv
332
+ __params = __exec_parameters.dup
333
+ __params[:arguments] = __params[:arguments].dup if __params[:arguments]
334
+ __params[:arguments]&.map! do |__ele|
335
+ __tmp = __ele.dup
336
+ if __tmp.value.is_a?(WEEL::ProcString)
337
+ __tmp.value = __struct.instance_eval __tmp.value.code, 'Parameter', 1
368
338
  end
369
- t
339
+ __tmp
370
340
  end
371
- params
341
+ __params
372
342
  end #}}}
373
- def test_condition(dataelements,endpoints,local,additional,code,args={}) #{{{
374
- send = []
375
- send.push Riddl::Parameter::Simple::new('code',code)
376
- send.push Riddl::Parameter::Complex::new('dataelements','application/json', JSON::generate(dataelements))
377
- send.push Riddl::Parameter::Complex::new('local','application/json', JSON::generate(local)) if local
378
- send.push Riddl::Parameter::Complex::new('endpoints','application/json', JSON::generate(endpoints))
379
- send.push Riddl::Parameter::Complex::new('additional','application/json', JSON::generate(additional))
380
-
381
- status, ret, headers = Riddl::Client.new(@controller.url_code).request 'put' => send
382
- recv = if status >= 200 && status < 300
383
- ret[0].value
384
- else
385
- code_error_handling ret, 'Condition ' + code, WEEL::Signal::Error
386
- end
387
- recv = 'false' unless recv
388
- recv = (recv == 'false' || recv == 'null' || recv == 'nil' ? false : true)
389
- @controller.notify("gateway/decide", :instance_uuid => @controller.uuid, :code => code, :condition => recv)
390
- recv
343
+ def test_condition(__dataelements,__endpoints,__local,__additional,__code,__args={}) #{{{
344
+ __struct = WEEL::ReadStructure.new(__dataelements,__endpoints,__local,__additional).instance_eval(__code,'Condition',1)
345
+ @controller.notify("gateway/decide", :instance_uuid => @controller.uuid, :code => __code, :condition => (__struct ? "true" : "false"))
346
+ __struct
391
347
  end #}}}
392
- def manipulate(readonly,lock,dataelements,endpoints,status,local,additional,code,where,result=nil,options=nil) #{{{
393
- lock.synchronize do
394
- send = []
395
- send.push Riddl::Parameter::Simple::new('code',code)
396
- send.push Riddl::Parameter::Complex::new('dataelements','application/json', JSON::generate(dataelements))
397
- send.push Riddl::Parameter::Complex::new('local','application/json', JSON::generate(local)) if local
398
- send.push Riddl::Parameter::Complex::new('endpoints','application/json', JSON::generate(endpoints))
399
- send.push Riddl::Parameter::Complex::new('additional','application/json', JSON::generate(additional))
400
- send.push Riddl::Parameter::Complex::new('status','application/json', JSON::generate(status)) if status
401
- send.push Riddl::Parameter::Complex::new('call_result','application/json', JSON::generate(result))
402
- send.push Riddl::Parameter::Complex::new('call_headers','application/json', JSON::generate(options))
403
-
404
- stat, ret, headers = Riddl::Client.new(@controller.url_code).request 'put' => send
405
- if stat >= 200 && stat < 300
406
- ret.shift # drop result
407
- signal = changed_status = nil
408
- changed_dataelements = changed_local = changed_endpoints = []
409
- signal = ret.shift.value if ret.any? && ret[0].name == 'signal'
410
- changed_dataelements = JSON::parse(ret.shift.value.read) if ret.any? && ret[0].name == 'changed_dataelements'
411
- changed_endpoints = JSON::parse(ret.shift.value.read) if ret.any? && ret[0].name == 'changed_endpoints'
412
- changed_status = JSON::parse(ret.shift.value.read) if ret.any? && ret[0].name == 'changed_status'
413
-
414
- struct = if readonly
415
- WEEL::ReadStructure.new(dataelements,endpoints,local,additional)
416
- else
417
- WEEL::ManipulateStructure.new(dataelements, endpoints, status, local, additional)
418
- end
419
- struct.update(changed_dataelements,changed_endpoints,changed_status)
420
-
421
- struct
422
- else
423
- code_error_handling ret, where
424
- end
348
+ def manipulate(__readonly,__lock,__dataelements,__endpoints,__status,__local,__additional,__code,__where,__result=nil,__options=nil) #{{{
349
+ result = CPEE::EvalRuby::Translation::simplify_structurized_result(__result)
350
+ __struct = if __readonly
351
+ WEEL::ReadStructure.new(__dataelements,__endpoints,__local,__additional)
352
+ else
353
+ WEEL::ManipulateStructure.new(__dataelements,__endpoints,__status,__local,__additional)
425
354
  end
355
+ __struct.instance_eval(__code,__where,1)
356
+ __struct
426
357
  end #}}}
427
358
 
428
359
  def split_branches(branches) # factual, so for inclusive or [[a],[b],[c,d,e]]{{{
@@ -125,12 +125,6 @@ class Controller
125
125
  def dataelements
126
126
  @instance.data
127
127
  end
128
- def url_result_transformation
129
- @opts[:url_result_transformation]
130
- end
131
- def url_code
132
- @opts[:url_code]
133
- end
134
128
 
135
129
  def start
136
130
  if vote("state/change", :state => 'running')
@@ -16,21 +16,21 @@ module CPEE
16
16
 
17
17
  module ExecutionHandler
18
18
 
19
- module Rubyext
19
+ module Eval
20
20
  BACKEND_INSTANCE = 'instance.rb'
21
+ BACKEND_OPTS = 'opts.yaml'
21
22
  DSL_TO_DSLX_XSL = File.expand_path(File.join(__dir__,'dsl_to_dslx.xsl'))
22
23
  BACKEND_RUN = File.expand_path(File.join(__dir__,'backend','run'))
23
- BACKEND_OPTS = File.expand_path(File.join(__dir__,'backend','opts.yaml'))
24
24
  BACKEND_TEMPLATE = File.expand_path(File.join(__dir__,'backend','instance.template'))
25
25
 
26
26
  def self::dslx_to_dsl(dslx) # transpile
27
- trans = XML::Smart::open_unprotected(ExecutionHandler::Rubyext::DSL_TO_DSLX_XSL)
27
+ trans = XML::Smart::open_unprotected(ExecutionHandler::Eval::DSL_TO_DSLX_XSL)
28
28
  dslx.transform_with(trans).to_s
29
29
  end
30
30
 
31
31
  def self::prepare(id,opts) # write result to disk
32
32
  Dir.mkdir(File.join(opts[:instances],id.to_s)) rescue nil
33
- FileUtils.copy(ExecutionHandler::Rubyext::BACKEND_RUN,File.join(opts[:instances],id.to_s))
33
+ FileUtils.copy(ExecutionHandler::Eval::BACKEND_RUN,File.join(opts[:instances],id.to_s))
34
34
  dsl = CPEE::Persistence::extract_item(id,opts,'dsl')
35
35
  hw = CPEE::Persistence::extract_item(id,opts,'executionhandler')
36
36
  endpoints = CPEE::Persistence::extract_list(id,opts,'endpoints')
@@ -39,35 +39,33 @@ module CPEE
39
39
  positions.map! do |k, v|
40
40
  [ k, v, CPEE::Persistence::extract_item(id,opts,File.join('positions',k,'@passthrough')) ]
41
41
  end
42
- iopts = YAML::load_file(ExecutionHandler::Rubyext::BACKEND_OPTS)
43
- pp iopts
44
- iopts[:host] = opts[:host]
45
- iopts[:url] = opts[:url]
46
- iopts[:redis_url] = opts[:redis_url]
47
- iopts[:redis_path] = File.join(opts[:basepath],opts[:redis_path])
48
- iopts[:redis_db] = opts[:redis_db]
49
- iopts[:workers] = opts[:workers]
50
- iopts[:global_executionhandlers] = opts[:global_executionhandlers]
51
- iopts[:executionhandlers] = opts[:executionhandlers]
52
- iopts[:executionhandler] = hw
53
-
54
- File.open(File.join(opts[:instances],id.to_s,File.basename(ExecutionHandler::Rubyext::BACKEND_OPTS)),'w') do |f|
55
- YAML::dump(iopts,f)
42
+ File.open(File.join(opts[:instances],id.to_s,ExecutionHandler::Eval::BACKEND_OPTS),'w') do |f|
43
+ YAML::dump({
44
+ :host => opts[:host],
45
+ :url => opts[:url],
46
+ :redis_url => opts[:redis_url],
47
+ :redis_path => File.join(opts[:basepath],opts[:redis_path]),
48
+ :redis_db => opts[:redis_db],
49
+ :workers => opts[:workers],
50
+ :global_executionhandlers => opts[:global_executionhandlers],
51
+ :executionhandlers => opts[:executionhandlers],
52
+ :executionhandler => hw
53
+ },f)
56
54
  end
57
- template = ERB.new(File.read(ExecutionHandler::Rubyext::BACKEND_TEMPLATE), trim_mode: '-')
55
+ template = ERB.new(File.read(ExecutionHandler::Eval::BACKEND_TEMPLATE), trim_mode: '-')
58
56
  res = template.result_with_hash(dsl: dsl, dataelements: dataelements, endpoints: endpoints, positions: positions)
59
- File.write(File.join(opts[:instances],id.to_s,ExecutionHandler::Rubyext::BACKEND_INSTANCE),res)
57
+ File.write(File.join(opts[:instances],id.to_s,ExecutionHandler::Eval::BACKEND_INSTANCE),res)
60
58
  end
61
59
 
62
60
  def self::run(id,opts)
63
- exe = File.join(opts[:instances],id.to_s,File.basename(ExecutionHandler::Rubyext::BACKEND_RUN))
61
+ exe = File.join(opts[:instances],id.to_s,File.basename(ExecutionHandler::Eval::BACKEND_RUN))
64
62
  pid = Kernel.spawn(exe , :pgroup => true, :in => '/dev/null', :out => exe + '.out', :err => exe + '.err')
65
63
  Process.detach pid
66
64
  File.write(exe + '.pid',pid)
67
65
  end
68
66
 
69
67
  def self::stop(id,opts) ### return: bool to tell if manually changing redis is necessary
70
- exe = File.join(opts[:instances],id.to_s,File.basename(ExecutionHandler::Rubyext::BACKEND_RUN))
68
+ exe = File.join(opts[:instances],id.to_s,File.basename(ExecutionHandler::Eval::BACKEND_RUN))
71
69
  pid = File.read(exe + '.pid') rescue nil
72
70
  if pid && (Process.kill(0, pid.to_i) rescue false)
73
71
  Process.kill('HUP', pid.to_i) rescue nil
@@ -4,3 +4,5 @@
4
4
  :redis_db: 3
5
5
  :executionhandlers: ../../executionhandlers/
6
6
  :executionhandler: ruby
7
+ :url_result_transformation: http://localhost:9302/structurize
8
+ :url_code: http://localhost:9302/exec