cpee 1.5.2 → 1.5.8

Sign up to get free protection for your applications and to get access to all the features.
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