cpee 2.0.18 → 2.0.23
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 +4 -4
- data/cockpit/css/wfadaptor.css +17 -0
- data/cockpit/js/instance.js +9 -8
- data/cockpit/js_libs.zip +0 -0
- data/cockpit/templates/.CPEE.xml +8 -0
- data/cockpit/templates/.Signavio.xml +8 -0
- data/cockpit/templates/.templates.xml +13 -0
- data/cockpit/templates/.transformations.xml +4 -0
- data/cockpit/themes/model/rngs/call.rng +2 -1
- data/cockpit/themes/model/rngs/callmanipulate.rng +2 -1
- data/cockpit/themes/model/theme.js +1 -1
- data/cpee.gemspec +2 -2
- data/lib/cpee/controller.rb +6 -3
- data/lib/cpee/implementation.rb +23 -8
- data/lib/cpee/implementation_notifications.rb +1 -1
- data/lib/cpee/persistence.rb +2 -1
- data/lib/cpee/redis.rb +57 -0
- data/server/handlerwrappers/default.rb +15 -15
- data/server/resources/notifications/logging/subscription.xml +6 -0
- data/server/routing/end.rb +16 -4
- data/server/routing/forward-events.rb +19 -7
- data/server/routing/forward-votes.rb +19 -7
- data/server/routing/persist.rb +26 -14
- data/tools/cpee +5 -5
- data/tools/test/README +4 -0
- data/tools/test/config.json +3 -0
- data/tools/test/contrib/graph_example.svg +1166 -0
- data/tools/test/contrib/legend.svg +817 -0
- data/tools/test/contrib/symbols.svg +224 -0
- data/tools/test/contrib/transformation1.xsl +264 -0
- data/tools/test/contrib/transformation2.xsl +10 -0
- data/tools/test/contrib/tree_example.svg +788 -0
- data/tools/test/css/model.css +24 -0
- data/tools/test/css/track.css +60 -0
- data/tools/test/css/ui.css +214 -0
- data/tools/test/css/wfadaptor.css +422 -0
- data/tools/test/edit.html +258 -0
- data/tools/test/graph.html +69 -0
- data/tools/test/index.html +258 -0
- data/tools/test/js/details.js +109 -0
- data/tools/test/js/instance.js +1344 -0
- data/tools/test/js/model.js +41 -0
- data/tools/test/js/parameters.js +82 -0
- data/tools/test/js/track.js +18 -0
- data/tools/test/js/ui.js +104 -0
- data/tools/test/js/wfadaptor.js +763 -0
- data/tools/test/js_libs.zip +0 -0
- data/tools/test/js_libs/Makefile +2 -0
- data/tools/test/js_libs/ansi_up.js +333 -0
- data/tools/test/js_libs/console.js +80 -0
- data/tools/test/js_libs/custommenu.css +84 -0
- data/tools/test/js_libs/custommenu.js +104 -0
- data/tools/test/js_libs/experiments1/relaxngui.css +185 -0
- data/tools/test/js_libs/experiments1/relaxngui.js +488 -0
- data/tools/test/js_libs/experiments1/rngtest9.html +60 -0
- data/tools/test/js_libs/experiments1/rngtest9.rng +35 -0
- data/tools/test/js_libs/experiments1/rngtest9.xml +8 -0
- data/tools/test/js_libs/jquery-2.2.4.min.js +4 -0
- data/tools/test/js_libs/jquery-3.2.1.min.js +4 -0
- data/tools/test/js_libs/jquery-3.3.1.min.js +2 -0
- data/tools/test/js_libs/jquery.browser.js +40 -0
- data/tools/test/js_libs/jquery.caret.min.js +10 -0
- data/tools/test/js_libs/jquery.cookie.js +117 -0
- data/tools/test/js_libs/jquery.min.js +1 -0
- data/tools/test/js_libs/jquery.svg.min.js +6 -0
- data/tools/test/js_libs/jquery.svgdom.min.js +6 -0
- data/tools/test/js_libs/markdown.min.js +1 -0
- data/tools/test/js_libs/parsequery.js +21 -0
- data/tools/test/js_libs/printf.js +368 -0
- data/tools/test/js_libs/relaxngui.css +213 -0
- data/tools/test/js_libs/relaxngui.js +543 -0
- data/tools/test/js_libs/strftime.min.js +1 -0
- data/tools/test/js_libs/tests/dataelements.html +59 -0
- data/tools/test/js_libs/tests/dataelements.rng +8 -0
- data/tools/test/js_libs/tests/dataelements.xml +3 -0
- data/tools/test/js_libs/tests/relaxngui.css +203 -0
- data/tools/test/js_libs/tests/relaxngui.js +502 -0
- data/tools/test/js_libs/tests/rngtest1.html +66 -0
- data/tools/test/js_libs/tests/rngtest1.rng +147 -0
- data/tools/test/js_libs/tests/rngtest1.xml +13 -0
- data/tools/test/js_libs/tests/rngtest2.html +60 -0
- data/tools/test/js_libs/tests/rngtest2.rng +6 -0
- data/tools/test/js_libs/tests/rngtest2.xml +3 -0
- data/tools/test/js_libs/tests/rngtest3.html +60 -0
- data/tools/test/js_libs/tests/rngtest3.rng +23 -0
- data/tools/test/js_libs/tests/rngtest3.xml +9 -0
- data/tools/test/js_libs/tests/rngtest4.html +60 -0
- data/tools/test/js_libs/tests/rngtest4.rng +19 -0
- data/tools/test/js_libs/tests/rngtest4.xml +12 -0
- data/tools/test/js_libs/tests/rngtest5.html +60 -0
- data/tools/test/js_libs/tests/rngtest5.rng +75 -0
- data/tools/test/js_libs/tests/rngtest5.xml +40 -0
- data/tools/test/js_libs/tests/rngtest6.html +60 -0
- data/tools/test/js_libs/tests/rngtest6.rng +24 -0
- data/tools/test/js_libs/tests/rngtest6.xml +6 -0
- data/tools/test/js_libs/tests/rngtest8.html +60 -0
- data/tools/test/js_libs/tests/rngtest8.rng +13 -0
- data/tools/test/js_libs/tests/rngtest8.xml +2 -0
- data/tools/test/js_libs/tests/rngtest9.html +60 -0
- data/tools/test/js_libs/tests/rngtest9.rng +31 -0
- data/tools/test/js_libs/tests/rngtest9.xml +8 -0
- data/tools/test/js_libs/ui.css +333 -0
- data/tools/test/js_libs/ui.html +168 -0
- data/tools/test/js_libs/ui.js +177 -0
- data/tools/test/js_libs/underscore.min.js +27 -0
- data/tools/test/js_libs/util.js +81 -0
- data/tools/test/js_libs/vkbeautify.0.99.00.beta.js +358 -0
- data/tools/test/js_libs/vkbeautify.js +1 -0
- data/tools/test/js_libs/webcomponents.min.js +196 -0
- data/tools/test/model.html +192 -0
- data/tools/test/rngs/attributes.rng +8 -0
- data/tools/test/rngs/dataelements.rng +8 -0
- data/tools/test/rngs/endpoints.rng +8 -0
- data/tools/test/templates.legacy/Async.xml +46 -0
- data/tools/test/templates.legacy/BCO.xml +70 -0
- data/tools/test/templates.legacy/BCS.xml +70 -0
- data/tools/test/templates.legacy/Centurio.xml +75 -0
- data/tools/test/templates.legacy/Concurrent.xml +40 -0
- data/tools/test/templates.legacy/Coopis Testset.xml +76 -0
- data/tools/test/templates.legacy/Endpoints and Data Manipulation.xml +30 -0
- data/tools/test/templates.legacy/ICSOC Testset.xml +95 -0
- data/tools/test/templates.legacy/Infinity.xml +28 -0
- data/tools/test/templates.legacy/Lego Boxer.xml +31 -0
- data/tools/test/templates.legacy/Lego Conveyor.xml +31 -0
- data/tools/test/templates.legacy/Lego Crane.xml +87 -0
- data/tools/test/templates.legacy/Lego Ejector.xml +55 -0
- data/tools/test/templates.legacy/Lego Full.xml +142 -0
- data/tools/test/templates.legacy/Lego Liddy.xml +40 -0
- data/tools/test/templates.legacy/Lego Plate.xml +31 -0
- data/tools/test/templates.legacy/Lego Transporter.xml +43 -0
- data/tools/test/templates.legacy/Lego_Part_1.xml +85 -0
- data/tools/test/templates.legacy/LgLinear.xml +65 -0
- data/tools/test/templates.legacy/Linear.xml +77 -0
- data/tools/test/templates.legacy/Log.xml +117 -0
- data/tools/test/templates.legacy/Mangler 1.xml +87 -0
- data/tools/test/templates.legacy/Mangler 2.xml +103 -0
- data/tools/test/templates.legacy/Manuel Labels.xml +55 -0
- data/tools/test/templates.legacy/Promise.xml +275 -0
- data/tools/test/templates.legacy/SOPROMO Test Sonification.xml +83 -0
- data/tools/test/templates.legacy/Subprocess.xml +56 -0
- data/tools/test/templates.legacy/Syncing P34 1.xml +77 -0
- data/tools/test/templates.legacy/Syncing P34 2.xml +77 -0
- data/tools/test/templates.legacy/Syncing P34 3.xml +77 -0
- data/tools/test/templates.legacy/Syncing P34.xml +77 -0
- data/tools/test/templates.legacy/TEST - Bad Loop.xml +173 -0
- data/tools/test/templates.legacy/TEST - Wrong Positions.xml +174 -0
- data/tools/test/templates.legacy/Take_5.xml +48 -0
- data/tools/test/templates.legacy/Update.xml +32 -0
- data/tools/test/templates.legacy/Worklist Parallel.xml +104 -0
- data/tools/test/templates.legacy/Worklist Test CPEE.xml +40 -0
- data/tools/test/templates.legacy/Worklist Test.xml +42 -0
- data/tools/test/templates.legacy/Worklist Test2.xml +43 -0
- data/tools/test/templates.legacy/convert_cpee2.rb +15 -0
- data/tools/test/templates.legacy/convert_preset.rb +32 -0
- data/tools/test/templates.legacy/testsets.xml +37 -0
- data/tools/test/templates.legacy/transformations.xml +4 -0
- data/tools/test/templates/Coopis 2010.xml +76 -0
- data/tools/test/templates/IUPC arXiv:1104.3609 P34 1.xml +77 -0
- data/tools/test/templates/IUPC arXiv:1104.3609 P34 2.xml +77 -0
- data/tools/test/templates/IUPC arXiv:1104.3609 P34 3.xml +77 -0
- data/tools/test/templates/Track Test Local.xml +82 -0
- data/tools/test/templates/Track Test.xml +82 -0
- data/tools/test/templates/UR-VUE 2020 Manual Adjust.xml +182 -0
- data/tools/test/templates/UR-VUE 2020 Solution Baseline.xml +203 -0
- data/tools/test/templates/UR-VUE 2020 Solution NN.xml +197 -0
- data/tools/test/templates/UR-VUE 2020 Solution View.xml +151 -0
- data/tools/test/templates/UR-VUE 2020.xml +26 -0
- data/tools/test/templates/Worklist.xml +42 -0
- data/tools/test/templates/instantiate.local/Take_Sub.xml +59 -0
- data/tools/test/templates/instantiate/Take_Perf.xml +46 -0
- data/tools/test/templates/instantiate/Take_Sub.xml +58 -0
- data/tools/test/templates/instantiate/Take_X.xml +48 -0
- data/tools/test/themes/compact/theme.js +1285 -0
- data/tools/test/themes/diana/theme.js +1650 -0
- data/tools/test/themes/extended/theme.js +1325 -0
- data/tools/test/themes/model/rngs/alternative.rng +1 -0
- data/tools/test/themes/model/rngs/call.rng +67 -0
- data/tools/test/themes/model/rngs/callmanipulate.rng +72 -0
- data/tools/test/themes/model/rngs/choose.rng +1 -0
- data/tools/test/themes/model/rngs/critical.rng +1 -0
- data/tools/test/themes/model/rngs/escape.rng +1 -0
- data/tools/test/themes/model/rngs/group.rng +1 -0
- data/tools/test/themes/model/rngs/loop.rng +1 -0
- data/tools/test/themes/model/rngs/manipulate.rng +1 -0
- data/tools/test/themes/model/rngs/otherwise.rng +1 -0
- data/tools/test/themes/model/rngs/parallel.rng +1 -0
- data/tools/test/themes/model/rngs/parallel_branch.rng +1 -0
- data/tools/test/themes/model/rngs/scripts.rng +7 -0
- data/tools/test/themes/model/rngs/stop.rng +1 -0
- data/tools/test/themes/model/rngs/terminate.rng +1 -0
- data/tools/test/themes/model/theme.js +1268 -0
- data/tools/test/themes/packed/theme.js +1286 -0
- data/tools/test/themes/preset/rngs/alternative.rng +25 -0
- data/tools/test/themes/preset/rngs/call.rng +122 -0
- data/tools/test/themes/preset/rngs/callmanipulate.rng +145 -0
- data/tools/test/themes/preset/rngs/choose.rng +14 -0
- data/tools/test/themes/preset/rngs/closed_loop.rng +62 -0
- data/tools/test/themes/preset/rngs/closed_loop_cancel.rng +5 -0
- data/tools/test/themes/preset/rngs/closed_loop_control.rng +31 -0
- data/tools/test/themes/preset/rngs/closed_loop_measuring.rng +12 -0
- data/tools/test/themes/preset/rngs/critical.rng +5 -0
- data/tools/test/themes/preset/rngs/escape.rng +1 -0
- data/tools/test/themes/preset/rngs/group.rng +3 -0
- data/tools/test/themes/preset/rngs/loop.rng +22 -0
- data/tools/test/themes/preset/rngs/manipulate.rng +9 -0
- data/tools/test/themes/preset/rngs/otherwise.rng +22 -0
- data/tools/test/themes/preset/rngs/parallel.rng +21 -0
- data/tools/test/themes/preset/rngs/parallel_branch.rng +8 -0
- data/tools/test/themes/preset/rngs/scripts.rng +23 -0
- data/tools/test/themes/preset/rngs/stop.rng +5 -0
- data/tools/test/themes/preset/rngs/terminate.rng +1 -0
- data/tools/test/themes/preset/symbols/alternative.svg +5 -0
- data/tools/test/themes/preset/symbols/arrow.svg +3 -0
- data/tools/test/themes/preset/symbols/call.svg +6 -0
- data/tools/test/themes/preset/symbols/callmanipulate.svg +8 -0
- data/tools/test/themes/preset/symbols/choose.svg +5 -0
- data/tools/test/themes/preset/symbols/choose_exclusive.svg +5 -0
- data/tools/test/themes/preset/symbols/choose_inclusive.svg +4 -0
- data/tools/test/themes/preset/symbols/closed_loop.svg +5 -0
- data/tools/test/themes/preset/symbols/closed_loop_cancel.svg +5 -0
- data/tools/test/themes/preset/symbols/closed_loop_control.svg +5 -0
- data/tools/test/themes/preset/symbols/closed_loop_measuring.svg +6 -0
- data/tools/test/themes/preset/symbols/complex.svg +8 -0
- data/tools/test/themes/preset/symbols/critical.svg +4 -0
- data/tools/test/themes/preset/symbols/end.svg +3 -0
- data/tools/test/themes/preset/symbols/escape.svg +5 -0
- data/tools/test/themes/preset/symbols/event_end.svg +3 -0
- data/tools/test/themes/preset/symbols/loop.svg +5 -0
- data/tools/test/themes/preset/symbols/manipulate.svg +4 -0
- data/tools/test/themes/preset/symbols/otherwise.svg +5 -0
- data/tools/test/themes/preset/symbols/parallel.svg +5 -0
- data/tools/test/themes/preset/symbols/parallel_branch.svg +5 -0
- data/tools/test/themes/preset/symbols/parallel_branch_compact.svg +4 -0
- data/tools/test/themes/preset/symbols/parallel_branch_event.svg +14 -0
- data/tools/test/themes/preset/symbols/parallel_branch_normal.svg +5 -0
- data/tools/test/themes/preset/symbols/scripts.svg +4 -0
- data/tools/test/themes/preset/symbols/start.svg +3 -0
- data/tools/test/themes/preset/symbols/stop.svg +5 -0
- data/tools/test/themes/preset/symbols/terminate.svg +4 -0
- data/tools/test/themes/preset/theme.js +1287 -0
- data/tools/test/track.html +142 -0
- metadata +225 -3
- data/cockpit/edit.html +0 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 245c1fa5ecd451992f6fb7ba0386858bc8595f640e08c353ad153ec69e57eb14
|
|
4
|
+
data.tar.gz: 71f69beee300e44b98c70b97c06818fea60fe18685e9080f6e796d95109ee20c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2aac6ff87441d239b3d0c359c3a42fe489e3f6e6bf7f8363d66032a53095c818d6162db6e9d448bcf20a8cc379815bf7b126f6a2cab122381709d9cc2f387d30
|
|
7
|
+
data.tar.gz: 0acb4ca004b780c45eb46736b98b4c30c0709e22dc97e674c62a2ff5a0971447e12940b7c1fb14fdc5b5044cdb8614c6a7447e19307bb8baca6f78f9baa76ec1
|
data/cockpit/css/wfadaptor.css
CHANGED
|
@@ -346,6 +346,23 @@ svg text.label {
|
|
|
346
346
|
font-family:Arial;
|
|
347
347
|
}
|
|
348
348
|
|
|
349
|
+
svg text.smaller {
|
|
350
|
+
font-size:12px;
|
|
351
|
+
font-style:normal;
|
|
352
|
+
font-variant:normal;
|
|
353
|
+
font-weight:bold;
|
|
354
|
+
font-stretch:normal;
|
|
355
|
+
text-align:center;
|
|
356
|
+
line-height:125%;
|
|
357
|
+
writing-mode:horizontal-tb;
|
|
358
|
+
text-anchor:middle;
|
|
359
|
+
color: var(--wfadaptor-base);
|
|
360
|
+
fill: var(--wfadaptor-base);
|
|
361
|
+
fill-opacity:1;
|
|
362
|
+
stroke:none;
|
|
363
|
+
font-family:Arial;
|
|
364
|
+
}
|
|
365
|
+
|
|
349
366
|
#arrow {
|
|
350
367
|
stroke: var(--wfadaptor-base);
|
|
351
368
|
stroke-width: 2;
|
data/cockpit/js/instance.js
CHANGED
|
@@ -629,9 +629,11 @@ function monitor_instance_state() {// {{{
|
|
|
629
629
|
}// }}}
|
|
630
630
|
function monitor_instance_transformation() {// {{{
|
|
631
631
|
var url = $('body').attr('current-instance');
|
|
632
|
+
console.log('hallo');
|
|
633
|
+
console.log(url);
|
|
632
634
|
$.ajax({
|
|
633
635
|
type: "GET",
|
|
634
|
-
url: url + "/properties/attributes/modeltype",
|
|
636
|
+
url: url + "/properties/attributes/modeltype/",
|
|
635
637
|
success: function(res){
|
|
636
638
|
$("#currentmodel").text(res);
|
|
637
639
|
},
|
|
@@ -774,7 +776,7 @@ function start_instance() {// {{{
|
|
|
774
776
|
var url = $('body').attr('current-instance');
|
|
775
777
|
$.ajax({
|
|
776
778
|
type: "PUT",
|
|
777
|
-
url: url + "/properties/state",
|
|
779
|
+
url: url + "/properties/state/",
|
|
778
780
|
data: ({value: "running"}),
|
|
779
781
|
error: report_failure
|
|
780
782
|
});
|
|
@@ -783,7 +785,7 @@ function replay_instance() {// {{{
|
|
|
783
785
|
var url = $('body').attr('current-instance');
|
|
784
786
|
$.ajax({
|
|
785
787
|
type: "PUT",
|
|
786
|
-
url: url + "/properties/state",
|
|
788
|
+
url: url + "/properties/state/",
|
|
787
789
|
data: ({value: "replaying"}),
|
|
788
790
|
error: report_failure
|
|
789
791
|
});
|
|
@@ -793,7 +795,7 @@ function aba_instance() {// {{{
|
|
|
793
795
|
var url = $('body').attr('current-instance');
|
|
794
796
|
$.ajax({
|
|
795
797
|
type: "PUT",
|
|
796
|
-
url: url + "/properties/state",
|
|
798
|
+
url: url + "/properties/state/",
|
|
797
799
|
data: ({value: "abandoned"}),
|
|
798
800
|
error: report_failure
|
|
799
801
|
});
|
|
@@ -802,7 +804,7 @@ function stop_instance() {// {{{
|
|
|
802
804
|
var url = $('body').attr('current-instance');
|
|
803
805
|
$.ajax({
|
|
804
806
|
type: "PUT",
|
|
805
|
-
url: url + "/properties/state",
|
|
807
|
+
url: url + "/properties/state/",
|
|
806
808
|
data: ({value: "stopping"}),
|
|
807
809
|
error: report_failure
|
|
808
810
|
});
|
|
@@ -838,7 +840,6 @@ function get_testset(deferred) {// {{{
|
|
|
838
840
|
$('testset > dsl',testset).remove();
|
|
839
841
|
$('testset > dslx',testset).remove();
|
|
840
842
|
$('testset > attributes > uuid',testset).remove();
|
|
841
|
-
$('testset > attributes > theme',testset).remove();
|
|
842
843
|
testset.append($X('<transformation xmlns="http://cpee.org/ns/properties/2.0"><description type="copy"/><dataelements type="none"/><endpoints type="none"/></transformation>'));
|
|
843
844
|
var name = $('testset > attributes > info',testset).text();
|
|
844
845
|
$('[xmlns]',testset).each((idx,ele) => {
|
|
@@ -952,7 +953,7 @@ async function set_testset(testset,exec) {// {{{
|
|
|
952
953
|
success: function(res){
|
|
953
954
|
$.ajax({
|
|
954
955
|
type: "PUT",
|
|
955
|
-
url: url + "/properties/state",
|
|
956
|
+
url: url + "/properties/state/",
|
|
956
957
|
data: ({value: res}),
|
|
957
958
|
error: report_failure,
|
|
958
959
|
success: function(res){
|
|
@@ -1054,7 +1055,7 @@ function load_modeltype() {// {{{
|
|
|
1054
1055
|
success: function(res){
|
|
1055
1056
|
$.ajax({
|
|
1056
1057
|
type: "PUT",
|
|
1057
|
-
url: url + "/properties/attributes/modeltype",
|
|
1058
|
+
url: url + "/properties/attributes/modeltype/",
|
|
1058
1059
|
data: ({value: name}),
|
|
1059
1060
|
success: function(){
|
|
1060
1061
|
set_testset(res,false);
|
data/cockpit/js_libs.zip
ADDED
|
Binary file
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0"?>
|
|
2
|
+
<testset>
|
|
3
|
+
<transformation>
|
|
4
|
+
<description type='rest'>http://localhost:9295/bpmn2/</description>
|
|
5
|
+
<dataelements type='rest'>http://localhost:9295/bpmn2/</dataelements>
|
|
6
|
+
<endpoints type='rest'>http://localhost:9295/bpmn2/</endpoints>
|
|
7
|
+
</transformation>
|
|
8
|
+
</testset>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<testsets>
|
|
2
|
+
<testset>UR-VUE 2020</testset>
|
|
3
|
+
<testset>UR-VUE 2020 Solution View</testset>
|
|
4
|
+
<testset>UR-VUE 2020 Solution Baseline</testset>
|
|
5
|
+
<testset>UR-VUE 2020 Solution NN</testset>
|
|
6
|
+
<testset>Coopis 2010</testset>
|
|
7
|
+
<testset>IUPC arXiv:1104.3609 P34 1</testset>
|
|
8
|
+
<testset>IUPC arXiv:1104.3609 P34 2</testset>
|
|
9
|
+
<testset>IUPC arXiv:1104.3609 P34 3</testset>
|
|
10
|
+
<testset>Worklist</testset>
|
|
11
|
+
<testset>Track Test</testset>
|
|
12
|
+
<testset>Track Test Local</testset>
|
|
13
|
+
</testsets>
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
<value id="sensor">Read From Sensor</value>
|
|
9
9
|
<value id="human">Human Task</value>
|
|
10
10
|
<value id="subprocess">Subprocess</value>
|
|
11
|
-
<value id="robot">Robot</value>
|
|
11
|
+
<value id="robot">Robot Task</value>
|
|
12
|
+
<value id="robot_subprocess">Robot Subprocess</value>
|
|
12
13
|
<value id="plc">PLC</value>
|
|
13
14
|
<value id="send">Send Message</value>
|
|
14
15
|
<value id="receive">Receive Message</value>
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
<value id="sensor">Read From Sensor</value>
|
|
9
9
|
<value id="human">Human Task</value>
|
|
10
10
|
<value id="subprocess">Subprocess</value>
|
|
11
|
-
<value id="robot">Robot</value>
|
|
11
|
+
<value id="robot">Robot Task</value>
|
|
12
|
+
<value id="robot_subprocess">Robot Subprocess</value>
|
|
12
13
|
<value id="plc">PLC</value>
|
|
13
14
|
<value id="send">Send Message</value>
|
|
14
15
|
<value id="receive">Receive Message</value>
|
|
@@ -241,7 +241,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
|
241
241
|
'label': function(node){
|
|
242
242
|
var ret;
|
|
243
243
|
if ($('> url',$(node).children('parameters').children('arguments')).length > 0) {
|
|
244
|
-
ret = [ { column: 'Label', value: $('> label',$(node).children('parameters')).text().replace(/^['"]/,'').replace(/['"]$/,'') + ' <a target="
|
|
244
|
+
ret = [ { column: 'Label', value: $('> label',$(node).children('parameters')).text().replace(/^['"]/,'').replace(/['"]$/,'') + ' <a target="_blank" href="' + $('> url',$(node).children('parameters').children('arguments')).text() + '"></a>' } ];
|
|
245
245
|
} else {
|
|
246
246
|
ret = [ { column: 'Label', value: $('> label',$(node).children('parameters')).text().replace(/^['"]/,'').replace(/['"]$/,'') } ];
|
|
247
247
|
}
|
data/cpee.gemspec
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Gem::Specification.new do |s|
|
|
2
2
|
s.name = "cpee"
|
|
3
|
-
s.version = "2.0.
|
|
3
|
+
s.version = "2.0.23"
|
|
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.org). If you just need workflow execution, without a rest service exposing it, then use WEEL."
|
|
7
7
|
|
|
8
8
|
s.description = "see http://cpee.org"
|
|
9
9
|
|
|
10
|
-
s.files = Dir['{example/**/*,server/**/*,tools/**/*,tools/archive,lib/**/*,cockpit/**/*,cockpit/themes/*/*/*,contrib/logo*,contrib/Screen*}'] - Dir['{server/instances/**/*,cockpit/js_libs
|
|
10
|
+
s.files = Dir['{example/**/*,server/**/*,tools/**/*,tools/archive,lib/**/*,cockpit/**/*,cockpit/templates/.templates.xml,cockpit/templates/.transformations.xml,cockpit/templates/.Signavio.xml,cockpit/templates/.CPEE.xml,cockpit/themes/*/*/*,contrib/logo*,contrib/Screen*}'] - Dir['{server/instances/**/*,cockpit/js_libs/**/*,server/redis*}'] + %w(COPYING FEATURES.md INSTALL.md Rakefile cpee.gemspec README.md AUTHORS)
|
|
11
11
|
s.require_path = 'lib'
|
|
12
12
|
s.extra_rdoc_files = ['README.md']
|
|
13
13
|
s.bindir = 'tools'
|
data/lib/cpee/controller.rb
CHANGED
|
@@ -20,6 +20,7 @@ require 'riddl/client'
|
|
|
20
20
|
require_relative 'value_helper'
|
|
21
21
|
require_relative 'attributes_helper'
|
|
22
22
|
require_relative 'message'
|
|
23
|
+
require_relative 'redis'
|
|
23
24
|
|
|
24
25
|
require 'ostruct'
|
|
25
26
|
class ParaStruct < OpenStruct
|
|
@@ -34,7 +35,9 @@ module CPEE
|
|
|
34
35
|
|
|
35
36
|
class Controller
|
|
36
37
|
def initialize(id,dir,opts)
|
|
37
|
-
|
|
38
|
+
CPEE::redis_connect(opts)
|
|
39
|
+
|
|
40
|
+
@redis = opts[:redis]
|
|
38
41
|
@votes = []
|
|
39
42
|
|
|
40
43
|
@id = id
|
|
@@ -134,7 +137,7 @@ module CPEE
|
|
|
134
137
|
|
|
135
138
|
if votes.length > 0
|
|
136
139
|
@votes += votes
|
|
137
|
-
psredis =
|
|
140
|
+
psredis = @opts[:redis_dyn].call
|
|
138
141
|
collect = []
|
|
139
142
|
psredis.subscribe(votes.map{|e| ['vote-response:' + e.to_s, 'vote-end:' + e.to_s] }.flatten) do |on|
|
|
140
143
|
on.message do |what, message|
|
|
@@ -158,7 +161,7 @@ module CPEE
|
|
|
158
161
|
def callback(hw,key,content)
|
|
159
162
|
CPEE::Message::send(:callback,'activity/content',base,@id,uuid,info,content.merge(:key => key),@redis)
|
|
160
163
|
|
|
161
|
-
psredis =
|
|
164
|
+
psredis = @opts[:redis_dyn].call
|
|
162
165
|
response = nil
|
|
163
166
|
Thread.new do
|
|
164
167
|
psredis.subscribe('callback-response:' + key, 'callback-end:' + key) do |on|
|
data/lib/cpee/implementation.rb
CHANGED
|
@@ -16,6 +16,7 @@ require 'fileutils'
|
|
|
16
16
|
require 'redis'
|
|
17
17
|
require 'riddl/server'
|
|
18
18
|
require 'riddl/client'
|
|
19
|
+
require_relative 'redis'
|
|
19
20
|
require_relative 'message'
|
|
20
21
|
require_relative 'persistence'
|
|
21
22
|
require_relative 'statemachine'
|
|
@@ -70,12 +71,22 @@ module CPEE
|
|
|
70
71
|
opts[:watchdog_start_off] ||= false
|
|
71
72
|
opts[:backend_instance] ||= 'instance.rb'
|
|
72
73
|
opts[:infinite_loop_stop] ||= 10000
|
|
73
|
-
opts[:redis_path] ||= '/tmp/redis.sock'
|
|
74
|
-
opts[:redis_db] ||= 3
|
|
75
|
-
opts[:sse_keepalive_frequency] ||= 10
|
|
76
74
|
|
|
75
|
+
### set redis_cmd to nil if you want to do global
|
|
76
|
+
### at least redis_path or redis_url and redis_db have to be set if you do global
|
|
77
|
+
opts[:redis_path] ||= 'redis.sock' # use e.g. /tmp/redis.sock for global stuff. Look it up in your redis config
|
|
78
|
+
opts[:redis_db] ||= 0
|
|
79
|
+
### optional redis stuff
|
|
80
|
+
opts[:redis_url] ||= nil
|
|
81
|
+
opts[:redis_cmd] ||= 'redis-server --port 0 --unixsocket #redis_path# --unixsocketperm 600 --pidfile #redis_pid# --dir #redis_db_dir# --dbfilename #redis_db_name# --databases 1 --save 900 1 --save 300 10 --save 60 10000 --rdbcompression yes --daemonize yes'
|
|
82
|
+
opts[:redis_pid] ||= 'redis.pid' # use e.g. /var/run/redis.pid if you do global. Look it up in your redis config
|
|
83
|
+
opts[:redis_db_name] ||= 'redis.rdb' # use e.g. /var/lib/redis.rdb for global stuff. Look it up in your redis config
|
|
84
|
+
|
|
85
|
+
CPEE::redis_connect opts
|
|
86
|
+
|
|
87
|
+
opts[:sse_keepalive_frequency] ||= 10
|
|
77
88
|
opts[:sse_connections] = {}
|
|
78
|
-
|
|
89
|
+
|
|
79
90
|
opts[:statemachine] = CPEE::StateMachine.new opts[:states], %w{running simulating replaying finishing stopping abandoned finished} do |id|
|
|
80
91
|
opts[:redis].get("instance:#{id}/state")
|
|
81
92
|
end
|
|
@@ -90,9 +101,9 @@ module CPEE
|
|
|
90
101
|
|
|
91
102
|
Proc.new do
|
|
92
103
|
parallel do
|
|
93
|
-
CPEE::watch_services(opts[:watchdog_start_off])
|
|
104
|
+
CPEE::watch_services(opts[:watchdog_start_off],opts[:redis_url],File.join(opts[:basepath],opts[:redis_path]),opts[:redis_db])
|
|
94
105
|
EM.add_periodic_timer(opts[:watchdog_frequency]) do ### start services
|
|
95
|
-
CPEE::watch_services(opts[:watchdog_start_off])
|
|
106
|
+
CPEE::watch_services(opts[:watchdog_start_off],opts[:redis_url],File.join(opts[:basepath],opts[:redis_path]),opts[:redis_db])
|
|
96
107
|
end
|
|
97
108
|
EM.defer do ### catch all sse connections
|
|
98
109
|
CPEE::Notifications::sse_distributor(opts)
|
|
@@ -132,14 +143,18 @@ module CPEE
|
|
|
132
143
|
end
|
|
133
144
|
end
|
|
134
145
|
|
|
135
|
-
def self::watch_services(watchdog_start_off)
|
|
146
|
+
def self::watch_services(watchdog_start_off,url,path,db)
|
|
136
147
|
return if watchdog_start_off
|
|
137
148
|
EM.defer do
|
|
138
149
|
Dir[File.join(__dir__,'..','..','server','routing','*.rb')].each do |s|
|
|
139
150
|
s = s.sub(/\.rb$/,'')
|
|
140
151
|
pid = (File.read(s + '.pid').to_i rescue nil)
|
|
141
152
|
if (pid.nil? || !(Process.kill(0, pid) rescue false)) && !File.exist?(s + '.lock')
|
|
142
|
-
|
|
153
|
+
if url.nil?
|
|
154
|
+
system "#{s}.rb -p \"#{path}\" -d #{db} restart 1>/dev/null 2>&1"
|
|
155
|
+
else
|
|
156
|
+
system "#{s}.rb -u \"#{url}\" -d #{db} restart 1>/dev/null 2>&1"
|
|
157
|
+
end
|
|
143
158
|
puts "➡ Service #{File.basename(s,'.rb')} started ..."
|
|
144
159
|
end
|
|
145
160
|
end
|
|
@@ -165,7 +165,7 @@ module CPEE
|
|
|
165
165
|
end #}}}
|
|
166
166
|
|
|
167
167
|
def self::sse_distributor(opts) #{{{
|
|
168
|
-
conn =
|
|
168
|
+
conn = opts[:redis_dyn].call
|
|
169
169
|
conn.psubscribe('forward:*','event:state/change') do |on|
|
|
170
170
|
on.pmessage do |pat, what, message|
|
|
171
171
|
if pat == 'forward:*'
|
data/lib/cpee/persistence.rb
CHANGED
|
@@ -30,7 +30,8 @@ module CPEE
|
|
|
30
30
|
YAML::dump({
|
|
31
31
|
:host => opts[:host],
|
|
32
32
|
:url => opts[:url],
|
|
33
|
-
:
|
|
33
|
+
:redis_url => opts[:redis_url],
|
|
34
|
+
:redis_path => File.join(opts[:basepath],opts[:redis_path]),
|
|
34
35
|
:redis_db => opts[:redis_db],
|
|
35
36
|
:global_handlerwrappers => opts[:global_handlerwrappers],
|
|
36
37
|
:handlerwrappers => opts[:handlerwrappers]
|
data/lib/cpee/redis.rb
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# This file is part of CPEE.
|
|
2
|
+
#
|
|
3
|
+
# CPEE is free software: you can redistribute it and/or modify it under the terms
|
|
4
|
+
# of the GNU General Public License as published by the Free Software Foundation,
|
|
5
|
+
# either version 3 of the License, or (at your option) any later version.
|
|
6
|
+
#
|
|
7
|
+
# CPEE is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
8
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
9
|
+
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
10
|
+
#
|
|
11
|
+
# You should have received a copy of the GNU General Public License along with
|
|
12
|
+
# CPEE (file COPYING in the main directory). If not, see
|
|
13
|
+
# <http://www.gnu.org/licenses/>.
|
|
14
|
+
|
|
15
|
+
require 'redis'
|
|
16
|
+
|
|
17
|
+
module CPEE
|
|
18
|
+
def self::redis_connect(opts)
|
|
19
|
+
if opts[:redis_cmd].nil?
|
|
20
|
+
begin
|
|
21
|
+
if opts[:redis_path]
|
|
22
|
+
opts[:redis_dyn] = Proc.new { Redis.new(path: opts[:redis_path], db: opts[:redis_db]) }
|
|
23
|
+
elsif opts[:redis_url]
|
|
24
|
+
opts[:redis_dyn] = Proc.new { Redis.new(url: opts[:redis_url], db: opts[:redis_db]) }
|
|
25
|
+
else
|
|
26
|
+
raise
|
|
27
|
+
end
|
|
28
|
+
opts[:redis] = opts[:redis_dyn].call
|
|
29
|
+
opts[:redis].dbsize
|
|
30
|
+
rescue
|
|
31
|
+
puts 'can not connect to redis. check if it is running and cpee is configured correctly ...'
|
|
32
|
+
exit
|
|
33
|
+
end
|
|
34
|
+
else # we always assume file socket if redis is startet locally
|
|
35
|
+
opts[:redis_dyn] = Proc.new { Redis.new(path: File.join(opts[:basepath],opts[:redis_path]), db: opts[:redis_db].to_i) }
|
|
36
|
+
begin
|
|
37
|
+
opts[:redis] = opts[:redis_dyn].call
|
|
38
|
+
opts[:redis].dbsize
|
|
39
|
+
rescue
|
|
40
|
+
rcmd = opts[:redis_cmd]
|
|
41
|
+
rcmd.gsub! /#redis_path#/, File.join(opts[:basepath],opts[:redis_path])
|
|
42
|
+
rcmd.gsub! /#redis_db_dir#/, opts[:basepath]
|
|
43
|
+
rcmd.gsub! /#redis_db_name#/, opts[:redis_db_name]
|
|
44
|
+
rcmd.gsub! /#redis_pid#/, File.join(opts[:basepath],opts[:redis_pid])
|
|
45
|
+
res = system rcmd
|
|
46
|
+
if res
|
|
47
|
+
puts 'starting redis ... it will keep running, just to let you know ...'
|
|
48
|
+
sleep 1
|
|
49
|
+
retry
|
|
50
|
+
else
|
|
51
|
+
puts 'can not start redis. check if cpee is configured correctly ...'
|
|
52
|
+
exit
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -109,7 +109,7 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
|
|
|
109
109
|
|
|
110
110
|
client = Riddl::Client.new(tendpoint)
|
|
111
111
|
|
|
112
|
-
@controller.callback(self,callback,:'
|
|
112
|
+
@controller.callback(self,callback,:'activity-uuid' => @handler_activity_uuid, :label => @label, :activity => @handler_position)
|
|
113
113
|
@handler_passthrough = callback
|
|
114
114
|
|
|
115
115
|
status, result, headers = client.request type => params
|
|
@@ -123,7 +123,7 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
|
|
|
123
123
|
@controller.notify("task/instantiation", :'activity-uuid' => @handler_activity_uuid, :label => @label, :activity => @handler_position, :endpoint => @handler_endpoint, :received => CPEE::ValueHelper.parse(headers['CPEE_INSTANTIATION']))
|
|
124
124
|
end
|
|
125
125
|
if headers['CPEE_EVENT']
|
|
126
|
-
@controller.notify("task/#{headers['CPEE_EVENT'].gsub(/[^\w_-]/,'')}", :'
|
|
126
|
+
@controller.notify("task/#{headers['CPEE_EVENT'].gsub(/[^\w_-]/,'')}", :'activity-uuid' => @handler_activity_uuid, :label => @label, :activity => @handler_position, :endpoint => @handler_endpoint)
|
|
127
127
|
end
|
|
128
128
|
if headers['CPEE_CALLBACK'] && headers['CPEE_CALLBACK'] == 'true' && result.any?
|
|
129
129
|
headers['CPEE_UPDATE'] = true
|
|
@@ -142,11 +142,11 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
|
|
|
142
142
|
@sensors = parameters.dig(:stream,:sensors)
|
|
143
143
|
@aggregators = parameters.dig(:stream,:aggregators)
|
|
144
144
|
@costs = parameters.dig(:stream,:costs)
|
|
145
|
-
@controller.notify("activity/calling", :'
|
|
145
|
+
@controller.notify("activity/calling", :'activity-uuid' => @handler_activity_uuid, :label => @label, :activity => @handler_position, :passthrough => passthrough, :endpoint => @handler_endpoint, :parameters => parameters)
|
|
146
146
|
if passthrough.to_s.empty?
|
|
147
147
|
proto_curl parameters
|
|
148
148
|
else
|
|
149
|
-
@controller.callback(self,passthrough,:'
|
|
149
|
+
@controller.callback(self,passthrough,:'activity-uuid' => @handler_activity_uuid, :label => @label, :activity => @handler_position)
|
|
150
150
|
@handler_passthrough = passthrough
|
|
151
151
|
end
|
|
152
152
|
end # }}}
|
|
@@ -175,33 +175,33 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
|
|
|
175
175
|
end # }}}
|
|
176
176
|
|
|
177
177
|
def inform_activity_done # {{{
|
|
178
|
-
@controller.notify("activity/done", :'
|
|
178
|
+
@controller.notify("activity/done", :'activity-uuid' => @handler_activity_uuid, :endpoint => @handler_endpoint, :label => @label, :activity => @handler_position)
|
|
179
179
|
end # }}}
|
|
180
180
|
def inform_activity_manipulate # {{{
|
|
181
|
-
@controller.notify("activity/manipulating", :'
|
|
181
|
+
@controller.notify("activity/manipulating", :'activity-uuid' => @handler_activity_uuid, :endpoint => @handler_endpoint, :label => @label, :activity => @handler_position)
|
|
182
182
|
end # }}}
|
|
183
183
|
def inform_activity_failed(err) # {{{
|
|
184
184
|
puts err.message
|
|
185
185
|
puts err.backtrace
|
|
186
|
-
@controller.notify("activity/failed", :'
|
|
186
|
+
@controller.notify("activity/failed", :'activity-uuid' => @handler_activity_uuid, :endpoint => @handler_endpoint, :label => @label, :activity => @handler_position, :message => err.message, :line => err.backtrace[0].match(/(.*?):(\d+):/)[2], :where => err.backtrace[0].match(/(.*?):(\d+):/)[1])
|
|
187
187
|
end # }}}
|
|
188
188
|
def inform_manipulate_change(status,changed_dataelements,changed_endpoints,dataelements,endpoints) # {{{
|
|
189
189
|
unless status.nil?
|
|
190
|
-
@controller.notify("status/change", :'
|
|
190
|
+
@controller.notify("status/change", :'activity-uuid' => @handler_activity_uuid, :endpoint => @handler_endpoint, :label => @label, :activity => @handler_position, :id => status.id, :message => status.message)
|
|
191
191
|
end
|
|
192
192
|
unless changed_dataelements.nil?
|
|
193
|
-
@controller.notify("dataelements/change", :'
|
|
193
|
+
@controller.notify("dataelements/change", :'activity-uuid' => @handler_activity_uuid, :endpoint => @handler_endpoint, :label => @label, :activity => @handler_position, :changed => changed_dataelements, :values => dataelements)
|
|
194
194
|
end
|
|
195
195
|
unless changed_endpoints.nil?
|
|
196
|
-
@controller.notify("endpoints/change", :'
|
|
196
|
+
@controller.notify("endpoints/change", :'activity-uuid' => @handler_activity_uuid, :endpoint => @handler_endpoint, :label => @label, :activity => @handler_position, :changed => changed_endpoints, :values => endpoints)
|
|
197
197
|
end
|
|
198
198
|
end # }}}
|
|
199
199
|
|
|
200
200
|
def vote_sync_after # {{{
|
|
201
|
-
@controller.vote("activity/syncing_after", :'
|
|
201
|
+
@controller.vote("activity/syncing_after", :'activity-uuid' => @handler_activity_uuid, :endpoint => @handler_endpoint, :activity => @handler_position, :label => @label)
|
|
202
202
|
end # }}}
|
|
203
203
|
def vote_sync_before(parameters=nil) # {{{
|
|
204
|
-
@controller.vote("activity/syncing_before", :'
|
|
204
|
+
@controller.vote("activity/syncing_before", :'activity-uuid' => @handler_activity_uuid, :endpoint => @handler_endpoint, :activity => @handler_position, :label => @label, :parameters => parameters)
|
|
205
205
|
end # }}}
|
|
206
206
|
|
|
207
207
|
def simplify_result(result)
|
|
@@ -260,13 +260,13 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
|
|
|
260
260
|
end
|
|
261
261
|
|
|
262
262
|
def callback(result=nil,options={})
|
|
263
|
-
@controller.notify("activity/receiving", :'
|
|
263
|
+
@controller.notify("activity/receiving", :'activity-uuid' => @handler_activity_uuid, :label => @label, :activity => @handler_position, :endpoint => @handler_endpoint, :received => structurize_result(result), :sensors => @sensors, :aggregators => @aggregators, :costs => @costs)
|
|
264
264
|
result = simplify_result(result)
|
|
265
265
|
@handler_returnValue = result
|
|
266
266
|
@handler_returnOptions = options
|
|
267
267
|
if options['CPEE_UPDATE']
|
|
268
268
|
if options['CPEE_UPDATE_STATUS']
|
|
269
|
-
@controller.notify("activity/status", :'
|
|
269
|
+
@controller.notify("activity/status", :'activity-uuid' => @handler_activity_uuid, :label => @label, :activity => @handler_position, :endpoint => @handler_endpoint, :status => options['CPEE_UPDATE_STATUS'])
|
|
270
270
|
end
|
|
271
271
|
@handler_continue.continue WEEL::Signal::Again
|
|
272
272
|
else
|
|
@@ -290,7 +290,7 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
|
|
|
290
290
|
pp "#{type} - #{nesting} - #{tid} - #{parent} - #{parameters.inspect}"
|
|
291
291
|
|
|
292
292
|
@controller.vote("simulating/step",
|
|
293
|
-
:'
|
|
293
|
+
:'activity-uuid' => @handler_activity_uuid,
|
|
294
294
|
:label => @label,
|
|
295
295
|
:activity => tid,
|
|
296
296
|
:endpoint => @handler_endpoint,
|