cpee 1.4.8 → 1.4.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. checksums.yaml +5 -5
  2. data/cockpit/config.json +6 -0
  3. data/cockpit/css/ui.css +7 -7
  4. data/cockpit/index.html +4 -4
  5. data/cockpit/js/instance.js +6 -3
  6. data/cockpit/themes/compact/theme.js +107 -6
  7. data/cockpit/themes/default/rngs/call.rng +29 -0
  8. data/cockpit/themes/default/rngs/callmanipulate.rng +29 -0
  9. data/cpee.gemspec +1 -1
  10. data/lib/cpee/controller.rb +1 -1
  11. data/lib/cpee/instantiation.rb +44 -21
  12. data/lib/engine/instances.rng +5 -2
  13. data/lib/instantiation.xml +5 -1
  14. data/log/elasticsearch.rb +1 -106
  15. data/log/elasticsearch_logging.rb +237 -0
  16. data/log/legacy/test_es.rb +26 -0
  17. data/log/legacy/test_split.rb +211 -0
  18. data/log/trace.yaml +17717 -0
  19. data/log/trace_sic.yaml +18343 -0
  20. data/server/handlerwrappers/default.rb +28 -23
  21. data/server/instances/1/properties.xml +158 -31
  22. data/server/instances/2/properties.xml +137 -12
  23. data/server/instances/3/properties.xml +116 -80
  24. data/server/resources/base.xml +78 -0
  25. data/server/resources/test.rb +19 -0
  26. data/server/resources/test.xml +33 -0
  27. data/server/resources/topics.xml +6 -3
  28. data/server/resources/transformation_dslx.xsl +5 -0
  29. data/server/server.pid +1 -0
  30. metadata +13 -71
  31. data/log/logs/1/test +0 -1
  32. data/server/instances/10/notifications/182434032285ca1d06a8b6554b8889c8/consumer-secret +0 -1
  33. data/server/instances/10/notifications/182434032285ca1d06a8b6554b8889c8/producer-secret +0 -1
  34. data/server/instances/10/notifications/182434032285ca1d06a8b6554b8889c8/subscription.xml +0 -23
  35. data/server/instances/10/notifications/512a3785631a5245dbb45fa150ea72ed/consumer-secret +0 -1
  36. data/server/instances/10/notifications/512a3785631a5245dbb45fa150ea72ed/producer-secret +0 -1
  37. data/server/instances/10/notifications/512a3785631a5245dbb45fa150ea72ed/subscription.xml +0 -6
  38. data/server/instances/10/properties.xml +0 -187
  39. data/server/instances/11/properties.xml +0 -191
  40. data/server/instances/12/properties.xml +0 -191
  41. data/server/instances/13/properties.xml +0 -204
  42. data/server/instances/14/properties.xml +0 -31
  43. data/server/instances/15/properties.xml +0 -30
  44. data/server/instances/16/properties.xml +0 -29
  45. data/server/instances/17/properties.xml +0 -29
  46. data/server/instances/18/properties.xml +0 -31
  47. data/server/instances/19/properties.xml +0 -31
  48. data/server/instances/20/properties.xml +0 -191
  49. data/server/instances/21/properties.xml +0 -156
  50. data/server/instances/22/properties.xml +0 -118
  51. data/server/instances/23/properties.xml +0 -118
  52. data/server/instances/24/properties.xml +0 -156
  53. data/server/instances/25/properties.xml +0 -156
  54. data/server/instances/26/properties.xml +0 -156
  55. data/server/instances/27/properties.xml +0 -140
  56. data/server/instances/28/properties.xml +0 -156
  57. data/server/instances/29/properties.xml +0 -156
  58. data/server/instances/30/properties.xml +0 -354
  59. data/server/instances/31/properties.xml +0 -354
  60. data/server/instances/313/notifications/crisp/consumer-secret +0 -1
  61. data/server/instances/313/notifications/crisp/producer-secret +0 -1
  62. data/server/instances/313/notifications/crisp/subscription.xml +0 -7
  63. data/server/instances/313/notifications/logging/consumer-secret +0 -1
  64. data/server/instances/313/notifications/logging/producer-secret +0 -1
  65. data/server/instances/313/notifications/logging/subscription.xml +0 -7
  66. data/server/instances/313/notifications/logging_yaml/consumer-secret +0 -1
  67. data/server/instances/313/notifications/logging_yaml/producer-secret +0 -1
  68. data/server/instances/313/notifications/logging_yaml/subscription.xml +0 -7
  69. data/server/instances/313/properties.xml +0 -524
  70. data/server/instances/32/properties.xml +0 -628
  71. data/server/instances/33/properties.xml +0 -156
  72. data/server/instances/4/properties.xml +0 -114
  73. data/server/instances/5/properties.xml +0 -114
  74. data/server/instances/6/properties.xml +0 -206
  75. data/server/instances/662/notifications/crisp/consumer-secret +0 -1
  76. data/server/instances/662/notifications/crisp/producer-secret +0 -1
  77. data/server/instances/662/notifications/crisp/subscription.xml +0 -7
  78. data/server/instances/662/notifications/logging/consumer-secret +0 -1
  79. data/server/instances/662/notifications/logging/producer-secret +0 -1
  80. data/server/instances/662/notifications/logging/subscription.xml +0 -7
  81. data/server/instances/662/notifications/logging_yaml/consumer-secret +0 -1
  82. data/server/instances/662/notifications/logging_yaml/producer-secret +0 -1
  83. data/server/instances/662/notifications/logging_yaml/subscription.xml +0 -7
  84. data/server/instances/662/properties.xml +0 -427
  85. data/server/instances/663/properties.xml +0 -31
  86. data/server/instances/664/properties.xml +0 -425
  87. data/server/instances/665/properties.xml +0 -425
  88. data/server/instances/666/properties.xml +0 -427
  89. data/server/instances/667/properties.xml +0 -427
  90. data/server/instances/668/properties.xml +0 -425
  91. data/server/instances/669/properties.xml +0 -425
  92. data/server/instances/670/properties.xml +0 -31
  93. data/server/instances/671/properties.xml +0 -158
  94. data/server/instances/672/properties.xml +0 -199
  95. data/server/instances/673/properties.xml +0 -52
  96. data/server/instances/7/properties.xml +0 -156
  97. data/server/instances/8/properties.xml +0 -118
  98. data/server/instances/9/properties.xml +0 -120
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 416188034ef7c0020c76c14841e2aab9556634ae
4
- data.tar.gz: d2ceda09e62188498ee0e565733007bcd90397f2
2
+ SHA256:
3
+ metadata.gz: 9bcb32efae8a0010345e6075833164b82be63e32fc74fe492e30794c39f1e0bb
4
+ data.tar.gz: 6374a34d2c0366549f152dcf5eadb896a2357c70f1d6c23b66985cda12c062f0
5
5
  SHA512:
6
- metadata.gz: a0fb17d5cbcad12b931b0cb378f9d50092792bdd8c98808f07540e8fabf4a6515e8462d39eea1408eb4efd7534443cfae12d95b6afce16f41c712f1739eb1aa9
7
- data.tar.gz: 4d91c2f7a529aa8f5b44a11a6003bf817f16decc39dc4a7709262f4e04c6a1be8b495a7632733564388d312ed7accc8d4dcc1f5e9539b4d3625e2f922c9786b4
6
+ metadata.gz: 7dd02049b645e866bfb8947a9fadf5d1718aa154d846cf0d36875b5d9bae38e39c31f8dbb8aa9c66f20422404e95047b97e7e55ffcacdd4a78ed7cf62620c78a
7
+ data.tar.gz: 61cc7b86287410f500f546cf777c65c9895b48de648cba65de6670135549d5a831f28028f4ed084137dee055148eadc69a30960af9eebe2b4280f5b26936efa7
@@ -0,0 +1,6 @@
1
+ {
2
+ "testsets-url": "https://centurio.work/customers/prime/",
3
+ "repo-url": "https://centurio.work/plan/",
4
+ "base-url": "https://centurio.work/flow/engine/"
5
+ }
6
+ ~
@@ -65,15 +65,15 @@ ui-tabbed ui-tabbar ui-behind button {
65
65
  #areainstance div.section:nth-child(3) button[name=loadmodeltype] { white-space: normal; width: 10em; height: 2em; }
66
66
 
67
67
  #areaexecution input { padding: 0; margin:0; }
68
- #areaexecution table.compact { width: 100%; }
69
- #areaexecution table.compact tr td:nth-child(1) { width: 15ex; }
68
+ #areaexecution table.x-ui-compact { width: 100%; }
69
+ #areaexecution table.x-ui-compact tr td:nth-child(1) { width: 15ex; }
70
70
 
71
- #areaexecution table.compact tbody.debug tr:last-child td { padding-bottom: 0.5em; }
72
- #areaexecution table.compact tbody.debug tr:last-child td input { vertical-align: middle; }
73
- #areaexecution table.compact tbody.exe tr:first-child td { padding-top: 0.5em; }
74
- #areaexecution table.compact tbody.exe { border-top: 1px solid #a1a1a1; }
71
+ #areaexecution table.x-ui-compact tbody.debug tr:last-child td { padding-bottom: 0.5em; }
72
+ #areaexecution table.x-ui-compact tbody.debug tr:last-child td input { vertical-align: middle; }
73
+ #areaexecution table.x-ui-compact tbody.exe tr:first-child td { padding-top: 0.5em; }
74
+ #areaexecution table.x-ui-compact tbody.exe { border-top: 1px solid #a1a1a1; }
75
75
 
76
- #areaexecution table.compact tbody.exe td { height: 2.2em; }
76
+ #areaexecution table.x-ui-compact tbody.exe td { height: 2.2em; }
77
77
 
78
78
  #dat_endpoints {
79
79
  border-collapse:collapse;
@@ -125,7 +125,7 @@
125
125
  </ui-tabbar>
126
126
  <ui-content>
127
127
  <ui-area data-belongs-to-tab="new" id="areanew"> <!--{{{-->
128
- <table class='layout'>
128
+ <table class='x-ui-layout'>
129
129
  <tr>
130
130
  <td>Repository:</td>
131
131
  <td><input name="repo-url" type="text" value=""/></td>
@@ -170,7 +170,7 @@
170
170
  </div>
171
171
  </ui-area> <!--}}}-->
172
172
  <ui-area data-belongs-to-tab="execution" id="areaexecution" class='inactive'> <!--{{{-->
173
- <table class='compact'>
173
+ <table class='x-ui-compact'>
174
174
  <tbody class='debug'>
175
175
  <tr>
176
176
  <td>Debugging:</td>
@@ -229,11 +229,11 @@
229
229
  </ui-area>
230
230
  <ui-resizehandle data-belongs-to-tab="details" data-label="drag to resize"></ui-resizehandle>
231
231
  <ui-area data-belongs-to-tab="details" id="detailcolumn">
232
- <div id="dat_details" class='layout'></div>
232
+ <div id="dat_details" class='x-ui-layout'></div>
233
233
  </ui-area>
234
234
  <ui-area data-belongs-to-tab="dsl" id="areadsl" class="inactive"></ui-area>
235
235
  <ui-area data-belongs-to-tab="log" id="arealog" class="inactive"> <!--{{{-->
236
- <table id="dat_log" class="layout"></table>
236
+ <table id="dat_log" class="x-ui-layout"></table>
237
237
  </ui-area> <!--}}}-->
238
238
  </ui-content>
239
239
  </ui-rest>
@@ -367,8 +367,10 @@ function adaptor_update() { //{{{
367
367
  $('g.element[element-endpoint]').each(function(k,ele){
368
368
  if (save['endpoints_cache'][$(ele).attr('element-endpoint')] && save['endpoints_cache'][$(ele).attr('element-endpoint')]) {
369
369
  var c = $(ele).find('g.replace');
370
- var symbol = save['endpoints_cache'][$(ele).attr('element-endpoint')].symbol.documentElement;
371
- c.replaceWith($(symbol).clone());
370
+ var symbol = save['endpoints_cache'][$(ele).attr('element-endpoint')].symbol;
371
+ if (symbol) {
372
+ c.replaceWith($(symbol.documentElement).clone());
373
+ }
372
374
  }
373
375
  });
374
376
  } //}}}
@@ -739,7 +741,8 @@ function set_testset(testset,exec) {// {{{
739
741
  data: ({value: res}),
740
742
  error: report_failure,
741
743
  success: function(res){
742
- if (exec) start_instance();
744
+ // use promises you filthy animal
745
+ if (exec) setTimeout(start_instance,2000);
743
746
  }
744
747
  });
745
748
  }
@@ -23,13 +23,13 @@ function WFAdaptorManifestation(adaptor) {
23
23
  return($X(ntxt));
24
24
  } else {
25
25
  if (opts && opts == 'clone') {
26
+ base = base.clone();
26
27
  if (base.attr('id')) {
27
- base = base.clone();
28
- // not very generic, because it is assumed that id is attribute of top level
29
- // a better solution would be to parse rng for get_free_id()
30
- // but: there is lots of lock-in to element-id, so fuck it
31
28
  base.attr('id',self.adaptor.description.get_free_id());
32
29
  }
30
+ base.find('*[id]').each(function(k,v){
31
+ $(v).attr('id',self.adaptor.description.get_free_id(base));
32
+ });
33
33
  }
34
34
  return base;
35
35
  }
@@ -59,9 +59,9 @@ function WFAdaptorManifestation(adaptor) {
59
59
  var tab = $('#dat_details');
60
60
  var node = self.adaptor.description.get_node_by_svg_id(svgid).get(0);
61
61
  tab.empty();
62
- if (self.adaptor.description.elements[$(node).attr('svg-type')]) {
62
+ if (self.adaptor.description.elements[$(node).attr('svg-subtype')]) {
63
63
  save['details_target'] = { 'svgid': svgid, 'model': self.adaptor.description };
64
- var rng = self.adaptor.description.elements[$(node).attr('svg-type')].clone();
64
+ var rng = self.adaptor.description.elements[$(node).attr('svg-subtype')].clone();
65
65
  if (save['endpoints_cache'][$(node).attr('endpoint')] && save['endpoints_cache'][$(node).attr('endpoint')].schema) {
66
66
  var schema = save['endpoints_cache'][$(node).attr('endpoint')].schema.documentElement;
67
67
  $(rng).find(' > element[name="parameters"] > element[name="arguments"]').replaceWith($(schema).clone());
@@ -275,6 +275,37 @@ function WFAdaptorManifestation(adaptor) {
275
275
  'click': self.events.click,
276
276
  }//}}}
277
277
  }; /*}}}*/
278
+ this.elements.stop = { /*{{{*/
279
+ 'type': 'primitive',
280
+ 'illustrator': {//{{{
281
+ 'endnodes': 'this',
282
+ 'svg': self.adaptor.theme_dir + 'symbols/stop.svg'
283
+ },//}}}
284
+ 'description': self.adaptor.theme_dir + 'rngs/stop.rng',
285
+ 'permissible_children': function(node,mode) { //{{{
286
+ return [];
287
+ }, //}}}
288
+ 'adaptor': {//{{{
289
+ 'mousedown': function (node,e) { self.events.mousedown(node,e,false,true); },
290
+ 'click': self.events.click,
291
+ }//}}}
292
+ }; /*}}}*/
293
+ this.elements.terminate = { /*{{{*/
294
+ 'type': 'primitive',
295
+ 'illustrator': {//{{{
296
+ 'endnodes': 'this',
297
+ 'final': true,
298
+ 'svg': self.adaptor.theme_dir + 'symbols/terminate.svg'
299
+ },//}}}
300
+ 'description': self.adaptor.theme_dir + 'rngs/terminate.rng',
301
+ 'permissible_children': function(node,mode) { //{{{
302
+ return [];
303
+ }, //}}}
304
+ 'adaptor': {//{{{
305
+ 'mousedown': function (node,e) { self.events.mousedown(node,e,false,true); },
306
+ 'click': self.events.click,
307
+ }//}}}
308
+ }; /*}}}*/
278
309
 
279
310
  // Complex Elements
280
311
  this.elements.choose = { /*{{{*/
@@ -390,6 +421,16 @@ function WFAdaptorManifestation(adaptor) {
390
421
  'menu_icon': self.elements.loop.illustrator.svg.clone(),
391
422
  'type': 'loop',
392
423
  'params': [self.adaptor.description.elements.loop, node]},
424
+ {'label': 'Terminate',
425
+ 'function_call': func,
426
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
427
+ 'type': 'terminate',
428
+ 'params': [self.adaptor.description.elements.terminate, node]},
429
+ {'label': 'Stop',
430
+ 'function_call': func,
431
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
432
+ 'type': 'stop',
433
+ 'params': [self.adaptor.description.elements.stop, node]},
393
434
  {'label': 'Critical',
394
435
  'function_call': func,
395
436
  'menu_icon': self.elements.critical.illustrator.svg.clone(),
@@ -463,6 +504,16 @@ function WFAdaptorManifestation(adaptor) {
463
504
  'menu_icon': self.elements.loop.illustrator.svg.clone(),
464
505
  'type': 'loop',
465
506
  'params': [self.adaptor.description.elements.loop, node]},
507
+ {'label': 'Terminate',
508
+ 'function_call': func,
509
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
510
+ 'type': 'terminate',
511
+ 'params': [self.adaptor.description.elements.terminate, node]},
512
+ {'label': 'Stop',
513
+ 'function_call': func,
514
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
515
+ 'type': 'stop',
516
+ 'params': [self.adaptor.description.elements.stop, node]},
466
517
  {'label': 'Critical',
467
518
  'function_call': func,
468
519
  'menu_icon': self.elements.critical.illustrator.svg.clone(),
@@ -525,6 +576,16 @@ function WFAdaptorManifestation(adaptor) {
525
576
  'menu_icon': self.elements.loop.illustrator.svg.clone(),
526
577
  'type': 'loop',
527
578
  'params': [self.adaptor.description.elements.loop, node]},
579
+ {'label': 'Terminate',
580
+ 'function_call': func,
581
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
582
+ 'type': 'terminate',
583
+ 'params': [self.adaptor.description.elements.terminate, node]},
584
+ {'label': 'Stop',
585
+ 'function_call': func,
586
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
587
+ 'type': 'stop',
588
+ 'params': [self.adaptor.description.elements.stop, node]},
528
589
  {'label': 'Critical',
529
590
  'function_call': func,
530
591
  'menu_icon': self.elements.critical.illustrator.svg.clone(),
@@ -602,6 +663,16 @@ function WFAdaptorManifestation(adaptor) {
602
663
  'menu_icon': self.elements.loop.illustrator.svg.clone(),
603
664
  'type': 'loop',
604
665
  'params': [self.adaptor.description.elements.loop, node]},
666
+ {'label': 'Terminate',
667
+ 'function_call': self.adaptor.description.insert_last_into,
668
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
669
+ 'type': 'terminate',
670
+ 'params': [self.adaptor.description.elements.terminate, node]},
671
+ {'label': 'Stop',
672
+ 'function_call': self.adaptor.description.insert_last_into,
673
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
674
+ 'type': 'stop',
675
+ 'params': [self.adaptor.description.elements.stop, node]},
605
676
  {'label': 'Critical',
606
677
  'function_call': self.adaptor.description.insert_last_into,
607
678
  'menu_icon': self.elements.critical.illustrator.svg.clone(),
@@ -683,6 +754,16 @@ function WFAdaptorManifestation(adaptor) {
683
754
  'menu_icon': self.elements.loop.illustrator.svg.clone(),
684
755
  'type': 'loop',
685
756
  'params': [self.adaptor.description.elements.loop, node]},
757
+ {'label': 'Terminate',
758
+ 'function_call': func,
759
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
760
+ 'type': 'terminate',
761
+ 'params': [self.adaptor.description.elements.terminate, node]},
762
+ {'label': 'Stop',
763
+ 'function_call': func,
764
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
765
+ 'type': 'stop',
766
+ 'params': [self.adaptor.description.elements.stop, node]},
686
767
  {'label': 'Critical',
687
768
  'function_call': func,
688
769
  'menu_icon': self.elements.critical.illustrator.svg.clone(),
@@ -758,6 +839,16 @@ function WFAdaptorManifestation(adaptor) {
758
839
  'menu_icon': self.elements.loop.illustrator.svg.clone(),
759
840
  'type': 'loop',
760
841
  'params': [self.adaptor.description.elements.loop, node]},
842
+ {'label': 'Terminate',
843
+ 'function_call': func,
844
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
845
+ 'type': 'terminate',
846
+ 'params': [self.adaptor.description.elements.terminate, node]},
847
+ {'label': 'Stop',
848
+ 'function_call': func,
849
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
850
+ 'type': 'stop',
851
+ 'params': [self.adaptor.description.elements.stop, node]},
761
852
  {'label': 'Critical',
762
853
  'function_call': func,
763
854
  'menu_icon': self.elements.critical.illustrator.svg.clone(),
@@ -856,6 +947,16 @@ function WFAdaptorManifestation(adaptor) {
856
947
  'menu_icon': self.elements.loop.illustrator.svg.clone(),
857
948
  'type': 'loop',
858
949
  'params': [self.adaptor.description.elements.loop, node]},
950
+ {'label': 'Terminate',
951
+ 'function_call': func,
952
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
953
+ 'type': 'terminate',
954
+ 'params': [self.adaptor.description.elements.terminate, node]},
955
+ {'label': 'Stop',
956
+ 'function_call': func,
957
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
958
+ 'type': 'stop',
959
+ 'params': [self.adaptor.description.elements.stop, node]},
859
960
  {'label': 'Critical',
860
961
  'function_call': func,
861
962
  'menu_icon': self.elements.critical.illustrator.svg.clone(),
@@ -25,6 +25,35 @@
25
25
  </element>
26
26
  </zeroOrMore>
27
27
  </element>
28
+ <element name="sensors" rngui:header="Sensors">
29
+ <zeroOrMore rngui:label="Add Sensor">
30
+ <element name="sensor">
31
+ <element name="name" rngui:label="Label">
32
+ <data type="string" rngui:label="Label"/>
33
+ </element>
34
+ <element name="extractor_url" rngui:label="Extractor Url">
35
+ <data type="string" rngui:label="Url"/>
36
+ </element>
37
+ <element name="extractor_arg" rngui:label="Extractor Argument">
38
+ <data type="string" rngui:label="Path"/>
39
+ </element>
40
+ <element name="visualizer_url" rngui:label="Visualizer Url">
41
+ <data type="string" rngui:label="Url"/>
42
+ </element>
43
+ <element name="visualizer_config" rngui:label="Visualizer Config">
44
+ <data type="string" rngui:label="Url"/>
45
+ </element>
46
+ <element name="visualizer_params" rngui:header="Visualizer Arguments">
47
+ <zeroOrMore rngui:label="Create Argument Pair">
48
+ <element rngui:label='Name'>
49
+ <anyName/>
50
+ <data type="string" rngui:label="Value"/>
51
+ </element>
52
+ </zeroOrMore>
53
+ </element>
54
+ </element>
55
+ </zeroOrMore>
56
+ </element>
28
57
  </element>
29
58
  <element name="_timing" rngui:header="Timing">
30
59
  <element name="_timing_min" rngui:label='Min in m'>
@@ -25,6 +25,35 @@
25
25
  </element>
26
26
  </zeroOrMore>
27
27
  </element>
28
+ <element name="sensors" rngui:header="Sensors">
29
+ <zeroOrMore rngui:label="Add Sensor">
30
+ <element name="sensor">
31
+ <element name="name" rngui:label="Label">
32
+ <data type="string" rngui:label="Label"/>
33
+ </element>
34
+ <element name="extractor_url" rngui:label="Extractor Url">
35
+ <data type="string" rngui:label="Url"/>
36
+ </element>
37
+ <element name="extractor_arg" rngui:label="Extractor Argument">
38
+ <data type="string" rngui:label="Path"/>
39
+ </element>
40
+ <element name="visualizer_url" rngui:label="Visualizer Url">
41
+ <data type="string" rngui:label="Url"/>
42
+ </element>
43
+ <element name="visualizer_config" rngui:label="Visualizer Config">
44
+ <data type="string" rngui:label="Url"/>
45
+ </element>
46
+ <element name="visualizer_params" rngui:header="Visualizer Arguments">
47
+ <zeroOrMore rngui:label="Create Argument Pair">
48
+ <element rngui:label='Name'>
49
+ <anyName/>
50
+ <data type="string" rngui:label="Value"/>
51
+ </element>
52
+ </zeroOrMore>
53
+ </element>
54
+ </element>
55
+ </zeroOrMore>
56
+ </element>
28
57
  </element>
29
58
  <element name="finalize" rngui:header="Finalize" rngui:label="Code">
30
59
  <attribute name="output" rngui:label="Access Variable" rngui:default="result">
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "cpee"
3
- s.version = "1.4.8"
3
+ s.version = "1.4.10"
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"
@@ -226,7 +226,7 @@ module CPEE
226
226
 
227
227
  def finalize_if_finished
228
228
  if @instance.state == :finished
229
- @instance = nil
229
+ #@instance = nil
230
230
  end
231
231
  end
232
232
 
@@ -13,6 +13,7 @@
13
13
  # <http://www.gnu.org/licenses/>.
14
14
 
15
15
  require 'riddl/server'
16
+ require 'securerandom'
16
17
  require 'xml/smart'
17
18
  require 'base64'
18
19
  require 'uri'
@@ -77,31 +78,21 @@ module CPEE
77
78
  return ins
78
79
  end #}}}
79
80
  private :load_testset
80
- def handle_waiting(cpee,instance,behavior) #{{{
81
+ def handle_waiting(cpee,instance,behavior,selfurl,cblist) #{{{
81
82
  if behavior =~ /^wait/
82
83
  condition = behavior.match(/_([^_]+)_/)&.[](1) || 'finished'
83
- @headers << Riddl::Header.new('CPEE_CALLBACK','true')
84
+ @headers << Riddl::Header.new('CPEE-CALLBACK','true')
84
85
  cb = @h['CPEE_CALLBACK']
85
86
 
86
87
  if cb
88
+ cbk = SecureRandom.uuid
87
89
  srv = Riddl::Client.new(cpee, cpee + "?riddl-description")
88
90
  status, response = srv.resource("/#{instance}/notifications/subscriptions/").post [
91
+ Riddl::Parameter::Simple.new("url",File.join(selfurl,'callback',cbk)),
89
92
  Riddl::Parameter::Simple.new("topic","state"),
90
- Riddl::Parameter::Simple.new("events","change"),
93
+ Riddl::Parameter::Simple.new("events","change")
91
94
  ]
92
- key = response.first.value
93
-
94
- srv.resource("/#{instance}/notifications/subscriptions/#{key}/ws/").ws do |conn|
95
- conn.on :message do |msg|
96
- if JSON::parse(XML::Smart::string(msg.data).find('string(/event/notification)'))['state'] == condition
97
- conn.close
98
- Riddl::Client.new(cb).put [
99
- # TODO extract all dataelements from instance
100
- Riddl::Parameter::Simple.new('instance',instance)
101
- ]
102
- end
103
- end
104
- end
95
+ cblist[cbk] = cb, condition, instance
105
96
  end
106
97
  end
107
98
  end #}}}
@@ -135,6 +126,8 @@ module CPEE
135
126
 
136
127
  def response
137
128
  cpee = @a[0]
129
+ selfurl = @a[1]
130
+ cblist = @a[2]
138
131
  status, res = Riddl::Client.new(@p[2].value).get
139
132
  tdoc = if status >= 200 && status < 300
140
133
  res[0].value.read
@@ -145,8 +138,9 @@ module CPEE
145
138
  if (instance = load_testset(tdoc,cpee,@p[0].value)) == -1
146
139
  @status = 500
147
140
  else
141
+ @headers << Riddl::Header.new('CPEE-INSTANTIATION',File.join(cpee,instance))
148
142
  handle_data cpee, instance, @p[3]&.value
149
- handle_waiting cpee, instance, @p[1].value
143
+ handle_waiting cpee, instance, @p[1].value, selfurl, cblist
150
144
  handle_starting cpee, instance, @p[1].value
151
145
  return Riddl::Parameter::Simple.new("url",cpee + instance)
152
146
  end
@@ -160,6 +154,8 @@ module CPEE
160
154
  cpee = @a[0]
161
155
  behavior = @a[1] ? 'fork_ready' : @p[0].value
162
156
  data = @a[1] ? 0 : 1
157
+ selfurl = @a[2]
158
+ cblist = @a[3]
163
159
  tdoc = if @p[data].additional =~ /base64/
164
160
  Base64.decode64(@p[data].value.read)
165
161
  else
@@ -169,8 +165,9 @@ module CPEE
169
165
  if (instance = load_testset(tdoc,cpee)) == -1
170
166
  @status = 500
171
167
  else
168
+ @headers << Riddl::Header.new('CPEE-INSTANTIATION',File.join(cpee,instance))
172
169
  handle_data cpee, instance, @p[data+1]&.value
173
- handle_waiting cpee, instance, behavior
170
+ handle_waiting cpee, instance, behavior, selfurl, cblist
174
171
  handle_starting cpee, instance, behavior
175
172
  return Riddl::Parameter::Simple.new("url",cpee + instance)
176
173
  end
@@ -182,29 +179,55 @@ module CPEE
182
179
 
183
180
  def response
184
181
  cpee = @a[0]
182
+ selfurl = @a[1]
183
+ cblist = @a[2]
185
184
  instance = @p[1].value
186
185
 
187
186
  handle_data cpee, instance, @p[2]&.value
188
- handle_waiting cpee, instance, @p[0].value
187
+ handle_waiting cpee, instance, @p[0].value, selfurl, cblist
189
188
  handle_starting cpee, instance, @p[0].value
190
189
  return Riddl::Parameter::Simple.new("url",cpee + instance)
191
190
  end
192
191
  end #}}}
193
192
 
193
+ class ContinueTask < Riddl::Implementation #{{{
194
+ def response
195
+ cblist = @a[0]
196
+ topic = @p[1].value
197
+ event_name = @p[2].value
198
+ notification = JSON.parse(@p[3].value)
199
+
200
+ cb, condition, instance = cblist[@r.last]
201
+ if notification['state'] == condition
202
+ Riddl::Client.new(cb).put [
203
+ # TODO extract all dataelements from instance
204
+ Riddl::Parameter::Simple.new('instance',instance)
205
+ ]
206
+ end
207
+ end
208
+ end #}}}
209
+
194
210
  def self::implementation(opts)
195
211
  opts[:cpee] ||= 'http://localhost:9298/'
212
+ opts[:self] ||= "http#{opts[:secure] ? 's' : ''}://#{opts[:host]}:#{opts[:port]}/"
213
+ opts[:cblist] ||= {}
196
214
  Proc.new do
197
215
  on resource do
198
- run InstantiateXML, opts[:cpee],true if post 'xmlsimple'
216
+ run InstantiateXML, opts[:cpee], true if post 'xmlsimple'
199
217
  on resource 'xml' do
200
218
  run InstantiateXML, opts[:cpee], false if post 'xml'
201
219
  end
202
220
  on resource 'url' do
203
- run InstantiateUrl, opts[:cpee] if post 'url'
221
+ run InstantiateUrl, opts[:cpee], opts[:self], opts[:cblist] if post 'url'
204
222
  end
205
223
  on resource 'instance' do
206
224
  run HandleInstance, opts[:cpee] if post 'instance'
207
225
  end
226
+ on resource 'callback' do
227
+ on resource do
228
+ run ContinueTask, opts[:cblist] if post
229
+ end
230
+ end
208
231
  end
209
232
  end
210
233
  end