cpee 1.5.2 → 1.5.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5410a4a603cb9068528e05330cdedcef9c5360153aa1129f9f6f11fe9d1dd808
4
- data.tar.gz: 7a0863daf23d552fe1d8c0b971d07d19214f7773bcf6f8cac1ae1e8990d970ca
3
+ metadata.gz: 34b1f3d471e5c92ca9881d9d87b40e64a2174f124e1798b0f7a0dbd3a0735ead
4
+ data.tar.gz: aee9d4bd111c3358f93a0131fb832700909539c1bbbea3368c07468de1ae3369
5
5
  SHA512:
6
- metadata.gz: 4357fdc0037b250d5c2522be794f54ad2147996485dd955ca06bc28b77e0aafd45b90f2eae3cd4044392def54cbaaca54e4788e32e79322fedb3db27f92fcb05
7
- data.tar.gz: 550deab32af2be19d1e7ac4df96e4115957b67b8343e2c4e7d35c0893c5a7f74fb979af00d75e05d74d32cc17b66c02b2f337a2bc127c6ca8f268d5e7171f38e
6
+ metadata.gz: 4d4fb94c2c888fbd119ef01740df796346d1ab861ceedc9ba0a2164af557472fec49edd88f9b30f25484ab7997cafd5b54ae753e8d54061684881e338f2f49c1
7
+ data.tar.gz: bca86531f532f2f05c40d24d50fae035d4d569a798a9e418de6febb2364bc8255e1d9ced729ffbc226e18911f9d6224821529bc3ebe44fca6dc614cd7c9192cc
@@ -188,7 +188,7 @@
188
188
  <button name="state_stop" title='stop'>Stop</button>
189
189
  <span id="state_extended">
190
190
  <span> / </span>
191
- <button name="state_sim" title='simulate'>Sim</button>
191
+ <button name="state_replay" title='replay'>Replay</button>
192
192
  <span> / </span>
193
193
  <button name="state_abandon" title='abandon'>Abandon</button>
194
194
  </span>
@@ -78,7 +78,7 @@ function cockpit() { //{{{
78
78
  $("button[name=savesvg]").click(function(){ save_svg(); });
79
79
  $("button[name=state_start]").click(function(){ $(this).attr("disabled","disabled");start_instance(); });
80
80
  $("button[name=state_stop]").click(function(){ $(this).attr("disabled","disabled");stop_instance(); });
81
- $("button[name=state_simulate]").click(function(){ $(this).attr("disabled","disabled");sim_instance(); });
81
+ $("button[name=state_replay]").click(function(){ $(this).attr("disabled","disabled");replay_instance(); });
82
82
  $("button[name=state_abandon]").click(function(){ aba_instance(); });
83
83
  $("input[name=votecontinue]").click(check_subscription);
84
84
  $("input[name=testsetfile]").change(load_testsetfile_after);
@@ -624,13 +624,13 @@ function monitor_instance_state_change(notification) { //{{{
624
624
  $('#state_extended').show();
625
625
  $("button[name=state_start]").show();
626
626
  $("button[name=state_stop]").hide();
627
- $("button[name=state_sim]").show();
627
+ $("button[name=state_replay]").show();
628
628
  $("button[name=state_abandon]").show();
629
629
  } else if (notification == "running") {
630
630
  $('#state_extended').hide();
631
631
  $("button[name=state_start]").hide();
632
632
  $("button[name=state_stop]").show();
633
- $("button[name=state_sim]").hide();
633
+ $("button[name=state_replay]").hide();
634
634
  $("button[name=state_abandon]").hide();
635
635
  }
636
636
 
@@ -699,12 +699,12 @@ function start_instance() {// {{{
699
699
  error: report_failure
700
700
  });
701
701
  }// }}}
