cpee 1.4.8 → 1.4.10

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