cpee 1.4.8 → 1.4.10

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.
Files changed (98) hide show
  1. checksums.yaml +5 -5
  2. data/cockpit/config.json +6 -0
  3. data/cockpit/css/ui.css +7 -7
  4. data/cockpit/index.html +4 -4
  5. data/cockpit/js/instance.js +6 -3
  6. data/cockpit/themes/compact/theme.js +107 -6
  7. data/cockpit/themes/default/rngs/call.rng +29 -0
  8. data/cockpit/themes/default/rngs/callmanipulate.rng +29 -0
  9. data/cpee.gemspec +1 -1
  10. data/lib/cpee/controller.rb +1 -1
  11. data/lib/cpee/instantiation.rb +44 -21
  12. data/lib/engine/instances.rng +5 -2
  13. data/lib/instantiation.xml +5 -1
  14. data/log/elasticsearch.rb +1 -106
  15. data/log/elasticsearch_logging.rb +237 -0
  16. data/log/legacy/test_es.rb +26 -0
  17. data/log/legacy/test_split.rb +211 -0
  18. data/log/trace.yaml +17717 -0
  19. data/log/trace_sic.yaml +18343 -0
  20. data/server/handlerwrappers/default.rb +28 -23
  21. data/server/instances/1/properties.xml +158 -31
  22. data/server/instances/2/properties.xml +137 -12
  23. data/server/instances/3/properties.xml +116 -80
  24. data/server/resources/base.xml +78 -0
  25. data/server/resources/test.rb +19 -0
  26. data/server/resources/test.xml +33 -0
  27. data/server/resources/topics.xml +6 -3
  28. data/server/resources/transformation_dslx.xsl +5 -0
  29. data/server/server.pid +1 -0
  30. metadata +13 -71
  31. data/log/logs/1/test +0 -1
  32. data/server/instances/10/notifications/182434032285ca1d06a8b6554b8889c8/consumer-secret +0 -1
  33. data/server/instances/10/notifications/182434032285ca1d06a8b6554b8889c8/producer-secret +0 -1
  34. data/server/instances/10/notifications/182434032285ca1d06a8b6554b8889c8/subscription.xml +0 -23
  35. data/server/instances/10/notifications/512a3785631a5245dbb45fa150ea72ed/consumer-secret +0 -1
  36. data/server/instances/10/notifications/512a3785631a5245dbb45fa150ea72ed/producer-secret +0 -1
  37. data/server/instances/10/notifications/512a3785631a5245dbb45fa150ea72ed/subscription.xml +0 -6
  38. data/server/instances/10/properties.xml +0 -187
  39. data/server/instances/11/properties.xml +0 -191
  40. data/server/instances/12/properties.xml +0 -191
  41. data/server/instances/13/properties.xml +0 -204
  42. data/server/instances/14/properties.xml +0 -31
  43. data/server/instances/15/properties.xml +0 -30
  44. data/server/instances/16/properties.xml +0 -29
  45. data/server/instances/17/properties.xml +0 -29
  46. data/server/instances/18/properties.xml +0 -31
  47. data/server/instances/19/properties.xml +0 -31
  48. data/server/instances/20/properties.xml +0 -191
  49. data/server/instances/21/properties.xml +0 -156
  50. data/server/instances/22/properties.xml +0 -118
  51. data/server/instances/23/properties.xml +0 -118
  52. data/server/instances/24/properties.xml +0 -156
  53. data/server/instances/25/properties.xml +0 -156
  54. data/server/instances/26/properties.xml +0 -156
  55. data/server/instances/27/properties.xml +0 -140
  56. data/server/instances/28/properties.xml +0 -156
  57. data/server/instances/29/properties.xml +0 -156
  58. data/server/instances/30/properties.xml +0 -354
  59. data/server/instances/31/properties.xml +0 -354
  60. data/server/instances/313/notifications/crisp/consumer-secret +0 -1
  61. data/server/instances/313/notifications/crisp/producer-secret +0 -1
  62. data/server/instances/313/notifications/crisp/subscription.xml +0 -7
  63. data/server/instances/313/notifications/logging/consumer-secret +0 -1
  64. data/server/instances/313/notifications/logging/producer-secret +0 -1
  65. data/server/instances/313/notifications/logging/subscription.xml +0 -7
  66. data/server/instances/313/notifications/logging_yaml/consumer-secret +0 -1
  67. data/server/instances/313/notifications/logging_yaml/producer-secret +0 -1
  68. data/server/instances/313/notifications/logging_yaml/subscription.xml +0 -7
  69. data/server/instances/313/properties.xml +0 -524
  70. data/server/instances/32/properties.xml +0 -628
  71. data/server/instances/33/properties.xml +0 -156
  72. data/server/instances/4/properties.xml +0 -114
  73. data/server/instances/5/properties.xml +0 -114
  74. data/server/instances/6/properties.xml +0 -206
  75. data/server/instances/662/notifications/crisp/consumer-secret +0 -1
  76. data/server/instances/662/notifications/crisp/producer-secret +0 -1
  77. data/server/instances/662/notifications/crisp/subscription.xml +0 -7
  78. data/server/instances/662/notifications/logging/consumer-secret +0 -1
  79. data/server/instances/662/notifications/logging/producer-secret +0 -1
  80. data/server/instances/662/notifications/logging/subscription.xml +0 -7
  81. data/server/instances/662/notifications/logging_yaml/consumer-secret +0 -1
  82. data/server/instances/662/notifications/logging_yaml/producer-secret +0 -1
  83. data/server/instances/662/notifications/logging_yaml/subscription.xml +0 -7
  84. data/server/instances/662/properties.xml +0 -427
  85. data/server/instances/663/properties.xml +0 -31
  86. data/server/instances/664/properties.xml +0 -425
  87. data/server/instances/665/properties.xml +0 -425
  88. data/server/instances/666/properties.xml +0 -427
  89. data/server/instances/667/properties.xml +0 -427
  90. data/server/instances/668/properties.xml +0 -425
  91. data/server/instances/669/properties.xml +0 -425
  92. data/server/instances/670/properties.xml +0 -31
  93. data/server/instances/671/properties.xml +0 -158
  94. data/server/instances/672/properties.xml +0 -199
  95. data/server/instances/673/properties.xml +0 -52
  96. data/server/instances/7/properties.xml +0 -156
  97. data/server/instances/8/properties.xml +0 -118
  98. data/server/instances/9/properties.xml +0 -120