702
- function sim_instance() {// {{{
702
+ function replay_instance() {// {{{
703
703
  var url = $('body').attr('current-instance');
704
704
  $.ajax({
705
705
  type: "PUT",
706
706
  url: url + "/properties/values/state",
707
- data: ({value: "simulating"}),
707
+ data: ({value: "replaying"}),
708
708
  error: report_failure
709
709
  });
710
710
  }// }}}
@@ -19,7 +19,7 @@
19
19
  </element>
20
20
  <element name="arguments" rngui:header="Arguments">
21
21
  <zeroOrMore rngui:label="Create Argument Pair">
22
- <element rngui:label='Name'>
22
+ <element rngui:label='Name' rngui:labeltype='xml'>
23
23
  <anyName/>
24
24
  <data type="string" rngui:label="Value"/>
25
25
  </element>
@@ -40,9 +40,6 @@
40
40
  <element name="visualizer_url" rngui:label="Visualizer Url">
41
41
  <data type="string" rngui:label="Url"/>
42
42
  </element>
43
- <element name="visualizer_config" rngui:label="Visualizer Config">
44
- <data type="string" rngui:label="Url"/>
45
- </element>
46
43
  <element name="visualizer_params" rngui:header="Visualizer Arguments">
47
44
  <zeroOrMore rngui:label="Create Argument Pair">
48
45
  <element rngui:label='Name'>
@@ -54,21 +51,6 @@
54
51
  </element>
55
52
  </zeroOrMore>
56
53
  </element>
57
- <element name="aggregators" rngui:header="Aggregators">
58
- <zeroOrMore rngui:label="Add Aggregator">
59
- <element name="aggregator">
60
- <element name="name" rngui:label="Label">
61
- <data type="string" rngui:label="Label"/>
62
- </element>
63
- <element name="aggregator_url" rngui:label="Aggregator Url">
64
- <data type="string" rngui:label="Url"/>
65
- </element>
66
- <element name="aggregator_arg" rngui:label="Aggregator Argument">
67
- <data type="string" rngui:label="Path"/>
68
- </element>
69
- </element>
70
- </zeroOrMore>
71
- </element>
72
54
  </element>
73
55
  <element name="_timing" rngui:header="Timing">
74
56
  <element name="_timing_min" rngui:label='Min in min'>
@@ -81,24 +63,6 @@
81
63
  <data type='float' rngui:label='Minutes'/>
82
64
  </element>
83
65
  </element>
84
- <element name="_cost" rngui:header="Costs">
85
- <zeroOrMore rngui:label="Create Cost Factor">
86
- <element name='_cost_factor'>
87
- <element name="name" rngui:label="Label">
88
- <data type="string" rngui:label="Label"/>
89
- </element>
90
- <element name="target" rngui:label="Target Value">
91
- <data type="string" rngui:label="Value"/>
92
- </element>
93
- <element name="vfunc" rngui:label="Violation Function">
94
- <data type="string" rngui:label="Url"/>
95
- </element>
96
- <element name="vcost" rngui:label="Violation Cost">
97
- <data type="string" rngui:label="Value"/>
98
- </element>
99
- </element>
100
- </zeroOrMore>
101
- </element>
102
66
  <element name="_notes" rngui:header="Notes">
103
67
  <element name="_notes_general" rngui:label='General'>
104
68
  <text rngui:wrap='true' rngui:label='Notes'/>
@@ -19,7 +19,7 @@
19
19
  </element>
20
20
  <element name="arguments" rngui:header="Arguments">
21
21
  <zeroOrMore rngui:label="Create Argument Pair">
22
- <element rngui:label='Name'>
22
+ <element rngui:label='Name' rngui:labeltype='xml'>
23
23
  <anyName/>
24
24
  <data type="string" rngui:label="Value"/>
25
25
  </element>
@@ -40,9 +40,6 @@
40
40
  <element name="visualizer_url" rngui:label="Visualizer Url">
41
41
  <data type="string" rngui:label="Url"/>
42
42
  </element>
43
- <element name="visualizer_config" rngui:label="Visualizer Config">
44
- <data type="string" rngui:label="Url"/>
45
- </element>
46
43
  <element name="visualizer_params" rngui:header="Visualizer Arguments">
47
44
  <zeroOrMore rngui:label="Create Argument Pair">
48
45
  <element rngui:label='Name'>
@@ -54,21 +51,6 @@
54
51
  </element>
55
52
  </zeroOrMore>
56
53
  </element>
57
- <element name="aggregators" rngui:header="Aggregators">
58
- <zeroOrMore rngui:label="Add Aggregator">
59
- <element name="aggregator">
60
- <element name="name" rngui:label="Label">
61
- <data type="string" rngui:label="Label"/>
62
- </element>
63
- <element name="aggregator_url" rngui:label="Aggregator Url">
64
- <data type="string" rngui:label="Url"/>
65
- </element>
66
- <element name="aggregator_arg" rngui:label="Aggregator Argument">
67
- <data type="string" rngui:label="Path"/>
68
- </element>
69
- </element>
70
- </zeroOrMore>
71
- </element>
72
54
  </element>
73
55
  <element name="finalize" rngui:header="Finalize" rngui:label="Code">
74
56
  <attribute name="output" rngui:label="Access Variable" rngui:default="result">
@@ -93,24 +75,6 @@
93
75
  <data type='float' rngui:label='Minutes'/>
94
76
  </element>
95
77
  </element>
96
- <element name="_cost" rngui:header="Costs">
97
- <zeroOrMore rngui:label="Create Cost Factor">
98
- <element name='_cost_factor'>
99
- <element name="name" rngui:label="Label">
100
- <data type="string" rngui:label="Label"/>
101
- </element>
102
- <element name="target" rngui:label="Target Value">
103
- <data type="string" rngui:label="Value"/>
104
- </element>
105
- <element name="vfunc" rngui:label="Violation Function">
106
- <data type="string" rngui:label="Url"/>
107
- </element>
108
- <element name="vcost" rngui:label="Violation Cost">
109
- <data type="string" rngui:label="Value"/>
110
- </element>
111
- </element>
112
- </zeroOrMore>
113
- </element>
114
78
  <element name="_notes" rngui:header="Notes">
115
79
  <element name="_notes_general" rngui:label='General'>
116
80
  <text rngui:wrap='true' rngui:label='Notes'/>
@@ -19,7 +19,7 @@
19
19
  </element>
20
20
  <element name="arguments" rngui:header="Arguments">
21
21
  <zeroOrMore rngui:label="Create Argument Pair">
22
- <element rngui:label='Name'>
22
+ <element rngui:label='Name' rngui:labeltype='xml'>
23
23
  <anyName/>
24
24
  <data type="string" rngui:label="Value"/>
25
25
  </element>
@@ -19,7 +19,7 @@
19
19
  </element>
20
20
  <element name="arguments" rngui:header="Arguments">
21
21
  <zeroOrMore rngui:label="Create Argument Pair">
22
- <element rngui:label='Name'>
22
+ <element rngui:label='Name' rngui:labeltype='xml'>
23
23
  <anyName/>
24
24
  <data type="string" rngui:label="Value"/>
25
25
  </element>
@@ -0,0 +1,24 @@
1
+ <element rngui:version="1.2" name="code" rngui:header="Implementation" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" xmlns="http://relaxng.org/ns/structure/1.0" xmlns:rngui="http://rngui.org">
2
+ <element name="prepare" rngui:header="Prepare" rngui:label="Code" rngui:fold='closed_conditional'>
3
+ <text rngui:label='Script that is executed, before a service call'/>
4
+ </element>
5
+ <element name="finalize" rngui:header="Finalize" rngui:label="Code" rngui:fold='closed_conditional'>
6
+ <attribute name="output" rngui:label="Access Variable" rngui:default="result">
7
+ <data type="string" rngui:readonly="true"/>
8
+ </attribute>
9
+ <text rngui:label='Script that is executed, when a service returns data'/>
10
+ </element>
11
+ <element name="update" rngui:header="Update" rngui:label="Code" rngui:fold='closed_conditional'>
12
+ <attribute name="output" rngui:label="Access Variable" rngui:default="result">
13
+ <data type="string" rngui:readonly="true"/>
14
+ </attribute>
15
+ <text rngui:label='Script that is executed, when a service sends intermediate data'/>
16
+ </element>
17
+ <element name="rescue" rngui:header="Rescue" rngui:label="Code" rngui:fold='closed_conditional'>
18
+ <attribute name="output" rngui:label="Access Variable" rngui:default="result">
19
+ <data type="string" rngui:readonly="true"/>
20
+ </attribute>
21
+ <text rngui:label='Script that is executed, if a service call fails'/>
22
+ </element>
23
+ </element>
24
+
@@ -1184,6 +1184,6 @@ function WFAdaptorManifestation(adaptor) {
1184
1184
  }//}}}
1185
1185
  }; /*}}}*/
