cpee 1.5.26 → 2.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/{FEATURES → FEATURES.md} +7 -6
- data/INSTALL.md +1 -0
- data/{README → README.md} +3 -3
- data/Rakefile +1 -0
- data/cockpit/index.html +7 -7
- data/cockpit/js/details.js +13 -14
- data/cockpit/js/instance.js +191 -284
- data/cockpit/js/parameters.js +13 -3
- data/cockpit/js/ui.js +2 -2
- data/cockpit/model.html +1 -0
- data/cockpit/rngs/attributes.rng +1 -1
- data/cockpit/rngs/dataelements.rng +1 -1
- data/cockpit/rngs/endpoints.rng +1 -1
- data/cockpit/templates.legacy/Async.xml +7 -7
- data/cockpit/templates.legacy/BCO.xml +7 -10
- data/cockpit/templates.legacy/BCS.xml +7 -10
- data/cockpit/templates.legacy/Centurio.xml +6 -6
- data/cockpit/templates.legacy/Concurrent.xml +6 -6
- data/cockpit/templates.legacy/Coopis Testset.xml +6 -6
- data/cockpit/templates.legacy/Endpoints and Data Manipulation.xml +6 -6
- data/cockpit/templates.legacy/ICSOC Testset.xml +6 -6
- data/cockpit/templates.legacy/Infinity.xml +3 -3
- data/cockpit/templates.legacy/Lego Boxer.xml +7 -7
- data/cockpit/templates.legacy/Lego Conveyor.xml +7 -7
- data/cockpit/templates.legacy/Lego Crane.xml +7 -7
- data/cockpit/templates.legacy/Lego Ejector.xml +7 -7
- data/cockpit/templates.legacy/Lego Full.xml +7 -7
- data/cockpit/templates.legacy/Lego Liddy.xml +7 -7
- data/cockpit/templates.legacy/Lego Plate.xml +7 -7
- data/cockpit/templates.legacy/Lego Transporter.xml +7 -7
- data/cockpit/templates.legacy/Lego_Part_1.xml +7 -7
- data/cockpit/templates.legacy/LgLinear.xml +6 -10
- data/cockpit/templates.legacy/Linear.xml +7 -7
- data/cockpit/templates.legacy/Log.xml +7 -7
- data/cockpit/templates.legacy/Mangler 1.xml +6 -6
- data/cockpit/templates.legacy/Mangler 2.xml +6 -6
- data/cockpit/templates.legacy/Manuel Labels.xml +7 -7
- data/cockpit/templates.legacy/Promise.xml +7 -7
- data/cockpit/templates.legacy/SOPROMO Test Sonification.xml +6 -6
- data/cockpit/templates.legacy/Subprocess.xml +56 -0
- data/cockpit/templates.legacy/Syncing P34 1.xml +8 -11
- data/cockpit/templates.legacy/Syncing P34 2.xml +8 -11
- data/cockpit/templates.legacy/Syncing P34 3.xml +8 -11
- data/cockpit/templates.legacy/Syncing P34.xml +8 -11
- data/cockpit/templates.legacy/TEST - Bad Loop.xml +6 -6
- data/cockpit/templates.legacy/TEST - Wrong Positions.xml +6 -6
- data/cockpit/templates.legacy/Take_5.xml +48 -0
- data/cockpit/templates.legacy/Update.xml +7 -7
- data/cockpit/templates.legacy/Worklist Parallel.xml +7 -7
- data/cockpit/templates.legacy/Worklist Test CPEE.xml +7 -7
- data/cockpit/templates.legacy/Worklist Test.xml +7 -7
- data/cockpit/templates.legacy/Worklist Test2.xml +7 -7
- data/cockpit/templates.legacy/convert_cpee2.rb +15 -0
- data/cockpit/templates.legacy/testsets.xml +1 -1
- data/cockpit/templates/BPM 2020 Manual Adjust.xml +18 -71
- data/cockpit/templates/BPM 2020 Solution Baseline.xml +17 -71
- data/cockpit/templates/BPM 2020 Solution NN.xml +25 -71
- data/cockpit/templates/BPM 2020 Solution View.xml +15 -71
- data/cockpit/templates/BPM 2020.xml +17 -6
- data/cockpit/templates/Coopis 2010.xml +7 -7
- data/cockpit/templates/IUPC arXiv:1104.3609 P34 1.xml +7 -10
- data/cockpit/templates/IUPC arXiv:1104.3609 P34 2.xml +7 -10
- data/cockpit/templates/IUPC arXiv:1104.3609 P34 3.xml +7 -10
- data/cockpit/templates/Worklist.xml +7 -7
- data/cockpit/templates/convert_cpee2.rb +15 -0
- data/cockpit/themes/compact/rngs/alternative.rng +25 -0
- data/cockpit/themes/compact/rngs/call.rng +17 -17
- data/cockpit/themes/compact/rngs/callmanipulate.rng +26 -26
- data/cockpit/themes/compact/rngs/choose.rng +14 -0
- data/cockpit/themes/compact/rngs/critical.rng +5 -0
- data/cockpit/themes/compact/rngs/escape.rng +1 -0
- data/cockpit/themes/compact/rngs/group.rng +3 -0
- data/cockpit/themes/compact/rngs/loop.rng +22 -0
- data/cockpit/themes/compact/rngs/manipulate.rng +9 -0
- data/cockpit/themes/compact/rngs/otherwise.rng +22 -0
- data/cockpit/themes/compact/rngs/parallel.rng +21 -0
- data/cockpit/themes/compact/rngs/parallel_branch.rng +8 -0
- data/cockpit/themes/compact/rngs/scripts.rng +10 -11
- data/cockpit/themes/compact/rngs/stop.rng +5 -0
- data/cockpit/themes/compact/rngs/terminate.rng +1 -0
- data/cockpit/themes/convert_cpee2.rb +8 -0
- data/cockpit/themes/default/rngs/alternative.rng +8 -8
- data/cockpit/themes/default/rngs/call.rng +84 -48
- data/cockpit/themes/default/rngs/callmanipulate.rng +103 -64
- data/cockpit/themes/default/rngs/choose.rng +5 -3
- data/cockpit/themes/default/rngs/critical.rng +2 -2
- data/cockpit/themes/default/rngs/escape.rng +1 -1
- data/cockpit/themes/default/rngs/group.rng +3 -3
- data/cockpit/themes/default/rngs/loop.rng +8 -8
- data/cockpit/themes/default/rngs/manipulate.rng +3 -3
- data/cockpit/themes/default/rngs/otherwise.rng +8 -8
- data/cockpit/themes/default/rngs/parallel.rng +14 -6
- data/cockpit/themes/default/rngs/parallel_branch.rng +2 -2
- data/cockpit/themes/default/rngs/scripts.rng +23 -0
- data/cockpit/themes/default/rngs/stop.rng +2 -2
- data/cockpit/themes/default/rngs/terminate.rng +1 -1
- data/cockpit/themes/extended/rngs/alternative.rng +25 -0
- data/cockpit/themes/extended/rngs/call.rng +17 -17
- data/cockpit/themes/extended/rngs/callmanipulate.rng +26 -26
- data/cockpit/themes/extended/rngs/choose.rng +14 -0
- data/cockpit/themes/extended/rngs/critical.rng +5 -0
- data/cockpit/themes/extended/rngs/escape.rng +1 -0
- data/cockpit/themes/extended/rngs/group.rng +3 -0
- data/cockpit/themes/extended/rngs/loop.rng +22 -0
- data/cockpit/themes/extended/rngs/manipulate.rng +9 -0
- data/cockpit/themes/extended/rngs/otherwise.rng +22 -0
- data/cockpit/themes/extended/rngs/parallel.rng +21 -0
- data/cockpit/themes/extended/rngs/parallel_branch.rng +8 -0
- data/cockpit/themes/extended/rngs/scripts.rng +10 -11
- data/cockpit/themes/extended/rngs/stop.rng +5 -0
- data/cockpit/themes/extended/rngs/terminate.rng +1 -0
- data/cockpit/themes/extended/theme.js +7 -6
- data/cockpit/themes/model/rngs/alternative.rng +1 -1
- data/cockpit/themes/model/rngs/call.rng +16 -16
- data/cockpit/themes/model/rngs/callmanipulate.rng +17 -17
- data/cockpit/themes/model/rngs/choose.rng +1 -1
- data/cockpit/themes/model/rngs/critical.rng +1 -1
- data/cockpit/themes/model/rngs/escape.rng +1 -1
- data/cockpit/themes/model/rngs/group.rng +1 -1
- data/cockpit/themes/model/rngs/loop.rng +1 -1
- data/cockpit/themes/model/rngs/manipulate.rng +1 -1
- data/cockpit/themes/model/rngs/otherwise.rng +1 -1
- data/cockpit/themes/model/rngs/parallel.rng +1 -1
- data/cockpit/themes/model/rngs/parallel_branch.rng +1 -1
- data/cockpit/themes/model/rngs/scripts.rng +3 -4
- data/cockpit/themes/model/rngs/stop.rng +1 -1
- data/cockpit/themes/model/rngs/terminate.rng +1 -1
- data/cockpit/themes/model/theme.js +7 -6
- data/cockpit/themes/packed/rngs/alternative.rng +25 -0
- data/cockpit/themes/packed/rngs/call.rng +17 -17
- data/cockpit/themes/packed/rngs/callmanipulate.rng +26 -26
- data/cockpit/themes/packed/rngs/choose.rng +14 -0
- data/cockpit/themes/packed/rngs/critical.rng +5 -0
- data/cockpit/themes/packed/rngs/escape.rng +1 -0
- data/cockpit/themes/packed/rngs/group.rng +3 -0
- data/cockpit/themes/packed/rngs/loop.rng +22 -0
- data/cockpit/themes/packed/rngs/manipulate.rng +9 -0
- data/cockpit/themes/packed/rngs/otherwise.rng +22 -0
- data/cockpit/themes/packed/rngs/parallel.rng +21 -0
- data/cockpit/themes/packed/rngs/parallel_branch.rng +8 -0
- data/cockpit/themes/packed/rngs/scripts.rng +10 -11
- data/cockpit/themes/packed/rngs/stop.rng +5 -0
- data/cockpit/themes/packed/rngs/terminate.rng +1 -0
- data/cockpit/themes/packed/theme.js +7 -6
- data/cockpit/themes/preset/rngs/alternative.rng +25 -0
- data/cockpit/themes/preset/rngs/call.rng +17 -17
- data/cockpit/themes/preset/rngs/callmanipulate.rng +26 -26
- data/cockpit/themes/preset/rngs/choose.rng +14 -0
- data/cockpit/themes/preset/rngs/critical.rng +5 -0
- data/cockpit/themes/preset/rngs/escape.rng +1 -0
- data/cockpit/themes/preset/rngs/group.rng +3 -0
- data/cockpit/themes/preset/rngs/loop.rng +22 -0
- data/cockpit/themes/preset/rngs/manipulate.rng +9 -0
- data/cockpit/themes/preset/rngs/otherwise.rng +22 -0
- data/cockpit/themes/preset/rngs/parallel.rng +21 -0
- data/cockpit/themes/preset/rngs/parallel_branch.rng +8 -0
- data/cockpit/themes/preset/rngs/scripts.rng +10 -11
- data/cockpit/themes/preset/rngs/stop.rng +5 -0
- data/cockpit/themes/preset/rngs/terminate.rng +1 -0
- data/cockpit/themes/preset/theme.js +7 -6
- data/cpee.gemspec +10 -11
- data/{log/topics.xml → lib/callbacks.xml} +16 -6
- data/lib/{engine → callbacks}/callbacks.rng +2 -8
- data/lib/cpee.xml +10 -4
- data/lib/cpee/attributes_helper.rb +27 -0
- data/lib/cpee/controller.rb +113 -596
- data/lib/cpee/implementation.rb +167 -191
- data/lib/cpee/implementation_callbacks.rb +77 -0
- data/lib/cpee/implementation_notifications.rb +189 -0
- data/lib/cpee/implementation_properties.rb +714 -0
- data/lib/cpee/{callback.rb → message.rb} +20 -18
- data/lib/cpee/persistence.rb +135 -0
- data/lib/cpee/statemachine.rb +20 -0
- data/lib/cpee/transform.rb +95 -0
- data/lib/engine.xml +1 -59
- data/lib/properties.xml +236 -0
- data/lib/properties/arbitrary.rng +26 -0
- data/lib/properties/attributes.rng +10 -0
- data/lib/properties/dataelements.rng +10 -0
- data/lib/properties/description.rng +8 -0
- data/lib/properties/dsl.rng +7 -0
- data/lib/properties/dslx.rng +8 -0
- data/lib/properties/endpoints.rng +10 -0
- data/lib/properties/handlerwrapper.rng +9 -0
- data/lib/properties/position.rng +15 -0
- data/lib/properties/positions.rng +10 -0
- data/lib/properties/properties.rng +29 -0
- data/lib/properties/set-properties.rng +25 -0
- data/lib/properties/set-some-properties.rng +45 -0
- data/lib/properties/simple.rng +8 -0
- data/lib/properties/state.rng +33 -0
- data/lib/properties/status.rng +12 -0
- data/lib/properties/t_attributes.rng +7 -0
- data/lib/properties/t_dataelements.rng +7 -0
- data/lib/properties/t_endpoints.rng +7 -0
- data/lib/properties/t_position.rng +7 -0
- data/lib/properties/t_positions.rng +7 -0
- data/lib/properties/t_simple.rng +7 -0
- data/lib/properties/t_status.rng +7 -0
- data/lib/properties/t_transformation.rng +7 -0
- data/lib/properties/transformation.rng +40 -0
- data/server/dev.rb +1 -0
- data/server/handlerwrappers/default.rb +40 -38
- data/server/resources/backend/README.md +17 -0
- data/server/resources/backend/instance.rb +23 -0
- data/server/resources/backend/instance.template +19 -0
- data/server/resources/backend/opts.yaml +6 -0
- data/server/resources/backend/run +33 -0
- data/server/resources/notifications/logging/subscription.xml +19 -0
- data/server/resources/properties.empty +38 -0
- data/server/resources/properties.init +11 -11
- data/server/resources/states.dot +19 -0
- data/server/resources/states.xml +49 -0
- data/server/resources/transformation_dslx.xsl +12 -3
- data/server/routing/end.rb +44 -0
- data/server/routing/forward-events.rb +59 -0
- data/server/routing/forward-votes.rb +108 -0
- data/server/routing/persist.rb +155 -0
- data/server/server.rb +1 -0
- data/tools/cpee +46 -15
- data/tools/instantiation/instantiation +0 -1
- data/tools/server/server.rb +0 -1
- metadata +78 -132
- data/INSTALL +0 -23
- data/cockpit/templates/convert_preset.rb +0 -32
- data/cockpit/templates/testsets.xml +0 -11
- data/cockpit/templates/transformations.xml +0 -4
- data/cockpit/themes/compact/rngs/alternative.rng +0 -1
- data/cockpit/themes/compact/rngs/choose.rng +0 -1
- data/cockpit/themes/compact/rngs/critical.rng +0 -1
- data/cockpit/themes/compact/rngs/escape.rng +0 -1
- data/cockpit/themes/compact/rngs/group.rng +0 -1
- data/cockpit/themes/compact/rngs/loop.rng +0 -1
- data/cockpit/themes/compact/rngs/manipulate.rng +0 -1
- data/cockpit/themes/compact/rngs/otherwise.rng +0 -1
- data/cockpit/themes/compact/rngs/parallel.rng +0 -1
- data/cockpit/themes/compact/rngs/parallel_branch.rng +0 -1
- data/cockpit/themes/compact/rngs/stop.rng +0 -1
- data/cockpit/themes/compact/rngs/terminate.rng +0 -1
- data/cockpit/themes/default/rngs/finalize.rng +0 -6
- data/cockpit/themes/default/rngs/update.rng +0 -6
- data/cockpit/themes/default/theme.js +0 -1286
- data/cockpit/themes/extended/rngs/alternative.rng +0 -1
- data/cockpit/themes/extended/rngs/choose.rng +0 -1
- data/cockpit/themes/extended/rngs/critical.rng +0 -1
- data/cockpit/themes/extended/rngs/escape.rng +0 -1
- data/cockpit/themes/extended/rngs/group.rng +0 -1
- data/cockpit/themes/extended/rngs/loop.rng +0 -1
- data/cockpit/themes/extended/rngs/manipulate.rng +0 -1
- data/cockpit/themes/extended/rngs/otherwise.rng +0 -1
- data/cockpit/themes/extended/rngs/parallel.rng +0 -1
- data/cockpit/themes/extended/rngs/parallel_branch.rng +0 -1
- data/cockpit/themes/extended/rngs/stop.rng +0 -1
- data/cockpit/themes/extended/rngs/terminate.rng +0 -1
- data/cockpit/themes/labels/rngs/alternative.rng +0 -25
- data/cockpit/themes/labels/rngs/call.rng +0 -81
- data/cockpit/themes/labels/rngs/callmanipulate.rng +0 -101
- data/cockpit/themes/labels/rngs/choose.rng +0 -12
- data/cockpit/themes/labels/rngs/critical.rng +0 -5
- data/cockpit/themes/labels/rngs/escape.rng +0 -1
- data/cockpit/themes/labels/rngs/finalize.rng +0 -6
- data/cockpit/themes/labels/rngs/group.rng +0 -3
- data/cockpit/themes/labels/rngs/loop.rng +0 -22
- data/cockpit/themes/labels/rngs/manipulate.rng +0 -9
- data/cockpit/themes/labels/rngs/otherwise.rng +0 -22
- data/cockpit/themes/labels/rngs/parallel.rng +0 -13
- data/cockpit/themes/labels/rngs/parallel_branch.rng +0 -8
- data/cockpit/themes/labels/rngs/stop.rng +0 -5
- data/cockpit/themes/labels/rngs/terminate.rng +0 -1
- data/cockpit/themes/labels/rngs/update.rng +0 -6
- data/cockpit/themes/labels/symbols/alternative.svg +0 -5
- data/cockpit/themes/labels/symbols/arrow.svg +0 -3
- data/cockpit/themes/labels/symbols/call.svg +0 -6
- data/cockpit/themes/labels/symbols/callmanipulate.svg +0 -8
- data/cockpit/themes/labels/symbols/choose.svg +0 -5
- data/cockpit/themes/labels/symbols/choose_exclusive.svg +0 -5
- data/cockpit/themes/labels/symbols/choose_inclusive.svg +0 -4
- data/cockpit/themes/labels/symbols/complex.svg +0 -8
- data/cockpit/themes/labels/symbols/critical.svg +0 -4
- data/cockpit/themes/labels/symbols/end.svg +0 -3
- data/cockpit/themes/labels/symbols/escape.svg +0 -5
- data/cockpit/themes/labels/symbols/event_end.svg +0 -3
- data/cockpit/themes/labels/symbols/loop.svg +0 -5
- data/cockpit/themes/labels/symbols/manipulate.svg +0 -4
- data/cockpit/themes/labels/symbols/otherwise.svg +0 -5
- data/cockpit/themes/labels/symbols/parallel.svg +0 -5
- data/cockpit/themes/labels/symbols/parallel_branch.svg +0 -5
- data/cockpit/themes/labels/symbols/parallel_branch_compact.svg +0 -4
- data/cockpit/themes/labels/symbols/parallel_branch_event.svg +0 -14
- data/cockpit/themes/labels/symbols/parallel_branch_normal.svg +0 -5
- data/cockpit/themes/labels/symbols/scripts.svg +0 -4
- data/cockpit/themes/labels/symbols/start.svg +0 -3
- data/cockpit/themes/labels/symbols/stop.svg +0 -5
- data/cockpit/themes/labels/symbols/terminate.svg +0 -4
- data/cockpit/themes/packed/rngs/alternative.rng +0 -1
- data/cockpit/themes/packed/rngs/choose.rng +0 -1
- data/cockpit/themes/packed/rngs/critical.rng +0 -1
- data/cockpit/themes/packed/rngs/escape.rng +0 -1
- data/cockpit/themes/packed/rngs/group.rng +0 -1
- data/cockpit/themes/packed/rngs/loop.rng +0 -1
- data/cockpit/themes/packed/rngs/manipulate.rng +0 -1
- data/cockpit/themes/packed/rngs/otherwise.rng +0 -1
- data/cockpit/themes/packed/rngs/parallel.rng +0 -1
- data/cockpit/themes/packed/rngs/parallel_branch.rng +0 -1
- data/cockpit/themes/packed/rngs/stop.rng +0 -1
- data/cockpit/themes/packed/rngs/terminate.rng +0 -1
- data/cockpit/themes/preset/rngs/alternative.rng +0 -1
- data/cockpit/themes/preset/rngs/choose.rng +0 -1
- data/cockpit/themes/preset/rngs/critical.rng +0 -1
- data/cockpit/themes/preset/rngs/escape.rng +0 -1
- data/cockpit/themes/preset/rngs/group.rng +0 -1
- data/cockpit/themes/preset/rngs/loop.rng +0 -1
- data/cockpit/themes/preset/rngs/manipulate.rng +0 -1
- data/cockpit/themes/preset/rngs/otherwise.rng +0 -1
- data/cockpit/themes/preset/rngs/parallel.rng +0 -1
- data/cockpit/themes/preset/rngs/parallel_branch.rng +0 -1
- data/cockpit/themes/preset/rngs/stop.rng +0 -1
- data/cockpit/themes/preset/rngs/terminate.rng +0 -1
- data/lib/cpee/empty_workflow.rb +0 -28
- data/lib/cpee/handler_notifications.rb +0 -47
- data/lib/cpee/handler_properties.rb +0 -50
- data/lib/cpee/instantiation.rb +0 -369
- data/lib/cpee/processtransformation/bpel/Repository/booking.bpel +0 -125
- data/lib/cpee/processtransformation/bpel/Repository/booking.wsdl +0 -72
- data/lib/cpee/processtransformation/bpel/Repository/booking/airline.wsdl +0 -71
- data/lib/cpee/processtransformation/bpel/Repository/booking/hotel.wsdl +0 -64
- data/lib/cpee/processtransformation/bpel/Repository/booking/report.wsdl +0 -71
- data/lib/cpee/processtransformation/bpel/bpel2wee.rb +0 -34
- data/lib/cpee/processtransformation/bpel/bpelserver.ru +0 -64
- data/lib/cpee/processtransformation/bpel/bpelserver.xml +0 -70
- data/lib/cpee/processtransformation/bpel/lib/BPEL_Transform.rb +0 -367
- data/lib/cpee/processtransformation/bpmn2.rb +0 -297
- data/lib/cpee/processtransformation/cpee.rb +0 -119
- data/lib/cpee/processtransformation/structures.rb +0 -465
- data/lib/cpee/processtransformation/target.rb +0 -50
- data/log/azure.rb +0 -10
- data/log/azure_logger.rb +0 -136
- data/log/chain.xml +0 -27
- data/log/elasticsearch.rb +0 -15
- data/log/elasticsearch_logging.rb +0 -377
- data/log/legacy/test_es.rb +0 -26
- data/log/legacy/test_split.rb +0 -211
- data/log/log.xml +0 -13
- data/log/non_tamp.rb +0 -156
- data/log/sic.rb +0 -64
- data/log/template.xes_xml +0 -23
- data/log/template.xes_yaml +0 -28
- data/log/trace.yaml +0 -17717
- data/log/trace_sic.yaml +0 -18343
- data/log/xes_xml.rb +0 -121
- data/log/xes_yaml.rb +0 -96
- data/server/handlerwrappers/soap.rb +0 -146
- data/server/resources/properties.schema.active +0 -139
- data/server/resources/properties.schema.finished +0 -139
- data/server/resources/properties.schema.inactive +0 -136
- data/test/callback.rb +0 -9
@@ -0,0 +1,17 @@
|
|
1
|
+
* run is copied into every instance.
|
2
|
+
* opts.yaml is written on each start.
|
3
|
+
* instance.rb is written on each start.
|
4
|
+
|
5
|
+
## What can you do to make it more robust?
|
6
|
+
|
7
|
+
Replace run with a program that actually compiles and runs instance.rb. Of
|
8
|
+
courses the transformation_* xslts would have to be adapted to create suitable
|
9
|
+
code. The compiled executable would just need to behave the same as the instance.rb,
|
10
|
+
dispersing all the same events through redis.
|
11
|
+
|
12
|
+
More suitable languages would be crystal and javascript, c++. Less suitable,
|
13
|
+
but doable, would be python, C. I.e., all languages that do not support multi-line
|
14
|
+
lambdas would produce much less readable code, thus the "Description" tab in
|
15
|
+
the cockpit would be garbage.
|
16
|
+
|
17
|
+
Definitely do tell me if you are interessted in doing something like this ;-)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Instance < WEEL
|
2
|
+
handlerwrapper DefaultHandlerWrapper
|
3
|
+
|
4
|
+
endpoint :timeout => "http://gruppe.wst.univie.ac.at/~mangler/services/timeout.php"
|
5
|
+
data :x => ''
|
6
|
+
# search Position.new(:a1,:after,nil)
|
7
|
+
|
8
|
+
control flow do
|
9
|
+
call :a1, :timeout, parameters: { :label => "Step 1", :method => :post, :arguments => [⭐(:name => :timeout, :value => ->{ "2" })] }, finalize: <<-END
|
10
|
+
p 'xxx1'
|
11
|
+
data.x += \"a1,\"
|
12
|
+
END
|
13
|
+
call :a2, :timeout, parameters: { :label => "Step 2", :method => :post, :arguments => [⭐(:name => :timeout, :value => ->{ "4" })] }, finalize: <<-END
|
14
|
+
p 'xxx2'
|
15
|
+
data.x += \"a2,\"
|
16
|
+
END
|
17
|
+
call :a3, :timeout, parameters: { :label => "Step 3", :method => :post, :arguments => [⭐(:name => :timeout, :value => ->{ "4" })] }, finalize: <<-END
|
18
|
+
p 'xxx3'
|
19
|
+
data.x += \"a3,\"
|
20
|
+
END
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class Instance < WEEL
|
2
|
+
handlerwrapper <%= handlerwrapper %>
|
3
|
+
|
4
|
+
<% for key, value in endpoints -%>
|
5
|
+
endpoint :<%= key %> => <%= CPEE::ValueHelper::parse(value).inspect %>
|
6
|
+
<% end -%>
|
7
|
+
|
8
|
+
<% for key, value in dataelements -%>
|
9
|
+
data :<%= key %> => <%= CPEE::ValueHelper::parse(value).inspect %>
|
10
|
+
<% end -%>
|
11
|
+
|
12
|
+
<% unless positions.nil? || positions.empty? -%>
|
13
|
+
search <% positions.each_with_index { |de,i| %><%= (i > 0 ? ', ' : '') %>Position.new(:<%= de[0] %>, :<%=de[1] %>, <%= de[2].nil? || de[2].strip.empty? ? 'nil' : '"' + de[2] + '"' %>)<% } %>
|
14
|
+
<% end -%>
|
15
|
+
|
16
|
+
control flow do
|
17
|
+
<%= dsl.strip.gsub(/\n/,"\n ") %>
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
require 'yaml'
|
3
|
+
opts = YAML::load_file(File.join(__dir__,'opts.yaml'))
|
4
|
+
opts[:pidf] = __FILE__ + '.pid'
|
5
|
+
opts[:pid] = Process.pid
|
6
|
+
if File.exist? '../../../lib/cpee/controller'
|
7
|
+
require_relative '../../../lib/cpee/controller'
|
8
|
+
else
|
9
|
+
require 'cpee/controller'
|
10
|
+
end
|
11
|
+
|
12
|
+
Dir[File.join(opts[:global_handlerwrappers],'*.rb')].each do |h|
|
13
|
+
require h
|
14
|
+
end unless opts[:global_handlerwrappers].nil? || opts[:global_handlerwrappers].strip == ''
|
15
|
+
Dir[File.join(opts[:handlerwrappers],'*.rb')].each do |h|
|
16
|
+
require h
|
17
|
+
end unless opts[:handlerwrappers].nil? || opts[:handlerwrappers].strip == ''
|
18
|
+
|
19
|
+
require_relative 'instance'
|
20
|
+
controller = CPEE::Controller.new(File.basename(__dir__).to_i, __dir__, opts)
|
21
|
+
controller.instance = Instance.new controller
|
22
|
+
|
23
|
+
File.write(opts[:pidf],opts[:pid])
|
24
|
+
|
25
|
+
%w{TERM HUP INT}.each do |sig|
|
26
|
+
Signal.trap(sig) do
|
27
|
+
puts "Caught #{sig}!"
|
28
|
+
controller.stop
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
controller.start
|
33
|
+
File.unlink(opts[:pidf])
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<subscription xmlns="http://riddl.org/ns/common-patterns/notifications-producer/2.0" url="http://localhost:9299/">
|
2
|
+
<topic id="activity">
|
3
|
+
<event>calling</event>
|
4
|
+
<event>receiving</event>
|
5
|
+
<event>done</event>
|
6
|
+
</topic>
|
7
|
+
<topic id="dataelements">
|
8
|
+
<event>change</event>
|
9
|
+
</topic>
|
10
|
+
<topic id="endpoints">
|
11
|
+
<event>change</event>
|
12
|
+
</topic>
|
13
|
+
<topic id="attributes">
|
14
|
+
<event>change</event>
|
15
|
+
</topic>
|
16
|
+
<topic id="task">
|
17
|
+
<event>instantiation</event>
|
18
|
+
</topic>
|
19
|
+
</subscription>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<!--
|
3
|
+
This file is part of CPEE.
|
4
|
+
|
5
|
+
CPEE is free software: you can redistribute it and/or modify it under the
|
6
|
+
terms of the GNU General Public License as published by the Free Software
|
7
|
+
Foundation, either version 3 of the License, or (at your option) any later
|
8
|
+
version.
|
9
|
+
|
10
|
+
CPEE is distributed in the hope that it will be useful, but WITHOUT ANY
|
11
|
+
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
12
|
+
PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU General Public License along with
|
15
|
+
CPEE (file COPYING in the main directory). If not, see
|
16
|
+
<http://www.gnu.org/licenses/>.
|
17
|
+
-->
|
18
|
+
|
19
|
+
<properties xmlns="http://cpee.org/ns/properties/2.0">
|
20
|
+
<state changed="1970-01-01T00:00:00+00:00">ready</state>
|
21
|
+
<status>
|
22
|
+
<id>0</id>
|
23
|
+
<message>undefined</message>
|
24
|
+
</status>
|
25
|
+
<handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
|
26
|
+
<positions/>
|
27
|
+
<dataelements/>
|
28
|
+
<endpoints/>
|
29
|
+
<attributes/>
|
30
|
+
<dsl/>
|
31
|
+
<dslx/>
|
32
|
+
<description/>
|
33
|
+
<transformation>
|
34
|
+
<description type='copy'/>
|
35
|
+
<dataelements type='none'/>
|
36
|
+
<endpoints type='none'/>
|
37
|
+
</transformation>
|
38
|
+
</properties>
|
@@ -16,27 +16,27 @@
|
|
16
16
|
<http://www.gnu.org/licenses/>.
|
17
17
|
-->
|
18
18
|
|
19
|
-
<properties xmlns="http://
|
20
|
-
<
|
21
|
-
|
22
|
-
<
|
23
|
-
<
|
24
|
-
</
|
25
|
-
<state>ready</state>
|
19
|
+
<properties xmlns="http://cpee.org/ns/properties/2.0">
|
20
|
+
<state changed="1970-01-01T00:00:00+00:00">ready</state>
|
21
|
+
<status>
|
22
|
+
<id>0</id>
|
23
|
+
<message>undefined</message>
|
24
|
+
</status>
|
26
25
|
<handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
|
27
26
|
<positions/>
|
28
27
|
<dataelements/>
|
29
28
|
<endpoints>
|
30
29
|
<timeout>http://gruppe.wst.univie.ac.at/~mangler/services/timeout.php</timeout>
|
31
30
|
</endpoints>
|
31
|
+
<attributes>
|
32
|
+
<info/>
|
33
|
+
<modeltype>CPEE</modeltype>
|
34
|
+
<theme>preset</theme>
|
35
|
+
</attributes>
|
32
36
|
<dsl/>
|
33
37
|
<dslx>
|
34
38
|
<description xmlns="http://cpee.org/ns/description/1.0"/>
|
35
39
|
</dslx>
|
36
|
-
<status>
|
37
|
-
<id>0</id>
|
38
|
-
<message>undefined</message>
|
39
|
-
</status>
|
40
40
|
<description>
|
41
41
|
<description xmlns="http://cpee.org/ns/description/1.0"/>
|
42
42
|
</description>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
digraph States {
|
2
|
+
ready -> running;
|
3
|
+
ready -> simulating;
|
4
|
+
ready -> replaying;
|
5
|
+
ready -> abandoned;
|
6
|
+
running -> stopping;
|
7
|
+
stopped -> running;
|
8
|
+
stopped -> simulating;
|
9
|
+
stopped -> replaying;
|
10
|
+
stopped -> abandoned;
|
11
|
+
|
12
|
+
running -> finishing;
|
13
|
+
simulating -> ready;
|
14
|
+
simulating -> stopped;
|
15
|
+
replaying -> stopping;
|
16
|
+
replaying -> finishing;
|
17
|
+
finishing -> finished;
|
18
|
+
stopping -> stopped;
|
19
|
+
}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
<states>
|
2
|
+
<!-- final states are "abandoned" and "finished" (no further observable or setable states) -->
|
3
|
+
<!-- children of setable and observable are source states, their respective children are possible target states -->
|
4
|
+
|
5
|
+
<setable>
|
6
|
+
<!-- the following states change through external input -->
|
7
|
+
<ready><!-- in this state you can set the following four states -->
|
8
|
+
<ready/>
|
9
|
+
<running/>
|
10
|
+
<simulating/>
|
11
|
+
<replaying/>
|
12
|
+
<abandoned/>
|
13
|
+
</ready>
|
14
|
+
<running><!-- in this state you can set the following state -->
|
15
|
+
<stopping/>
|
16
|
+
</running>
|
17
|
+
<stopped><!-- in this state you can set the following four states -->
|
18
|
+
<running/>
|
19
|
+
<simulating/>
|
20
|
+
<replaying/>
|
21
|
+
<abandoned/>
|
22
|
+
<stopped/>
|
23
|
+
</stopped>
|
24
|
+
</setable>
|
25
|
+
|
26
|
+
<observable>
|
27
|
+
<!-- the following states change through internal mechanisms -->
|
28
|
+
<running>
|
29
|
+
<stopping/>
|
30
|
+
<finishing/>
|
31
|
+
</running>
|
32
|
+
<simulating>
|
33
|
+
<ready/>
|
34
|
+
<stopped/>
|
35
|
+
</simulating>
|
36
|
+
<replaying>
|
37
|
+
<stopping/>
|
38
|
+
<finishing/>
|
39
|
+
</replaying>
|
40
|
+
<finishing>
|
41
|
+
<finished/>
|
42
|
+
</finishing>
|
43
|
+
<stopping>
|
44
|
+
<stopped/>
|
45
|
+
</stopping>
|
46
|
+
<abandoned/>
|
47
|
+
<finished/>
|
48
|
+
</observable>
|
49
|
+
</states>
|
@@ -507,11 +507,11 @@
|
|
507
507
|
<xsl:text>nil</xsl:text>
|
508
508
|
</xsl:when>
|
509
509
|
<xsl:when test="child::node()[not(self::text())]">
|
510
|
-
<!-- FUUUU, there is probably much more TODO -->
|
510
|
+
<!-- FUUUU, there is probably much more TODO. Updated Matthias und Juergen, we tested for ing-opcua/execute -->
|
511
511
|
<xsl:choose>
|
512
|
-
<xsl:when test="child
|
512
|
+
<xsl:when test="child::* and name(child::*)=concat(name(.),'_item') and count(child::*[not(name()=name(../child::*[1]))])=0">
|
513
513
|
<xsl:text>"[ </xsl:text>
|
514
|
-
<xsl:apply-templates select="*" mode="
|
514
|
+
<xsl:apply-templates select="*" mode="JSONArrayItem"/>
|
515
515
|
<xsl:text>]"</xsl:text>
|
516
516
|
</xsl:when>
|
517
517
|
<xsl:otherwise>
|
@@ -655,6 +655,15 @@
|
|
655
655
|
<xsl:otherwise><xsl:text> </xsl:text></xsl:otherwise>
|
656
656
|
</xsl:choose>
|
657
657
|
</xsl:template>
|
658
|
+
<xsl:template match="*" mode="JSONArrayItem">
|
659
|
+
<xsl:call-template name="JSONProperties">
|
660
|
+
<xsl:with-param name="parent" select="'Yes'"></xsl:with-param>
|
661
|
+
</xsl:call-template>
|
662
|
+
<xsl:choose>
|
663
|
+
<xsl:when test="following-sibling::*">, </xsl:when>
|
664
|
+
<xsl:otherwise><xsl:text> </xsl:text></xsl:otherwise>
|
665
|
+
</xsl:choose>
|
666
|
+
</xsl:template>
|
658
667
|
|
659
668
|
<!-- JSON Object Properties -->
|
660
669
|
<xsl:template name="JSONProperties">
|
@@ -0,0 +1,44 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
#
|
3
|
+
# This file is part of CPEE.
|
4
|
+
#
|
5
|
+
# CPEE is free software: you can redistribute it and/or modify it under the terms
|
6
|
+
# of the GNU General Public License as published by the Free Software Foundation,
|
7
|
+
# either version 3 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# CPEE is distributed in the hope that it will be useful, but WITHOUT ANY
|
10
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
11
|
+
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License along with
|
14
|
+
# CPEE (file COPYING in the main directory). If not, see
|
15
|
+
# <http://www.gnu.org/licenses/>.
|
16
|
+
|
17
|
+
require 'json'
|
18
|
+
require 'redis'
|
19
|
+
require 'daemonite'
|
20
|
+
|
21
|
+
Daemonite.new do |opts|
|
22
|
+
redis = Redis.new(path: "/tmp/redis.sock", db: 3)
|
23
|
+
pubsubredis = Redis.new(path: "/tmp/redis.sock", db: 3)
|
24
|
+
|
25
|
+
run do
|
26
|
+
pubsubredis.psubscribe('callback-end:*') do |on|
|
27
|
+
on.pmessage do |pat, what, message|
|
28
|
+
_, key = what.split(':')
|
29
|
+
index = message.index(' ')
|
30
|
+
instance = message[0...index]
|
31
|
+
redis.multi do |multi|
|
32
|
+
multi.srem("instance:#{instance}/callbacks",key)
|
33
|
+
multi.del("instance:#{instance}/callback/#{key}/uuid")
|
34
|
+
multi.del("instance:#{instance}/callback/#{key}/label")
|
35
|
+
multi.del("instance:#{instance}/callback/#{key}/position")
|
36
|
+
multi.del("instance:#{instance}/callback/#{key}/type")
|
37
|
+
end
|
38
|
+
rescue => e
|
39
|
+
puts e.message
|
40
|
+
puts e.backtrace
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end.go!
|
@@ -0,0 +1,59 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
#
|
3
|
+
# This file is part of CPEE.
|
4
|
+
#
|
5
|
+
# CPEE is free software: you can redistribute it and/or modify it under the terms
|
6
|
+
# of the GNU General Public License as published by the Free Software Foundation,
|
7
|
+
# either version 3 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# CPEE is distributed in the hope that it will be useful, but WITHOUT ANY
|
10
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
11
|
+
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License along with
|
14
|
+
# CPEE (file COPYING in the main directory). If not, see
|
15
|
+
# <http://www.gnu.org/licenses/>.
|
16
|
+
|
17
|
+
require 'redis'
|
18
|
+
require 'daemonite'
|
19
|
+
require 'riddl/client'
|
20
|
+
|
21
|
+
Daemonite.new do |opts|
|
22
|
+
redis = Redis.new(path: "/tmp/redis.sock", db: 3)
|
23
|
+
pubsubredis = Redis.new(path: "/tmp/redis.sock", db: 3)
|
24
|
+
|
25
|
+
run do
|
26
|
+
pubsubredis.psubscribe('event:*') do |on|
|
27
|
+
on.pmessage do |pat, what, message|
|
28
|
+
index = message.index(' ')
|
29
|
+
mess = message[index+1..-1]
|
30
|
+
instance = message[0...index]
|
31
|
+
type = pat[0..-3]
|
32
|
+
event = what[(type.length+1)..-1]
|
33
|
+
topic = ::File::dirname(event)
|
34
|
+
name = ::File::basename(event)
|
35
|
+
long = File.join(topic,type,name)
|
36
|
+
redis.smembers("instance:#{instance}/handlers").each do |key|
|
37
|
+
if redis.smembers("instance:#{instance}/handlers/#{key}").include? long
|
38
|
+
url = redis.get("instance:#{instance}/handlers/#{key}/url")
|
39
|
+
if url.nil? || url == ""
|
40
|
+
redis.publish("forward:#{instance}/#{key}",mess)
|
41
|
+
else
|
42
|
+
client = Riddl::Client.new(url,'http://riddl.org/ns/common-patterns/notifications-consumer/2.0/consumer.xml')
|
43
|
+
client.post [
|
44
|
+
Riddl::Parameter::Simple::new('type',type),
|
45
|
+
Riddl::Parameter::Simple::new('topic',topic),
|
46
|
+
Riddl::Parameter::Simple::new('event',name),
|
47
|
+
Riddl::Parameter::Complex::new('notification','application/json',mess)
|
48
|
+
]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
rescue => e
|
53
|
+
puts e.message
|
54
|
+
puts e.backtrace
|
55
|
+
p '-----------------'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end.go!
|
@@ -0,0 +1,108 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
#
|
3
|
+
# This file is part of CPEE.
|
4
|
+
#
|
5
|
+
# CPEE is free software: you can redistribute it and/or modify it under the terms
|
6
|
+
# of the GNU General Public License as published by the Free Software Foundation,
|
7
|
+
# either version 3 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# CPEE is distributed in the hope that it will be useful, but WITHOUT ANY
|
10
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
11
|
+
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License along with
|
14
|
+
# CPEE (file COPYING in the main directory). If not, see
|
15
|
+
# <http://www.gnu.org/licenses/>.
|
16
|
+
|
17
|
+
require 'redis'
|
18
|
+
require 'daemonite'
|
19
|
+
require 'riddl/client'
|
20
|
+
require 'json'
|
21
|
+
require_relative '../../lib/cpee/message'
|
22
|
+
|
23
|
+
def persist_handler(instance,key,mess,redis) #{{{
|
24
|
+
redis.multi do |multi|
|
25
|
+
multi.sadd("instance:#{instance}/callbacks",key)
|
26
|
+
multi.set("instance:#{instance}/callback/#{key}/uuid",mess.dig('content','activity_uuid'))
|
27
|
+
multi.set("instance:#{instance}/callback/#{key}/label",mess.dig('content','label'))
|
28
|
+
multi.set("instance:#{instance}/callback/#{key}/position",mess.dig('content','activity'))
|
29
|
+
multi.set("instance:#{instance}/callback/#{key}/type",'vote')
|
30
|
+
end
|
31
|
+
end #}}}
|
32
|
+
|
33
|
+
def send_response(instance,key,url,value,redis) #{{{
|
34
|
+
CPEE::Message::send(
|
35
|
+
:'vote-response',
|
36
|
+
key,
|
37
|
+
url,
|
38
|
+
instance,
|
39
|
+
{},
|
40
|
+
{},
|
41
|
+
value,
|
42
|
+
redis
|
43
|
+
)
|
44
|
+
end #}}}
|
45
|
+
|
46
|
+
Daemonite.new do |opts|
|
47
|
+
redis = Redis.new(path: "/tmp/redis.sock", db: 3)
|
48
|
+
pubsubredis = Redis.new(path: "/tmp/redis.sock", db: 3)
|
49
|
+
|
50
|
+
run do
|
51
|
+
pubsubredis.psubscribe('vote:*') do |on|
|
52
|
+
on.pmessage do |pat, what, message|
|
53
|
+
index = message.index(' ')
|
54
|
+
mess = message[index+1..-1]
|
55
|
+
|
56
|
+
instance = message[0...index]
|
57
|
+
type = pat[0..-3]
|
58
|
+
event = what[(type.length+1)..-1]
|
59
|
+
topic = ::File::dirname(event)
|
60
|
+
name = ::File::basename(event)
|
61
|
+
long = File.join(topic,type,name)
|
62
|
+
|
63
|
+
redis.smembers("instance:#{instance}/handlers").each do |subscription_key|
|
64
|
+
if redis.smembers("instance:#{instance}/handlers/#{subscription_key}").include? long
|
65
|
+
m = JSON.parse(mess)
|
66
|
+
callback_key = m.dig('content','key')
|
67
|
+
url = redis.get("instance:#{instance}/handlers/#{subscription_key}/url")
|
68
|
+
|
69
|
+
if url.nil? || url == ""
|
70
|
+
persist_handler instance, callback_key, m, redis
|
71
|
+
redis.publish("forward:#{instance}/#{subscription_key}",mess)
|
72
|
+
else
|
73
|
+
client = Riddl::Client.new(url,'http://riddl.org/ns/common-patterns/notifications-consumer/2.0/consumer.xml')
|
74
|
+
callback = m['instance-url'] + '/callbacks/' + subscription_key
|
75
|
+
status, result, headers = (client.post [
|
76
|
+
Riddl::Header.new("CPEE-BASE",m['cpee']),
|
77
|
+
Riddl::Header.new("CPEE-INSTANCE",m['instance']),
|
78
|
+
Riddl::Header.new("CPEE-INSTANCE-URL",m['instance-url']),
|
79
|
+
Riddl::Header.new("CPEE-INSTANCE-UUID",m['instance-uuid']),
|
80
|
+
Riddl::Header.new("CPEE-CALLBACK",callback),
|
81
|
+
Riddl::Header.new("CPEE-CALLBACK-ID",subscription_key),
|
82
|
+
Riddl::Parameter::Simple::new('type',type),
|
83
|
+
Riddl::Parameter::Simple::new('topic',topic),
|
84
|
+
Riddl::Parameter::Simple::new('vote',name),
|
85
|
+
Riddl::Parameter::Simple::new('callback',callback),
|
86
|
+
Riddl::Parameter::Complex::new('notification','application/json',mess)
|
87
|
+
] rescue [ 0, [], []])
|
88
|
+
if status >= 200 && status < 300
|
89
|
+
val = result[0].value.read
|
90
|
+
if (headers["CPEE_CALLBACK"] && headers["CPEE_CALLBACK"] == 'true') || val == 'callback'
|
91
|
+
persist_handler instance, callback_key, m, redis
|
92
|
+
else # they may send true or false
|
93
|
+
send_response instance, callback_key, m['cpee'], val, redis
|
94
|
+
end
|
95
|
+
else
|
96
|
+
send_response instance, callback_key, m['cpee'], true, redis
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
rescue => e
|
102
|
+
puts e.message
|
103
|
+
puts e.backtrace
|
104
|
+
p '-----------------'
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end.go!
|