@@ -16,21 +16,23 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
16
16
  def self::inform_state_change(arguments,newstate) # {{{
17
17
  controller = arguments[0]
18
18
  controller.serialize_state!
19
- controller.notify("state/change", :instance => controller.instance, :state => newstate)
19
+ controller.notify("state/change", :instance => controller.instance, :instance_uuid => controller.uuid, :state => newstate, :timestamp => Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
20
20
  controller.finalize_if_finished
21
21
  end # }}}
22
22
  def self::inform_syntax_error(arguments,err,code)# {{{
23
23
  controller = arguments[0]
24
- controller.notify("description/error", :instance => controller.instance, :message => err.message)
24
+ controller.notify("description/error", :instance => controller.instance, :instance_uuid => controller.uuid, :message => err.message, :timestamp => Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
25
25
  end# }}}
26
26
  def self::inform_handlerwrapper_error(arguments,err) # {{{
27
27
  controller = arguments[0]
28
- controller.notify("handlerwrapper/error", :instance => controller.instance, :message => err.message)
28
+ controller.notify("handlerwrapper/error", :instance => controller.instance, :instance_uuid => controller.uuid, :message => err.message, :timestamp => Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
29
29
  end # }}}
30
30
  def self::inform_position_change(arguments,ipc={}) # {{{
31
31
  controller = arguments[0]
32
32
  controller.serialize_positions!
33
33
  ipc[:instance] = controller.instance
34
+ ipc[:instance_uuid] = controller.uuid
35
+ ipc[:timestamp] = Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z")
34
36
  controller.notify("position/change", ipc)
35
37
  end # }}}
36
38
 
@@ -46,7 +48,8 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
46
48
 
47
49
  def activity_handle(passthrough, parameters) # {{{
48
50
  @label = parameters[:label]
49
- @controller.notify("activity/calling", :instance => @controller.instance, :instance_uuid => @controller.uuid, :label => @label, :instance_name => @controller.info, :activity => @handler_position, :passthrough => passthrough, :endpoint => @handler_endpoint, :parameters => parameters, :time=>Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"), :attributes => @controller.attributes_translated)
51
+ @sensors = parameters[:sensors]
52
+ @controller.notify("activity/calling", :instance => @controller.instance, :instance_uuid => @controller.uuid, :label => @label, :instance_name => @controller.info, :activity => @handler_position, :passthrough => passthrough, :endpoint => @handler_endpoint, :parameters => parameters, :timestamp => Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"), :attributes => @controller.attributes_translated)
50
53
  if passthrough.nil?
51
54
  params = []
52
55
  callback = Digest::MD5.hexdigest(Kernel::rand().to_s)
@@ -71,13 +74,13 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
71
74
  type = parameters[:method] || 'post'
72
75
  client = Riddl::Client.new(@handler_endpoint)
73
76
 
77
+ @controller.callbacks[callback] = CPEE::Callback.new("callback activity: #{@handler_position}",self,:callback,nil,nil,:http)
78
+ @handler_passthrough = callback
79
+
74
80
  status, result, headers = client.request type => params
75
81
  raise "Could not #{parameters[:method] || 'post'} #{@handler_endpoint}" if status < 200 || status >= 300
76
82
 
77
- if headers["CPEE_CALLBACK"] && headers["CPEE_CALLBACK"] == 'true'
78
- @controller.callbacks[callback] = CPEE::Callback.new("callback activity: #{@handler_position}",self,:callback,nil,nil,:http)
79
- @handler_passthrough = callback
80
- else
83
+ unless headers["CPEE_CALLBACK"] && headers["CPEE_CALLBACK"] == 'true'
81
84
  callback result
82
85
  end
83
86
  else
@@ -107,36 +110,36 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
107
110
  end # }}}
108
111
 
109
112
  def inform_activity_done # {{{
110
- @controller.notify("activity/done", :endpoint => @handler_endpoint, :instance => @controller.instance, :label => @label, :instance_name => @controller.info, :instance_uuid => @controller.uuid, :activity => @handler_position, :time=>Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"), :attributes => @controller.attributes_translated)
113
+ @controller.notify("activity/done", :endpoint => @handler_endpoint, :instance => @controller.instance, :label => @label, :instance_name => @controller.info, :instance_uuid => @controller.uuid, :activity => @handler_position, :timestamp => Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"), :attributes => @controller.attributes_translated)
111
114
  end # }}}
112
115
  def inform_activity_manipulate # {{{
113
- @controller.notify("activity/manipulating", :endpoint => @handler_endpoint, :instance => @controller.instance, :label => @label, :instance_name => @controller.info, :instance_uuid => @controller.uuid, :activity => @handler_position, :time=>Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"), :attributes => @controller.attributes_translated)
116
+ @controller.notify("activity/manipulating", :endpoint => @handler_endpoint, :instance => @controller.instance, :label => @label, :instance_name => @controller.info, :instance_uuid => @controller.uuid, :activity => @handler_position, :timestamp => Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"), :attributes => @controller.attributes_translated)
114
117
  end # }}}
115
118
  def inform_activity_failed(err) # {{{
116
119
  puts err.message
117
120
  puts err.backtrace
118
- @controller.notify("activity/failed", :endpoint => @handler_endpoint, :label => @label, :instance_name => @controller.info, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :message => err.message, :line => err.backtrace[0].match(/(.*?):(\d+):/)[2], :where => err.backtrace[0].match(/(.*?):(\d+):/)[1], :time=>Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"), :attributes => @controller.attributes_translated)
121
+ @controller.notify("activity/failed", :endpoint => @handler_endpoint, :label => @label, :instance_name => @controller.info, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :message => err.message, :line => err.backtrace[0].match(/(.*?):(\d+):/)[2], :where => err.backtrace[0].match(/(.*?):(\d+):/)[1], :timestamp => Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"), :attributes => @controller.attributes_translated)
119
122
  end # }}}
120
123
  def inform_manipulate_change(status,changed_dataelements,changed_endpoints,dataelements,endpoints) # {{{
121
124
  unless status.nil?
122
125
  @controller.serialize_status!
123
- @controller.notify("status/change", :endpoint => @handler_endpoint, :label => @label, :instance_name => @controller.info, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :id => status.id, :message => status.message, :attributes => @controller.attributes_translated)
126
+ @controller.notify("status/change", :endpoint => @handler_endpoint, :label => @label, :instance_name => @controller.info, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :id => status.id, :message => status.message, :attributes => @controller.attributes_translated, :timestamp => Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
124
127
  end
125
128
  unless changed_dataelements.nil?
126
129
  @controller.serialize_dataelements!
127
- @controller.notify("dataelements/change", :endpoint => @handler_endpoint, :label => @label, :instance_name => @controller.info, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :changed => changed_dataelements, :values => dataelements, :attributes => @controller.attributes_translated)
130
+ @controller.notify("dataelements/change", :endpoint => @handler_endpoint, :label => @label, :instance_name => @controller.info, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :changed => changed_dataelements, :values => dataelements, :attributes => @controller.attributes_translated, :timestamp => Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
128
131
  end
129
132
  unless changed_endpoints.nil?
130
133
  @controller.serialize_endpoints!
131
- @controller.notify("endpoints/change", :endpoint => @handler_endpoint, :label => @label, :instance_name => @controller.info, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :changed => changed_endpoints, :values => endpoints, :attributes => @controller.attributes_translated)
134
+ @controller.notify("endpoints/change", :endpoint => @handler_endpoint, :label => @label, :instance_name => @controller.info, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :changed => changed_endpoints, :values => endpoints, :attributes => @controller.attributes_translated, :timestamp => Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
132
135
  end
133
136
  end # }}}
134
137
 
135
138
  def vote_sync_after # {{{
136
- @controller.call_vote("activity/syncing_after", :endpoint => @handler_endpoint, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :time=>Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
139
+ @controller.call_vote("activity/syncing_after", :endpoint => @handler_endpoint, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :timestamp => Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
137
140
  end # }}}
138
141
  def vote_sync_before(parameters=nil) # {{{
139
- @controller.call_vote("activity/syncing_before", :endpoint => @handler_endpoint, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :parameters => parameters, :time=>Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
142
+ @controller.call_vote("activity/syncing_before", :endpoint => @handler_endpoint, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :parameters => parameters, :timestamp => Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
140
143
  end # }}}
141
144
 
142
145
  def simplify_result(result)
@@ -172,7 +175,7 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
172
175
  def structurize_result(result)
173
176
  result.map do |r|
174
177
  if r.is_a? Riddl::Parameter::Simple
175
- { r.name => r.value }
178
+ { 'name' => r.name, 'data' => r.value }
176
179
  elsif r.is_a? Riddl::Parameter::Complex
177
180
  res = if r.mimetype == 'application/json'
178
181
  JSON::parse(r.value.read) rescue nil
@@ -185,10 +188,9 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
185
188
  r.value.read
186
189
  end
187
190
  tmp = {
188
- r.name == '' ? 'result' : r.name => {
189
- 'mimetype' => r.mimetype,
190
- 'content' => res
191
- }
191
+ 'name' => r.name == '' ? 'result' : r.name,
192
+ 'mimetype' => r.mimetype,
193
+ 'data' => res
192
194
  }
193
195
  r.value.rewind
194
196
  tmp
@@ -197,12 +199,15 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
197
199
  end
198
200
 
199
201
  def callback(result=nil,options={})
200
- @controller.notify("activity/receiving", :instance => @controller.instance, :label => @label, :instance_name => @controller.info, :instance_uuid => @controller.uuid, :activity => @handler_position, :endpoint => @handler_endpoint, :received => structurize_result(result), :time=>Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"), :attributes => @controller.attributes_translated)
202
+ @controller.notify("activity/receiving", :instance => @controller.instance, :label => @label, :instance_name => @controller.info, :instance_uuid => @controller.uuid, :activity => @handler_position, :endpoint => @handler_endpoint, :received => structurize_result(result), :timestamp => Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"), :attributes => @controller.attributes_translated, :sensors => @sensors)
201
203
  result = simplify_result(result)
204
+ if options['CPEE_INSTANTIATION']
205
+ @controller.notify("task/instantiation", :instance => @controller.instance, :label => @label, :instance_name => @controller.info, :instance_uuid => @controller.uuid, :activity => @handler_position, :endpoint => @handler_endpoint, :received => structurize_result(result), :timestamp => Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"), :attributes => @controller.attributes_translated)
206
+ end
202
207
  if options['CPEE_UPDATE']
203
208
  @handler_returnValue = result
204
209
  if options['CPEE_UPDATE_STATUS']
205
- @controller.notify("activity/status", :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :endpoint => @handler_endpoint, :status => options['CPEE_UPDATE_STATUS'], :time=>Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"), :attributes => @controller.attributes_translated)
210
+ @controller.notify("activity/status", :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :endpoint => @handler_endpoint, :status => options['CPEE_UPDATE_STATUS'], :timestamp => Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"), :attributes => @controller.attributes_translated)
206
211
  end
207
212
  @handler_continue.continue WEEL::Signal::Again
208
213
  else
@@ -1,38 +1,114 @@
1
1
  <properties xmlns="http://riddl.org/ns/common-patterns/properties/1.0">
2
2
  <attributes>
3
- <uuid/>
4
- <info>Lego Plate</info>
3
+ <uuid>34574182-a968-4e52-b401-4a16604be6a9</uuid>
4
+ <info>Spawn Machining</info>
5
5
  <modeltype>CPEE</modeltype>
6
+ <theme>default</theme>
7
+ <customer>pilotfabrik</customer>
8
+ <status>development</status>
9
+ <artefacts>[ { "group": "Orders", "name": "3D Printer Side" } ]</artefacts>
6
10
  </attributes>
7
- <state>stopped</state>
11
+ <state>ready</state>
8
12
  <handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
9
13
  <positions/>
10
14
  <dataelements>
11
- <i>0</i>
15
+ <instances>[]</instances>
12
16
  </dataelements>
13
17
  <endpoints>
14
18
  <timeout>http://gruppe.wst.univie.ac.at/~mangler/services/timeout.php</timeout>
15
- <move>http://plate.wst.univie.ac.at:9200/go-next</move>
19
+ <start_instance>https://centurio.work/flow/start/instance/</start_instance>
20
+ <start_url>https://centurio.work/flow/start/url/</start_url>
21
+ <hoert_die_signale>https://centurio.work/data/mm500/signals/</hoert_die_signale>
16
22
  </endpoints>
17
- <dsl>loop pre_test{i&lt;2} do
18
- call :a1, :move, parameters: { :label =&gt; "Move to next station", :method =&gt; :post, :arguments =&gt; nil }, finalize: &lt;&lt;-END
19
- data.i= data.i + 1
20
- END
23
+ <dsl>parallel :wait =&gt; -1 do
24
+ parallel_branch do
25
+ call :a1, :hoert_die_signale, parameters: { :label =&gt; "Listen to NC Start signals", :method =&gt; :get, :arguments =&gt; nil, :sensors =&gt; nil }, update: &lt;&lt;-END
26
+ data.instances &lt;&lt; result
27
+ status.nudge!
28
+ END
29
+ end
30
+ parallel_branch do
31
+ loop pre_test{true} do
32
+ choose :exclusive do
33
+ alternative test{data.instances.empty?} do
34
+ manipulate :a3, { :label =&gt; "Sleep" }, &lt;&lt;-END
35
+ status.wait_until_nudged!
36
+ END
37
+ end
38
+ otherwise do
39
+ call :a2, :start_url, parameters: { :label =&gt; "Spawn Subprocess", :method =&gt; :post, :arguments =&gt; [⭐(:name =&gt; :info, :value =&gt; "3D Drucker Seite"), ⭐(:name =&gt; :behavior, :value =&gt; "fork_running"), ⭐(:name =&gt; :url, :value =&gt; "https://centurio.work/customers/prime/Machining%20MM500.xml"), ⭐(:name =&gt; :init, :value =&gt; "{ \"instance\": \"#{data.instances.last}\" }")] }, finalize: &lt;&lt;-END
40
+ data.instances.pop
41
+ END
42
+ end
43
+ end
44
+ end
45
+ end
21
46
  end
22
47
  </dsl>
23
48
  <dslx>
24
49
  <description xmlns="http://cpee.org/ns/description/1.0">
25
- <loop mode="pre_test" condition="i&lt;2">
26
- <call id="a1" endpoint="move">
27
- <parameters>
28
- <label>Move to next station</label>
29
- <method>:post</method>
30
- <arguments/>
31
- </parameters>
32
- <finalize output="result">data.i= data.i + 1</finalize>
33
- <update output="result"/>
34
- </call>
35
- </loop>
50
+ <parallel wait="-1">
51
+ <parallel_branch>
52
+ <call id="a1" endpoint="hoert_die_signale">
53
+ <parameters>
54
+ <label>Listen to NC Start signals</label>
55
+ <method>:get</method>
56
+ <arguments/>
57
+ <sensors/>
58
+ </parameters>
59
+ <finalize output="result"/>
60
+ <update output="result">data.instances &lt;&lt; result
61
+ status.nudge!</update>
62
+ <_timing>
63
+ <_timing_min/>
64
+ <_timing_max/>
65
+ <_timing_avg/>
66
+ </_timing>
67
+ <_notes>
68
+ <_notes_general/>
69
+ <_notes_output/>
70
+ <_attachments/>
71
+ </_notes>
72
+ </call>
73
+ </parallel_branch>
74
+ <parallel_branch>
75
+ <loop mode="pre_test" condition="true">
76
+ <choose mode="exclusive">
77
+ <alternative condition="data.instances.empty?">
78
+ <manipulate id="a3" label="Sleep">status.wait_until_nudged!</manipulate>
79
+ </alternative>
80
+ <otherwise>
81
+ <call id="a2" endpoint="start_url">
82
+ <parameters>
83
+ <label>Spawn Subprocess</label>
84
+ <method>:post</method>
85
+ <arguments>
86
+ <info>3D Drucker Seite</info>
87
+ <behavior>fork_running</behavior>
88
+ <url>https://centurio.work/customers/prime/Machining%20MM500.xml</url>
89
+ <init>
90
+ <instance>!data.instances.last</instance>
91
+ </init>
92
+ </arguments>
93
+ </parameters>
94
+ <finalize output="result">data.instances.pop</finalize>
95
+ <update output="result"/>
96
+ <_timing>
97
+ <_timing_min/>
98
+ <_timing_max/>
99
+ <_timing_avg/>
100
+ </_timing>
101
+ <_notes>
102
+ <_notes_general/>
103
+ <_notes_output/>
104
+ <_attachments/>
105
+ </_notes>
106
+ </call>
107
+ </otherwise>
108
+ </choose>
109
+ </loop>
110
+ </parallel_branch>
111
+ </parallel>
36
112
  </description>
37
113
  </dslx>
38
114
  <status>
@@ -41,17 +117,68 @@ end
41
117
  </status>
42
118
  <description>
43
119
  <description xmlns="http://cpee.org/ns/description/1.0">
44
- <loop mode="pre_test" condition="i&lt;2">
45
- <call id="a1" endpoint="move">
46
- <parameters>
47
- <label>Move to next station</label>
48
- <method>:post</method>
49
- <arguments/>
50
- </parameters>
51
- <finalize output="result">data.i= data.i + 1</finalize>
52
- <update output="result"/>
53
- </call>
54
- </loop>
120
+ <parallel wait="-1">
121
+ <parallel_branch>
122
+ <call id="a1" endpoint="hoert_die_signale">
123
+ <parameters>
124
+ <label>Listen to NC Start signals</label>
125
+ <method>:get</method>
126
+ <arguments/>
127
+ <sensors/>
128
+ </parameters>
129
+ <finalize output="result"/>
130
+ <update output="result">data.instances &lt;&lt; result
131
+ status.nudge!</update>
132
+ <_timing>
133
+ <_timing_min/>
134
+ <_timing_max/>
135
+ <_timing_avg/>
136
+ </_timing>
137
+ <_notes>
138
+ <_notes_general/>
139
+ <_notes_output/>
140
+ <_attachments/>
141
+ </_notes>
142
+ </call>
143
+ </parallel_branch>
144
+ <parallel_branch>
145
+ <loop mode="pre_test" condition="true">
146
+ <choose mode="exclusive">
147
+ <alternative condition="data.instances.empty?">
148
+ <manipulate id="a3" label="Sleep">status.wait_until_nudged!</manipulate>
149
+ </alternative>
150
+ <otherwise>
151
+ <call id="a2" endpoint="start_url">
152
+ <parameters>
153
+ <label>Spawn Subprocess</label>
154
+ <method>:post</method>
155
+ <arguments>
156
+ <info>3D Drucker Seite</info>
157
+ <behavior>fork_running</behavior>
158
+ <url>https://centurio.work/customers/prime/Machining%20MM500.xml</url>
159
+ <init>
160
+ <instance>!data.instances.last</instance>
161
+ </init>
162
+ </arguments>
163
+ </parameters>
164
+ <finalize output="result">data.instances.pop</finalize>
165
+ <update output="result"/>
166
+ <_timing>
167
+ <_timing_min/>
168
+ <_timing_max/>
169
+ <_timing_avg/>
170
+ </_timing>
171
+ <_notes>
172
+ <_notes_general/>
173
+ <_notes_output/>
174
+ <_attachments/>
175
+ </_notes>
176
+ </call>
177
+ </otherwise>
178
+ </choose>
179
+ </loop>
180
+ </parallel_branch>
181
+ </parallel>
55
182
  </description>
56
183
  </description>
57
184
  <transformation>
@@ -1,31 +1,156 @@
1
1
  <properties xmlns="http://riddl.org/ns/common-patterns/properties/1.0">
2
2
  <attributes>
3
- <info/>
3
+ <uuid>ead087ef-ee6d-4ae3-b8b6-189ace13b39c</uuid>
4
+ <info>Enter info here</info>
4
5
  <modeltype>CPEE</modeltype>
5
6
  <theme>default</theme>
6
- <uuid/>
7
7
  </attributes>
8
- <state>ready</state>
8
+ <state>finished</state>
9
9
  <handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
10
10
  <positions/>
11
- <dataelements/>
11
+ <dataelements>
12
+ <persons>0</persons>
13
+ <card>Visa_12345</card>
14
+ <airline>AUA</airline>
15
+ <hotels>["Ibis","Ibis","Ibis"]</hotels>
16
+ <from>Vienna</from>
17
+ <to>Prague</to>
18
+ <costs>1145.0</costs>
19
+ </dataelements>
12
20
  <endpoints>
13
- <timeout>http://gruppe.wst.univie.ac.at/~mangler/services/timeout.php</timeout>
21
+ <bookAir>http://gruppe.wst.univie.ac.at/~mangler/services/airline.php</bookAir>
22
+ <bookHotel>http://gruppe.wst.univie.ac.at/~mangler/services/hotel.php</bookHotel>
23
+ <approve>http://gruppe.wst.univie.ac.at/~mangler/services/approval.php</approve>
14
24
  </endpoints>
15
- <dsl/>
25
+ <dsl>call :a1, :bookAir, parameters: { :label =&gt; "Book Airline", :method =&gt; :post, :arguments =&gt; [⭐(:name =&gt; :from, :value =&gt; "data.from"), ⭐(:name =&gt; :to, :value =&gt; "data.to"), ⭐(:name =&gt; :persons, :value =&gt; "data.persons")] }, finalize: &lt;&lt;-END
26
+ data.airline = result.value('id')
27
+ data.costs += result.value('costs').to_f
28
+ status.update 1, 'Hotel'
29
+ END
30
+ parallel do
31
+ loop pre_test{data.persons &gt; 0} do
32
+ parallel_branch data.persons do |p|
33
+ call :a2, :bookHotel, parameters: { :label =&gt; "Book Hotel", :method =&gt; :post, :arguments =&gt; [⭐(:name =&gt; :to, :value =&gt; "data.to")] }, finalize: &lt;&lt;-END
34
+ data.hotels &lt;&lt; result.value('id')
35
+ data.costs += result.value('costs').to_f
36
+ END
37
+ end
38
+ manipulate :a3, &lt;&lt;-END
39
+ data.persons -= 1
40
+ END
41
+ end
42
+ end
43
+ choose :inclusive do
44
+ alternative test{data.costs &gt; 700} do
45
+ call :a4, :approve, parameters: { :label =&gt; "Approve Hotel", :method =&gt; :post, :arguments =&gt; [⭐(:name =&gt; :costs, :value =&gt; "data.costs")] }
46
+ end
47
+ end
48
+ </dsl>
16
49
  <dslx>
17
- <description xmlns="http://cpee.org/ns/description/1.0"/>
50
+ <description xmlns="http://cpee.org/ns/description/1.0">
51
+ <call id="a1" endpoint="bookAir">
52
+ <parameters>
53
+ <label>Book Airline</label>
54
+ <method>:post</method>
55
+ <arguments>
56
+ <from>data.from</from>
57
+ <to>data.to</to>
58
+ <persons>data.persons</persons>
59
+ </arguments>
60
+ </parameters>
61
+ <finalize output="result">data.airline = result.value('id')
62
+ data.costs += result.value('costs').to_f
63
+ status.update 1, 'Hotel'</finalize>
64
+ </call>
65
+ <parallel>
66
+ <loop mode="pre_test" condition="data.persons &gt; 0">
67
+ <parallel_branch pass="data.persons" local="p">
68
+ <call id="a2" endpoint="bookHotel">
69
+ <parameters>
70
+ <label>Book Hotel</label>
71
+ <method>:post</method>
72
+ <arguments>
73
+ <to>data.to</to>
74
+ </arguments>
75
+ </parameters>
76
+ <finalize output="result">data.hotels &lt;&lt; result.value('id')
77
+ data.costs += result.value('costs').to_f</finalize>
78
+ </call>
79
+ </parallel_branch>
80
+ <manipulate id="a3">data.persons -= 1</manipulate>
81
+ </loop>
82
+ </parallel>
83
+ <choose mode="inclusive">
84
+ <alternative condition="data.costs &gt; 700">
85
+ <call id="a4" endpoint="approve">
86
+ <parameters>
87
+ <label>Approve Hotel</label>
88
+ <method>:post</method>
89
+ <arguments>
90
+ <costs>data.costs</costs>
91
+ </arguments>
92
+ </parameters>
93
+ </call>
94
+ </alternative>
95
+ </choose>
96
+ </description>
18
97
  </dslx>
19
98
  <status>
20
- <id>0</id>
21
- <message>undefined</message>
99
+ <id>1</id>
100
+ <message>Hotel</message>
22
101
  </status>
23
102
  <description>
24
- <description xmlns="http://cpee.org/ns/description/1.0"/>
103
+ <description xmlns="http://cpee.org/ns/description/1.0">
104
+ <call id="a1" endpoint="bookAir">
105
+ <parameters>
106
+ <label>Book Airline</label>
107
+ <method>:post</method>
108
+ <arguments>
109
+ <from>data.from</from>
110
+ <to>data.to</to>
111
+ <persons>data.persons</persons>
112
+ </arguments>
113
+ </parameters>
114
+ <finalize output="result">data.airline = result.value('id')
115
+ data.costs += result.value('costs').to_f
116
+ status.update 1, 'Hotel'</finalize>
117
+ </call>
118
+ <parallel>
119
+ <loop mode="pre_test" condition="data.persons &gt; 0">
120
+ <parallel_branch pass="data.persons" local="p">
121
+ <call id="a2" endpoint="bookHotel">
122
+ <parameters>
123
+ <label>Book Hotel</label>
124
+ <method>:post</method>
125
+ <arguments>
126
+ <to>data.to</to>
127
+ </arguments>
128
+ </parameters>
129
+ <finalize output="result">data.hotels &lt;&lt; result.value('id')
130
+ data.costs += result.value('costs').to_f</finalize>
131
+ </call>
132
+ </parallel_branch>
133
+ <manipulate id="a3">data.persons -= 1</manipulate>
134
+ </loop>
135
+ </parallel>
136
+ <choose mode="inclusive">
137
+ <alternative condition="data.costs &gt; 700">
138
+ <call id="a4" endpoint="approve">
139
+ <parameters>
140
+ <label>Approve Hotel</label>
141
+ <method>:post</method>
142
+ <arguments>
143
+ <costs>data.costs</costs>
144
+ </arguments>
145
+ </parameters>
146
+ </call>
147
+ </alternative>
148
+ </choose>
149
+ </description>
25
150
  </description>
26
151
  <transformation>
27
152
  <description type="copy"/>
28
- <dataelements type="none"/>
29
- <endpoints type="none"/>
153
+ <dataelements type="rest"/>
154
+ <endpoints type="rest"/>
30
155
  </transformation>
31
156
  </properties>