1186
1186
  this.elements.scripts = { /*{{{*/
1187
- 'description': [self.adaptor.theme_dir + 'rngs/update.rng',self.adaptor.theme_dir + 'rngs/finalize.rng']
1187
+ 'description': [self.adaptor.theme_dir + 'rngs/scripts.rng']
1188
1188
  }; /*}}}*/
1189
1189
  }
@@ -83,11 +83,11 @@
83
83
  </button>
84
84
  <span id="state_extended">
85
85
  <span> / </span>
86
- <button name="state_sim" title='simulate'>
86
+ <button name="state_replay" title='replay'>
87
87
  <svg viewBox="0 -1.5 7 12" width="10" height="16">
88
88
  <path
89
89
  style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
90
- d="M 0,7.0741552 1.598154,6.8788136 q 0.144277,1.0115903 0.58266,1.4859901 0.443932,0.474402 1.193067,0.474402 0.793528,0 1.193066,-0.418589 0.405089,-0.4255654 0.405089,-0.990661 0,-0.362777 -0.172025,-0.6139303 Q 4.633538,6.5578953 4.211802,6.3695302 3.923247,6.2439536 2.896654,5.9230353 1.575957,5.5114228 1.04324,4.911445 0.294105,4.0672905 0.294105,2.8533821 q 0,-0.7813662 0.349596,-1.4580852 Q 0.998846,0.7116014 1.659195,0.3558006 2.325092,0 3.262898,0 4.794462,0 5.565794,0.8441546 6.342674,1.6883092 6.381518,3.0975591 L 4.73897,3.1882531 Q 4.633538,2.3999106 4.283941,2.0580629 3.939894,1.7092386 3.246251,1.7092386 q -0.71584,0 -1.120927,0.3697537 -0.260811,0.2372006 -0.260811,0.6348602 0,0.3627771 0.244164,0.6209071 0.31075,0.3278947 1.509366,0.6836954 1.198616,0.3558008 1.770178,0.7395073 0.577111,0.3767302 0.898962,1.0394962 0.327399,0.6557896 0.327399,1.6255215 0,0.8790367 -0.388439,1.6464517 -0.388442,0.767412 -1.098732,1.1441413 -0.710291,0.369755 -1.770178,0.369755 -1.542663,0 -2.369485,-0.8929903 Q 0.160924,8.7903717 0,7.0741552 Z"/>
90
+ d="m -0.24999978,8.9999993 c 0,-2.7488167 0,-5.4976332 0,-8.24644997 C 1.1183278,0.76955385 2.4884861,0.71666052 3.8555376,0.79065567 4.5083287,0.83810218 5.2238942,1.0790874 5.5755039,1.7307256 6.1661398,2.7080902 6.0299484,4.2180754 5.1108772,4.9019222 4.7622397,5.1617467 4.3480204,5.2956156 3.9336064,5.3605366 4.9287868,5.9394132 5.4254071,7.0996814 6.0167729,8.0858876 6.1549588,8.3769029 6.4657247,8.7723933 6.5,8.9999999 c -0.5944185,0 -1.1888371,0 -1.7832559,0 C 4.0758679,7.9893475 3.4946311,6.9294648 2.7923497,5.9678488 2.4230355,5.5319748 1.8508715,5.5458842 1.3513114,5.5576027 c -0.1507526,-0.00412 -0.044576,0.272902 -0.076255,0.3990664 0,1.0144436 0,2.028887 0,3.0433307 -0.50835205,-3e-7 -1.01670555,8e-7 -1.52505618,-5e-7 z M 1.2750578,4.2411336 C 2.111059,4.2189781 2.9581852,4.3060525 3.7849326,4.1387394 4.4863715,3.8915585 4.5732952,2.6432813 3.9026802,2.2941453 3.5098807,2.068434 3.050719,2.1857044 2.6267379,2.1489138 c -0.4505578,-0.00242 -0.90112,0.00147 -1.3516801,-3.456e-4 0,0.6975176 0,1.3950347 0,2.0925522 z"
91
91
  </svg>
