cpee 1.4.17 → 1.4.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/cockpit/js/details.js +1 -0
- data/cockpit/js/instance.js +16 -7
- data/cockpit/themes/compact/theme.js +1 -1
- data/cockpit/themes/default/theme.js +1 -1
- data/cockpit/themes/extended/theme.js +1 -1
- data/cpee.gemspec +1 -1
- data/lib/cpee/controller.rb +6 -6
- data/tools/cpee +45 -22
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30952bfb498150aa39be236415fe6110733f848542c8b1cc875b4f112e3dfc3a
|
4
|
+
data.tar.gz: fe3f5fb06beaf18d6db8f168b107ca0b621e06f9da36c99a1e564ed2af82d184
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d25f4a4c0e44459518b0df15d2a5c0b0c8d3e7ec80c6556b8453ee85c9db780acc697629089b02e609b67b2b87f4474fab0dd8e4291cb888b9978d84f33028a3
|
7
|
+
data.tar.gz: d8404a79cbe9e6429f5ac44f43423f2826f497b8476bd2aa2775fa371d3ef0b7d27d497a3cd550952cff428a8692b676677b07d61d75d624f2ab1e930fc6b5cc
|
data/cockpit/js/details.js
CHANGED
data/cockpit/js/instance.js
CHANGED
@@ -17,6 +17,7 @@ var save = {};
|
|
17
17
|
save['attributes'] = undefined;
|
18
18
|
save['details'] = undefined;
|
19
19
|
save['details_target'] = undefined;
|
20
|
+
save['instance_pos'] = [];
|
20
21
|
var node_state = {};
|
21
22
|
var sub_more = 'topic' + '=' + 'activity' + '&' +// {{{
|
22
23
|
'events' + '=' + 'calling,status,manipulating,failed,done' + '&' +
|
@@ -392,6 +393,7 @@ function adaptor_init(url,theme,dslx) { //{{{
|
|
392
393
|
});
|
393
394
|
adaptor_update();
|
394
395
|
manifestation.events.click(svgid);
|
396
|
+
format_instance_pos();
|
395
397
|
};
|
396
398
|
adaptor_update();
|
397
399
|
monitor_instance_pos();
|
@@ -403,7 +405,7 @@ function adaptor_init(url,theme,dslx) { //{{{
|
|
403
405
|
graphrealization.set_description($(dslx));
|
404
406
|
adaptor_update();
|
405
407
|
manifestation.events.click(svgid);
|
406
|
-
|
408
|
+
format_instance_pos();
|
407
409
|
});
|
408
410
|
}
|
409
411
|
} //}}}
|
@@ -484,12 +486,9 @@ function monitor_instance_pos() {// {{{
|
|
484
486
|
type: "GET",
|
485
487
|
url: url + "/properties/values/positions/",
|
486
488
|
success: function(res){
|
487
|
-
|
489
|
+
save['instance_pos'] = $("value > *",res);
|
488
490
|
format_visual_clear();
|
489
|
-
|
490
|
-
var what = this.nodeName;
|
491
|
-
format_visual_add(what,save['state'] == 'running' ? 'active' : 'passive');
|
492
|
-
});
|
491
|
+
format_instance_pos();
|
493
492
|
}
|
494
493
|
});
|
495
494
|
}// }}}
|
@@ -554,6 +553,9 @@ function monitor_instance_pos_change(notification) {// {{{
|
|
554
553
|
format_visual_add(b.position,"passive")
|
555
554
|
});
|
556
555
|
}
|
556
|
+
if (!parts['at'] && !parts['unmark'] && !parts['after'] && !parts['wait']) {
|
557
|
+
monitor_instance_pos();
|
558
|
+
}
|
557
559
|
} // }}}
|
558
560
|
|
559
561
|
function monitor_instance_vote_add(notification) {// {{{
|
@@ -1078,7 +1080,14 @@ function format_visual_vote_clear() {//{{{
|
|
1078
1080
|
node_state = {};
|
1079
1081
|
$('.super .vote').each(function(a,b){b.setAttribute("class","vote");});
|
1080
1082
|
$("#votes").empty();
|
1081
|
-
}//}}}
|
1083
|
+
}//}}}
|
1084
|
+
|
1085
|
+
function format_instance_pos() { //{{{
|
1086
|
+
$(save['instance_pos']).each(function(){
|
1087
|
+
var what = this.nodeName;
|
1088
|
+
format_visual_add(what,save['state'] == 'running' ? 'active' : 'passive');
|
1089
|
+
});
|
1090
|
+
} //}}}
|
1082
1091
|
|
1083
1092
|
function format_visual_forms() { //{{{
|
1084
1093
|
if (save['state'] != "ready" && save['state'] != "stopped") {
|
@@ -161,7 +161,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
161
161
|
'params': ['> finalize, > update', xml_node]
|
162
162
|
});
|
163
163
|
}
|
164
|
-
if (xml_node.get(0).tagName == "call" || xml_node.get(0).tagName == "manipulate") {
|
164
|
+
if (xml_node.get(0).tagName == "call" || xml_node.get(0).tagName == "manipulate" || xml_node.get(0).tagName == "stop") {
|
165
165
|
var icon = self.elements.call.illustrator.svg.clone();
|
166
166
|
icon.children('g.replace').addClass('active');
|
167
167
|
var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
|
@@ -161,7 +161,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
161
161
|
'params': ['> finalize, > update', xml_node]
|
162
162
|
});
|
163
163
|
}
|
164
|
-
if (xml_node.get(0).tagName == "call" || xml_node.get(0).tagName == "manipulate") {
|
164
|
+
if (xml_node.get(0).tagName == "call" || xml_node.get(0).tagName == "manipulate" || xml_node.get(0).tagName == "stop") {
|
165
165
|
var icon = self.elements.call.illustrator.svg.clone();
|
166
166
|
icon.children('g.replace').addClass('active');
|
167
167
|
var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
|
@@ -161,7 +161,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
161
161
|
'params': ['> finalize, > update', xml_node]
|
162
162
|
});
|
163
163
|
}
|
164
|
-
if (xml_node.get(0).tagName == "call" || xml_node.get(0).tagName == "manipulate") {
|
164
|
+
if (xml_node.get(0).tagName == "call" || xml_node.get(0).tagName == "manipulate" || xml_node.get(0).tagName == "stop") {
|
165
165
|
var icon = self.elements.call.illustrator.svg.clone();
|
166
166
|
icon.children('g.replace').addClass('active');
|
167
167
|
var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
|
data/cpee.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "cpee"
|
3
|
-
s.version = "1.4.
|
3
|
+
s.version = "1.4.18"
|
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"
|
data/lib/cpee/controller.rb
CHANGED
@@ -107,7 +107,7 @@ module CPEE
|
|
107
107
|
@directory + '/notifications/',
|
108
108
|
opts[:notifications_init]
|
109
109
|
)
|
110
|
-
unless ['stopped','ready','finished'].include?(@properties.data.find("string(/p:properties/p:state)"))
|
110
|
+
unless ['stopped','ready','finished','abandoned'].include?(@properties.data.find("string(/p:properties/p:state)"))
|
111
111
|
@properties.modify do |doc|
|
112
112
|
doc.find("/p:properties/p:state").first.text = 'stopped'
|
113
113
|
end
|
@@ -233,7 +233,7 @@ module CPEE
|
|
233
233
|
@properties.data.find("string(/p:properties/p:state)")
|
234
234
|
end
|
235
235
|
def state_changed
|
236
|
-
@properties.data.find("string(/p:properties/p:state/@changed)")
|
236
|
+
(str = @properties.data.find("string(/p:properties/p:state/@changed)")).empty? ? Time.at(0).xmlschema : str
|
237
237
|
end
|
238
238
|
def state_change!(state=nil)
|
239
239
|
@properties.modify do |doc|
|
@@ -270,10 +270,10 @@ module CPEE
|
|
270
270
|
end
|
271
271
|
end #}}}
|
272
272
|
def serialize_state! # {{{
|
273
|
-
@properties.activate_schema(:finished) if @instance.state == :finished
|
274
|
-
@properties.activate_schema(:inactive) if @instance.state == :stopped
|
275
|
-
@properties.activate_schema(:active) if @instance.state == :running
|
276
|
-
if [:finished, :stopped, :ready].include?(@instance.state)
|
273
|
+
@properties.activate_schema(:finished) if @instance.state == :finished || @instance.state == :abandoned
|
274
|
+
@properties.activate_schema(:inactive) if @instance.state == :stopped || @instance.state == :ready
|
275
|
+
@properties.activate_schema(:active) if @instance.state == :running || @instance.state == :simulating
|
276
|
+
if [:finished, :stopped, :ready, :abandoned].include?(@instance.state)
|
277
277
|
state_change! @instance.state
|
278
278
|
end
|
279
279
|
end # }}}
|
data/tools/cpee
CHANGED
@@ -6,6 +6,7 @@ require 'fileutils'
|
|
6
6
|
require 'webrick'
|
7
7
|
require 'typhoeus'
|
8
8
|
require 'xml/smart'
|
9
|
+
require 'pp'
|
9
10
|
|
10
11
|
def wrap(s, width=78, indent=18)
|
11
12
|
lines = []
|
@@ -27,11 +28,15 @@ end
|
|
27
28
|
|
28
29
|
ARGV.options { |opt|
|
29
30
|
opt.summary_indent = ' ' * 2
|
30
|
-
opt.banner = "Usage:\n#{opt.summary_indent}#{File.basename($0)} [options] ui | cpui DIR | new DIR\n"
|
31
|
+
opt.banner = "Usage:\n#{opt.summary_indent}#{File.basename($0)} [options] ui | cpui DIR | new DIR | archive DIR URL | abandon URL\n"
|
31
32
|
opt.on("Options:")
|
32
33
|
opt.on("--help", "-h", "This text") { puts opt; exit }
|
33
34
|
opt.on("")
|
34
|
-
opt.on(wrap("[archive DIR URL] save properties from all finished instances listed at URL into DIR.\ne.g. cpee ./archive http://localhost:9298/"))
|
35
|
+
opt.on(wrap("[archive DIR URL] save properties from all finished instances listed at URL into DIR.\ne.g. cpee archive ./archive http://localhost:9298/"))
|
36
|
+
opt.on("")
|
37
|
+
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("")
|
39
|
+
opt.on(wrap("[delete! URL] DANGER ZONE.\ne.g. cpee delete! http://localhost:9298/1/"))
|
35
40
|
opt.on("")
|
36
41
|
opt.on(wrap("[new DIR] scaffolds a sample execution engine. Everything except instances can be removed for default behaviour."))
|
37
42
|
opt.on("")
|
@@ -42,51 +47,69 @@ ARGV.options { |opt|
|
|
42
47
|
opt.on(wrap("[ui] starts a simple static web server with the ui on http://localhost:8080. Use [cpui DIR] if you want stuff in apache or nginx."))
|
43
48
|
opt.parse!
|
44
49
|
}
|
45
|
-
if
|
50
|
+
if (ARGV.length == 0) ||
|
51
|
+
(ARGV.length == 1 && ARGV[0] != 'ui') ||
|
52
|
+
(ARGV.length == 2 && %w(abandon delete! cpui new).include?(ARGV[1])) ||
|
53
|
+
(ARGV.length == 3 && ARGV[0] != 'archive') ||
|
54
|
+
(ARGV.length > 3)
|
46
55
|
puts ARGV.options
|
47
56
|
exit
|
48
57
|
end
|
49
58
|
command = ARGV[0]
|
50
|
-
|
51
|
-
|
59
|
+
p1 = ARGV[1]
|
60
|
+
p2 = ARGV[2]
|
52
61
|
|
53
62
|
if command == 'ui'
|
54
63
|
s = WEBrick::HTTPServer.new(:Port => 8080, :DocumentRoot => "#{curpath}/../cockpit/")
|
55
64
|
trap("INT"){ s.shutdown }
|
56
65
|
s.start
|
57
66
|
elsif command == 'cpui'
|
58
|
-
if !File.exists?(
|
59
|
-
FileUtils.cp_r("#{curpath}/../cockpit/",
|
67
|
+
if !File.exists?(p1)
|
68
|
+
FileUtils.cp_r("#{curpath}/../cockpit/",p1)
|
60
69
|
else
|
61
70
|
puts "Directory already exists."
|
62
71
|
end
|
63
72
|
elsif command == 'inst'
|
64
|
-
if !File.exists?(
|
65
|
-
FileUtils.cp_r("#{curpath}/instantiation/",
|
73
|
+
if !File.exists?(p1)
|
74
|
+
FileUtils.cp_r("#{curpath}/instantiation/",p1)
|
66
75
|
else
|
67
76
|
puts 'Directory already exists.'
|
68
77
|
end
|
69
78
|
elsif command == 'archive'
|
70
|
-
res = Typhoeus.get(
|
79
|
+
res = Typhoeus.get(File.join(p2,'/'))
|
71
80
|
if res.success?
|
72
|
-
if res.headers['
|
73
|
-
XML::Smart.string(res.
|
74
|
-
puts doc.to_s
|
75
|
-
tcount = 0
|
76
|
-
fcount = 0
|
81
|
+
if res.headers['Content-Type'] =~ /^(text|application)\/xml/
|
82
|
+
XML::Smart.string(res.response_body) do |doc|
|
77
83
|
doc.root.children.each do |i|
|
78
|
-
|
79
|
-
|
84
|
+
if ["finished","abandoned"].include?(i.attributes['state'])
|
85
|
+
prop = Typhoeus.get(File.join(p2,i.attributes['id'],'properties','/'))
|
86
|
+
if prop.success?
|
87
|
+
File.write(File.join(p1,i.attributes['uuid'] + '.xml'),prop.response_body) if prop.headers['Content-Type'] =~ /^(text|application)\/xml/
|
88
|
+
Typhoeus.delete(File.join(p2,i.attributes['id'],'/'))
|
89
|
+
end
|
90
|
+
end
|
80
91
|
end
|
81
92
|
end
|
82
93
|
end
|
83
94
|
end
|
95
|
+
elsif command == 'abandon'
|
96
|
+
res = Typhoeus.get(File.join(p1,'properties','values','state','/'))
|
97
|
+
if res.success?
|
98
|
+
case res.response_body
|
99
|
+
when "ready", "stopped" then
|
100
|
+
Typhoeus.put(File.join(p1,'properties','values','state','/'), headers: {'Content-Type' => 'application/x-www-form-urlencoded'}, body: "value=abandoned")
|
101
|
+
when "running" then
|
102
|
+
Typhoeus.put(File.join(p1,'properties','values','state','/'), headers: {'Content-Type' => 'application/x-www-form-urlencoded'}, body: "value=stopped")
|
103
|
+
end
|
104
|
+
end
|
105
|
+
elsif command == 'delete!'
|
106
|
+
Typhoeus.delete(File.join(p1,'/'))
|
84
107
|
else
|
85
|
-
if !File.exists?(
|
86
|
-
FileUtils.cp_r("#{curpath}/server/",
|
87
|
-
FileUtils.mkdir("#{
|
88
|
-
FileUtils.mkdir("#{
|
89
|
-
FileUtils.mkdir("#{
|
108
|
+
if !File.exists?(p1)
|
109
|
+
FileUtils.cp_r("#{curpath}/server/",p1)
|
110
|
+
FileUtils.mkdir("#{p1}/instances") rescue nil
|
111
|
+
FileUtils.mkdir("#{p1}/resources") rescue nil
|
112
|
+
FileUtils.mkdir("#{p1}/handlerwrappers") rescue nil
|
90
113
|
else
|
91
114
|
puts 'Directory already exists.'
|
92
115
|
end
|
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.4.
|
4
|
+
version: 1.4.18
|
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: 2018-11-
|
14
|
+
date: 2018-11-19 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: riddl
|