92
92
  </button>
93
93
  <span> / </span>
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "cpee"
3
- s.version = "1.5.2"
3
+ s.version = "1.5.8"
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). If you just need workflow execution, without a rest/xmpp service exposing it, then use WEEL"
@@ -22,7 +22,7 @@ Gem::Specification.new do |s|
22
22
  s.homepage = 'http://cpee.org/'
23
23
 
24
24
  s.add_runtime_dependency 'riddl', '~> 0.99'
25
- s.add_runtime_dependency 'weel', '~> 1.99', '>= 1.99.76'
25
+ s.add_runtime_dependency 'weel', '~> 1.99', '>= 1.99.78'
26
26
  s.add_runtime_dependency 'savon', '~> 2'
27
27
  s.add_runtime_dependency 'highline', '~> 1.6'
28
28
  s.add_runtime_dependency 'json', '~>2.1'
@@ -167,6 +167,11 @@ module CPEE
167
167
  @thread = @instance.sim
168
168
  end # }}}
169
169
 
170
+ def replay # {{{
171
+ @thread.join if !@thread.nil? && @thread.alive?
172
+ @thread = @instance.replay
173
+ end # }}}
174
+
170
175
  def start # {{{
171
176
  @thread.join if !@thread.nil? && @thread.alive?
172
177
  unless @positions.empty?
@@ -244,7 +249,7 @@ module CPEE
244
249
  def serialize_state! # {{{
245
250
  @properties.activate_schema(:finished) if @instance.state == :finished || @instance.state == :abandoned
246
251
  @properties.activate_schema(:inactive) if @instance.state == :stopped || @instance.state == :ready
247
- @properties.activate_schema(:active) if @instance.state == :running || @instance.state == :simulating
252
+ @properties.activate_schema(:active) if @instance.state == :running || @instance.state == :simulating || @instance.state == :replaying
248
253
  if [:finished, :stopped, :ready, :abandoned].include?(@instance.state)
249
254
  state_change! @instance.state
250
255
  end
@@ -376,6 +381,8 @@ module CPEE
376
381
  start
377
382
  when 'simulating'
378
383
  sim
384
+ when 'replaying'
385
+ replay
379
386
  when 'ready'
380
387
  @instance.state_signal
381
388
  when 'abandoned'
@@ -42,77 +42,100 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
42
42
  @handler_position = position
43
43
  @handler_passthrough = nil
44
44
  @handler_returnValue = nil
45
+ @handler_returnOptions = nil
45
46
  @label = ''
46
47
  end # }}}
47
48
 
48
- def prepare(readonly, endpoints, parameters)
49
- @handler_endpoint = endpoints.is_a?(Array) ? endpoints.map{ |ep| readonly.endpoints[ep] }.compact : readonly.endpoints[endpoints]
50
- parameters[:arguments].each do |ele|
51
- if ele.value.is_a?(Proc)
52
- ele.value = readonly.instance_exec &ele.value
49
+ def prepare(readonly, endpoints, parameters, replay=false) #{{{
50
+ if replay
51
+ @handler_endpoint = @controller.attributes[:replayer]
52
+ else
53
+ @handler_endpoint = endpoints.is_a?(Array) ? endpoints.map{ |ep| readonly.endpoints[ep] }.compact : readonly.endpoints[endpoints]
54
+ end
55
+ params = parameters.dup
56
+ params[:arguments] = params[:arguments].dup if params[:arguments]
57
+ params[:arguments]&.map! do |ele|
58
+ t = ele.dup
59
+ if t.value.is_a?(Proc)
60
+ t.value = readonly.instance_exec &t.value
53
61
  end
62
+ t
54
63
  end
55
- parameters
56
- end
64
+ params
65
+ end #}}}
57
66
 
58
- def activity_handle(passthrough, parameters) # {{{
59
- raise "Wrong endpoint" if @handler_endpoint.nil? || @handler_endpoint.empty?
60
- @label = parameters[:label]
61
- @sensors = parameters[:sensors]
62
- @aggregators = parameters[:aggregators]
63
- @costs = parameters[:costs]
64
- @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)
65
- if passthrough.to_s.empty?
66
- params = []
67
- callback = Digest::MD5.hexdigest(Kernel::rand().to_s)
68
- (parameters[:arguments] || []).each do |s|
69
- if s.respond_to?(:mimetype)
70
- params << Riddl::Parameter::Complex.new(s.name.to_s,v.mimetype,v.value)
67
+ def proto_curl(parameters) #{{{
68
+ params = []
69
+ callback = Digest::MD5.hexdigest(Kernel::rand().to_s)
70
+ (parameters[:arguments] || []).each do |s|
71
+ if s.respond_to?(:mimetype)
72
+ params << Riddl::Parameter::Complex.new(s.name.to_s,v.mimetype,v.value)
73
+ else
74
+ if s.name.to_s =~ /^__Q_/
75
+ params << Riddl::Parameter::Simple.new(s.name.to_s.sub(/^__Q_/,''),CPEE::ValueHelper::generate(s.value),:query)
76
+ elsif s.name.to_s =~ /^__B_/
77
+ params << Riddl::Parameter::Simple.new(s.name.to_s.sub(/^__B_/,''),CPEE::ValueHelper::generate(s.value),:body)
78
+ elsif s.name.to_s =~ /^__H_/
79
+ params << Riddl::Header.new(s.name.to_s.sub(/^__H_/,''),CPEE::ValueHelper::generate(s.value))
80
+ elsif s.name.to_s =~ /^__C_/
81
+ params << Riddl::Parameter::Complex.new(s.name.to_s.sub(/^__C_/,''),*CPEE::ValueHelper::generate(s.value).split(';',2))
71
82
  else
72
- if s.name.to_s =~ /__$/
73
- params << Riddl::Parameter::Simple.new(s.name.to_s.chop.chop,CPEE::ValueHelper::generate(s.value),:query)
74
- else
75
- params << Riddl::Parameter::Simple.new(s.name.to_s,CPEE::ValueHelper::generate(s.value))
76
- end
83
+ params << Riddl::Parameter::Simple.new(s.name.to_s,CPEE::ValueHelper::generate(s.value))
77
84
  end
78
85
  end
86
+ end
79
87
 
80
- params << Riddl::Header.new("CPEE-BASE",@controller.base_url)
81
- params << Riddl::Header.new("CPEE-INSTANCE",@controller.instance)
82
- params << Riddl::Header.new("CPEE-INSTANCE-URL",@controller.instance_url)
83
- params << Riddl::Header.new("CPEE-INSTANCE-UUID",@controller.uuid)
84
- params << Riddl::Header.new("CPEE-CALLBACK",@controller.instance_url + '/callbacks/' + callback)
85
- params << Riddl::Header.new("CPEE-CALLBACK-ID",callback)
86
- params << Riddl::Header.new("CPEE-ACTIVITY",@handler_position)
87
- params << Riddl::Header.new("CPEE-LABEL",parameters[:label]||'')
88
- @controller.attributes.each do |key,value|
89
- params << Riddl::Header.new("CPEE-ATTR-#{key.to_s.gsub(/_/,'-')}",value)
90
- end
88
+ params << Riddl::Header.new("CPEE-BASE",@controller.base_url)
89
+ params << Riddl::Header.new("CPEE-INSTANCE",@controller.instance)
90
+ params << Riddl::Header.new("CPEE-INSTANCE-URL",@controller.instance_url)
91
+ params << Riddl::Header.new("CPEE-INSTANCE-UUID",@controller.uuid)
92
+ params << Riddl::Header.new("CPEE-CALLBACK",@controller.instance_url + '/callbacks/' + callback)
93
+ params << Riddl::Header.new("CPEE-CALLBACK-ID",callback)
94
+ params << Riddl::Header.new("CPEE-ACTIVITY",@handler_position)
95
+ params << Riddl::Header.new("CPEE-LABEL",@label||'')
96
+ params << Riddl::Header.new("CPEE-REPLAY",@controller.attributes['replayer_args'])
97
+ @controller.attributes.each do |key,value|
98
+ params << Riddl::Header.new("CPEE-ATTR-#{key.to_s.gsub(/_/,'-')}",value)
99
+ end
91
100
 
92
- tendpoint = @handler_endpoint.sub(/^http(s)?-(get|put|post|delete):/,'http\\1:')
93
- type = $2 || parameters[:method] || 'post'
101
+ tendpoint = @handler_endpoint.sub(/^http(s)?-(get|put|post|delete):/,'http\\1:')
102
+ type = $2 || parameters[:method] || 'post'
94
103
 
95
- client = Riddl::Client.new(tendpoint)
104
+ client = Riddl::Client.new(tendpoint)
96
105
 
97
- @controller.callbacks[callback] = CPEE::Callback.new("callback activity: #{@handler_position}",self,:callback,nil,nil,:http)
98
- @handler_passthrough = callback
106
+ @controller.callbacks[callback] = CPEE::Callback.new("callback activity: #{@handler_position}",self,:callback,nil,nil,:http)
107
+ @handler_passthrough = callback
99
108
 
100
- status, result, headers = client.request type => params
101
- if status < 200 || status >= 300
102
- callback([ Riddl::Parameter::Complex.new('error','application/json',StringIO.new(JSON::generate({ 'status' => status, 'error' => result[0].value.read }))) ], 'CPEE_SALVAGE' => true)
109
+ status, result, headers = client.request type => params
110
+ if status < 200 || status >= 300
111
+ headers['CPEE_SALVAGE'] = true
112
+ c = result[0]&.value
113
+ c = c.read if c.respond_to? :read
114
+ callback([ Riddl::Parameter::Complex.new('error','application/json',StringIO.new(JSON::generate({ 'status' => status, 'error' => c }))) ], headers)
115
+ else
116
+ if headers['CPEE_INSTANTIATION']
117
+ @controller.notify("task/instantiation", :instance => @controller.instance, :label => @label, :instance_name => @controller.info, :instance_uuid => @controller.uuid, :activity => @handler_position, :endpoint => @handler_endpoint, :received => CPEE::ValueHelper.parse(headers['CPEE_INSTANTIATION']), :timestamp => Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"), :attributes => @controller.attributes_translated)
118
+ end
119
+ if headers['CPEE_CALLBACK'] && headers['CPEE_CALLBACK'] == 'true' && result.any?
120
+ headers['CPEE_UPDATE'] = true
121
+ callback result, headers
122
+ elsif headers['CPEE_CALLBACK'] && headers['CPEE_CALLBACK'] == 'true' && result.empty?
123
+ # do nothing, later on things will happend
103
124
  else
104
- if headers['CPEE_INSTANTIATION']
105
- @controller.notify("task/instantiation", :instance => @controller.instance, :label => @label, :instance_name => @controller.info, :instance_uuid => @controller.uuid, :activity => @handler_position, :endpoint => @handler_endpoint, :received => CPEE::ValueHelper.parse(headers['CPEE_INSTANTIATION']), :timestamp => Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"), :attributes => @controller.attributes_translated)
106
- end
107
- if headers['CPEE_CALLBACK'] && headers['CPEE_CALLBACK'] == 'true' && result.any?
108
- headers['CPEE_UPDATE'] = true
109
- callback result, headers
110
- elsif headers['CPEE_CALLBACK'] && headers['CPEE_CALLBACK'] == 'true' && result.empty?
111
- # do nothing, later on things will happend
112
- else
113
- callback result
114
- end
125
+ callback result, headers
115
126
  end
127
+ end
128
+ end #}}}
129
+
130
+ def activity_handle(passthrough, parameters) # {{{
131
+ raise "Wrong endpoint" if @handler_endpoint.nil? || @handler_endpoint.empty?
132
+ @label = parameters[:label]
133
+ @sensors = parameters[:sensors]
134
+ @aggregators = parameters[:aggregators]
135
+ @costs = parameters[:costs]
136
+ @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)
137
+ if passthrough.to_s.empty?
138
+ proto_curl parameters
116
139
  else
117
140
  @controller.callbacks[passthrough] = CPEE::Callback.new("callback activity: #{@handler_position}",self,:callback,nil,nil,:http)
118
141
  @handler_passthrough = passthrough
@@ -125,6 +148,9 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
125
148
  def activity_result_value # {{{
126
149
  @handler_returnValue
127
150
  end # }}}
151
+ def activity_result_options # {{{
152
+ @handler_returnOptions
153
+ end # }}}
128
154
 
129
155
  def activity_stop # {{{
130
156
  unless @handler_passthrough.nil?
@@ -230,15 +256,15 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
230
256
  def callback(result=nil,options={})
231
257
  @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, :aggregators => @aggregators, :costs => @costs)
232
258
  result = simplify_result(result)
259
+ @handler_returnValue = result
260
+ @handler_returnOptions = options
233
261
  if options['CPEE_UPDATE']
234
- @handler_returnValue = result
235
262
  if options['CPEE_UPDATE_STATUS']
236
263
  @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)
237
264
  end
238
265
  @handler_continue.continue WEEL::Signal::Again
239
266
  else
240
267
  @controller.callbacks.delete(@handler_passthrough)
241
- @handler_returnValue = result
242
268
  @handler_passthrough = nil
243
269
  if options['CPEE_SALVAGE']
244
270
  @handler_continue.continue WEEL::Signal::Salvage
@@ -71,6 +71,7 @@
71
71
  <running putable="true"/>
72
72
  <ready putable="true"/>
73
73
  <simulating putable="true"/>
74
+ <replaying putable="true"/>
74
75
  <abandoned putable="true"/>
75
76
  </ready>
76
77
  <running>
@@ -82,6 +83,11 @@
82
83
  <ready putable="false"/>
83
84
  <stopped putable="false"/>
84
85
  </simulating>
86
+ <replaying>
87
+ <stopping putable="true"/>
88
+ <finishing putable="false"/>
89
+ <finished putable="false"/>
90
+ </replaying>
85
91
  <stopping>
86
92
  <stopped putable="false"/>
87
93
  </stopping>
@@ -89,6 +95,7 @@
89
95
  <abandoned putable="true"/>
90
96
  <stopped putable="true"/>
91
97
  <running putable="true"/>
98
+ <replaying putable="true"/>
92
99
  <simulating putable="true"/>
93
100
  </stopped>
94
101
  <abandoned/>
@@ -71,6 +71,7 @@
71
71
  <ready putable="true"/>
72
72
  <running putable="true"/>
73
73
  <simulating putable="true"/>
74
+ <replaying putable="true"/>
74
75
  <abandoned putable="true"/>
75
76
  </ready>
76
77
  <running>
@@ -82,6 +83,11 @@
82
83
  <ready putable="false"/>
83
84
  <stopped putable="false"/>
84
85
  </simulating>
86
+ <replaying>
87
+ <stopping putable="true"/>
88
+ <finishing putable="false"/>
89
+ <finished putable="false"/>
90
+ </replaying>
85
91
  <stopping>
86
92
  <stopped putable="false"/>
87
93
  </stopping>
@@ -90,6 +96,7 @@
90
96
  <stopped putable="true"/>
91
97
  <running putable="true"/>
92
98
  <simulating putable="true"/>
99
+ <replaying putable="true"/>
93
100
  </stopped>
94
101
  <abandoned/>
95
102
  <finished/>
@@ -71,6 +71,7 @@
71
71
  <running putable="true"/>
72
72
  <ready putable="true"/>
73
73
  <simulating putable="true"/>
74
+ <replaying putable="true"/>
74
75
  <abandoned putable="true"/>
75
76
  </ready>
76
77
  <running>
@@ -82,14 +83,17 @@
82
83
  <ready putable="false"/>
83
84
  <stopped putable="false"/>
84
85
  </simulating>
85
- <stopping>
86
- <stopped putable="false"/>
87
- </stopping>
86
+ <replaying>
87
+ <stopping putable="true"/>
88
+ <finishing putable="false"/>
89
+ <finished putable="false"/>
90
+ </replaying>
88
91
  <stopped>
89
92
  <abandoned putable="true"/>
90
93
  <stopped putable="true"/>
91
94
  <running putable="true"/>
92
95
  <simulating putable="true"/>
96
+ <replaying putable="true"/>
93
97
  </stopped>
94
98
  <abandoned/>
95
99
  <finished/>
data/tools/cpee CHANGED
@@ -33,11 +33,13 @@ ARGV.options { |opt|
33
33
  opt.on("Options:")
34
34
  opt.on("--help", "-h", "This text") { puts opt; exit }
35
35
  opt.on("")
36
- opt.on(wrap("[archive DIR URL] save properties from all finished instances listed at URL into DIR. Examples:\ncpee archive ./archive http://localhost:9298/\ncpee archive ./archive http://localhost:9298/1/"))
36
+ opt.on(wrap("[archive DIR URL] save properties from all finished instances listed at URL into DIR. Examples:\ncpee archive ./archive http://localhost:9298/\ncpee archive ./archive http://localhost:9298/1/\ncpee archive ./archive http://localhost:9298/1-200"))
37
37
  opt.on("")
38
- opt.on(wrap("[abandon URL] running processes are stopped; ready or stopped processes are abandoned.\ne.g. cpee abandon http://localhost:9298/1/"))
38
+ opt.on(wrap("[abandon URL] running processes are stopped; ready or stopped processes are abandoned. Examples:\ncpee abandon http://localhost:9298/1/\ncpee abandon http://localhost:9298/1-200"))
39
39
  opt.on("")
40
- opt.on(wrap("[delete! URL] DANGER ZONE. Vanishes forever. Not in archive.\ne.g. cpee delete! http://localhost:9298/1/"))
40
+ opt.on(wrap("[start URL] stopped processes are started; all others are not touched. Examples:\ncpee start http://localhost:9298/1-200"))
41
+ opt.on("")
42
+ opt.on(wrap("[delete! URL] DANGER ZONE. Vanishes forever. Not in archive. Examples:\ncpee delete! http://localhost:9298/1/"))
41
43
  opt.on("")
42
44
  opt.on(wrap("[new DIR] scaffolds a sample execution engine. Everything except instances can be removed for default behaviour."))
43
45
  opt.on("")
@@ -165,6 +167,23 @@ elsif command == 'abandon'
165
167
  end
166
168
  end
167
169
  end
170
+ elsif command == 'start'
171
+ base = File.dirname(p1)
172
+ names = []
173
+ if File.basename(p1) =~ /(\d+)-(\d+)/
174
+ names = ($1.to_i..$2.to_i).to_a
175
+ else
176
+ names << File.basename(p1)
177
+ end
178
+ names.each do |name|
179
+ res = Typhoeus.get(File.join(base,name.to_s,'properties','values','state','/'))
180
+ if res.success?
181
+ case res.response_body
182
+ when "stopped" then
183
+ Typhoeus.put(File.join(base,name.to_s,'properties','values','state','/'), headers: {'Content-Type' => 'application/x-www-form-urlencoded'}, body: "value=running")
184
+ end
185
+ end
186
+ end
168
187
  elsif command == 'delete!'
169
188
  Typhoeus.delete(File.join(p1,'/'))
170
189
  else
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: 1.5.2
4
+ version: 1.5.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juergen eTM Mangler
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: tools
13
13
  cert_chain: []
14
- date: 2019-10-07 00:00:00.000000000 Z
14
+ date: 2019-10-21 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: riddl
@@ -36,7 +36,7 @@ dependencies:
36
36
  version: '1.99'
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: 1.99.76
39
+ version: 1.99.78
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
@@ -46,7 +46,7 @@ dependencies:
46
46
  version: '1.99'
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 1.99.76
49
+ version: 1.99.78
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: savon
52
52
  requirement: !ruby/object:Gem::Requirement
@@ -227,16 +227,15 @@ files:
227
227
  - cockpit/themes/preset/rngs/choose.rng
228
228
  - cockpit/themes/preset/rngs/critical.rng
229
229
  - cockpit/themes/preset/rngs/escape.rng
230
- - cockpit/themes/preset/rngs/finalize.rng
231
230
  - cockpit/themes/preset/rngs/group.rng
232
231
  - cockpit/themes/preset/rngs/loop.rng
233
232
  - cockpit/themes/preset/rngs/manipulate.rng
234
233
  - cockpit/themes/preset/rngs/otherwise.rng
235
234
  - cockpit/themes/preset/rngs/parallel.rng
236
235
  - cockpit/themes/preset/rngs/parallel_branch.rng
236
+ - cockpit/themes/preset/rngs/scripts.rng
237
237
  - cockpit/themes/preset/rngs/stop.rng
238
238
  - cockpit/themes/preset/rngs/terminate.rng
239
- - cockpit/themes/preset/rngs/update.rng
240
239
  - cockpit/themes/preset/theme.js
241
240
  - cockpit/track.html
242
241
  - contrib/Screenshot at 2011-09-28 02:38:11.png
@@ -1 +0,0 @@
1
- ../../default/rngs/finalize.rng
@@ -1 +0,0 @@
1
- ../../default/rngs/update.rng