pione 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (270) hide show
  1. data/.gitignore +4 -3
  2. data/.simplecov +7 -0
  3. data/.travis.yml +8 -0
  4. data/Gemfile +3 -0
  5. data/History.txt +13 -0
  6. data/README.md +2 -0
  7. data/Rakefile +16 -6
  8. data/bin/pione-val +5 -0
  9. data/example/AbstractRule/package.yml +1 -0
  10. data/example/HelloWorld/package.yml +2 -0
  11. data/example/HelloWorld/scenario/scenario.yml +2 -0
  12. data/example/LoopByTouch/LoopByTouch.pione +28 -0
  13. data/example/LoopByTouch/package.yml +1 -0
  14. data/example/MakePair/package.yml +2 -0
  15. data/example/MakePair/{data → scenario/input}/1.i +0 -0
  16. data/example/MakePair/{data → scenario/input}/2.i +0 -0
  17. data/example/MakePair/{data → scenario/input}/3.i +0 -0
  18. data/example/MakePair/{data → scenario/input}/4.i +0 -0
  19. data/example/MakePair/{data → scenario/input}/5.i +0 -0
  20. data/example/MakePair/scenario/scenario.yml +1 -0
  21. data/example/ScoreAggregation/ScoreAggregation.pione +122 -0
  22. data/example/ScoreAggregation/bin/apply-template.rb +10 -0
  23. data/example/ScoreAggregation/bin/histgram-graph.sh +18 -0
  24. data/example/ScoreAggregation/bin/mean-summary.rb +10 -0
  25. data/example/ScoreAggregation/bin/personal-bar-graph.sh +18 -0
  26. data/example/ScoreAggregation/bin/personal-pre-statistics.rb +37 -0
  27. data/example/ScoreAggregation/bin/total-mean.rb +10 -0
  28. data/example/ScoreAggregation/bin/total-statistics.rb +43 -0
  29. data/example/ScoreAggregation/generate-data.rb +63 -0
  30. data/example/ScoreAggregation/package.yml +1 -0
  31. data/example/ScoreAggregation/scenario/case1/input/A.score +15 -0
  32. data/example/ScoreAggregation/scenario/case1/input/B.score +15 -0
  33. data/example/ScoreAggregation/scenario/case1/input/C.score +15 -0
  34. data/example/ScoreAggregation/scenario/case1/input/D.score +15 -0
  35. data/example/ScoreAggregation/scenario/case1/input/E.score +15 -0
  36. data/example/ScoreAggregation/scenario/case1/input/F.score +15 -0
  37. data/example/ScoreAggregation/scenario/case1/input/G.score +15 -0
  38. data/example/ScoreAggregation/scenario/case1/input/H.score +15 -0
  39. data/example/ScoreAggregation/scenario/case1/input/I.score +15 -0
  40. data/example/ScoreAggregation/scenario/case1/input/J.score +15 -0
  41. data/example/ScoreAggregation/scenario/case1/input/K.score +15 -0
  42. data/example/ScoreAggregation/scenario/case1/input/L.score +15 -0
  43. data/example/ScoreAggregation/scenario/case1/input/M.score +15 -0
  44. data/example/ScoreAggregation/scenario/case1/input/N.score +15 -0
  45. data/example/ScoreAggregation/scenario/case1/input/O.score +15 -0
  46. data/example/ScoreAggregation/scenario/case1/input/P.score +15 -0
  47. data/example/ScoreAggregation/scenario/case1/input/Q.score +15 -0
  48. data/example/ScoreAggregation/scenario/case1/input/R.score +15 -0
  49. data/example/ScoreAggregation/scenario/case1/input/S.score +15 -0
  50. data/example/ScoreAggregation/scenario/case1/input/T.score +15 -0
  51. data/example/ScoreAggregation/scenario/case1/input/U.score +15 -0
  52. data/example/ScoreAggregation/scenario/case1/input/V.score +15 -0
  53. data/example/ScoreAggregation/scenario/case1/input/W.score +15 -0
  54. data/example/ScoreAggregation/scenario/case1/input/X.score +15 -0
  55. data/example/ScoreAggregation/scenario/case1/input/Y.score +15 -0
  56. data/example/ScoreAggregation/scenario/case1/input/Z.score +15 -0
  57. data/example/ScoreAggregation/scenario/case1/input/stat-template.erb +24 -0
  58. data/example/ScoreAggregation/scenario/case1/scenario.yml +3 -0
  59. data/example/{SequentialProcess/SequentialProcess.pione → SerialProcessing/SerialProcessing.pione} +0 -0
  60. data/example/SerialProcessing/package.yml +1 -0
  61. data/example/WorkflowPatterns/01_Sequence/Sequence.pione +21 -0
  62. data/example/WorkflowPatterns/02_PrallelSplit/ParallelSplit.pione +29 -0
  63. data/example/WorkflowPatterns/03_Synchronization/Synchronization.pione +30 -0
  64. data/example/WorkflowPatterns/04_ExclusiveChoice/ExclusiveChoice.pione +44 -0
  65. data/example/WorkflowPatterns/05_SimpleMerge/SimpleMerge.pione +44 -0
  66. data/example/WorkflowPatterns/06_MultiChoice/MultiChoice.pione +48 -0
  67. data/example/WorkflowPatterns/07_StructuredSynchronizingMerge/StructuredSynchronizingMerge.pione +71 -0
  68. data/example/WorkflowPatterns/08_MultiMerge/MultiMerge.pione +44 -0
  69. data/example/WorkflowPatterns/11_ImplicitTermination/ImplicitTermination.pione +29 -0
  70. data/example/WorkflowPatterns/12_MultipleInstancesWithoutSynchronization/MultipleInstancesWithoutSynchronization.pione +29 -0
  71. data/example/WorkflowPatterns/13_MultipleInstancesWithDesignTimeKnowledge/MultipleInstancesWithDesignTimeKnowledge.pione +28 -0
  72. data/example/WorkflowPatterns/14_MultipleInstancesWithRunTimeKnowledge/MultipleInstancesWithRunTimeKnowledge.pione +33 -0
  73. data/example/WorkflowPatterns/33_GeneralizedANDJoin/GeneralizedANDJoin.pione +21 -0
  74. data/example/WorkflowPatterns/37_LocalSynchronizingMerge/LocalSynchronizingMerge.pione +101 -0
  75. data/example/WorkflowPatterns/41_ThreadMerge/ThreadMerge.pione +43 -0
  76. data/example/WorkflowPatterns/42_ThreadSplit/ThreadSplit.pione +16 -0
  77. data/lib/pione.rb +23 -47
  78. data/lib/pione/agent/broker.rb +1 -1
  79. data/lib/pione/agent/input-generator.rb +1 -1
  80. data/lib/pione/agent/logger.rb +62 -49
  81. data/lib/pione/agent/messenger.rb +38 -0
  82. data/lib/pione/agent/rule-provider.rb +3 -3
  83. data/lib/pione/agent/task-worker.rb +14 -2
  84. data/lib/pione/agent/tuple-space-client.rb +1 -1
  85. data/lib/pione/agent/tuple-space-server-client-life-checker.rb +5 -3
  86. data/lib/pione/command.rb +2 -0
  87. data/lib/pione/command/basic-command.rb +1 -1
  88. data/lib/pione/command/pione-client.rb +57 -16
  89. data/lib/pione/command/pione-log.rb +5 -5
  90. data/lib/pione/command/pione-syntax-checker.rb +22 -7
  91. data/lib/pione/command/pione-task-worker.rb +36 -19
  92. data/lib/pione/command/pione-tuple-space-viewer.rb +3 -3
  93. data/lib/pione/command/pione-val.rb +40 -0
  94. data/lib/pione/component.rb +8 -0
  95. data/lib/pione/{system → component}/document.rb +13 -11
  96. data/lib/pione/component/package.rb +269 -0
  97. data/lib/pione/component/rule.rb +206 -0
  98. data/lib/pione/location/basic-location.rb +49 -7
  99. data/lib/pione/location/ftp-location.rb +19 -6
  100. data/lib/pione/location/local-location.rb +15 -6
  101. data/lib/pione/log.rb +4 -1
  102. data/lib/pione/log/{domain-info.rb → domain-log.rb} +23 -11
  103. data/lib/pione/{util/console-message.rb → log/message-log.rb} +16 -15
  104. data/lib/pione/log/process-log.rb +35 -86
  105. data/lib/pione/log/process-record.rb +24 -11
  106. data/lib/pione/log/system-log.rb +107 -0
  107. data/lib/pione/log/xes-log.rb +54 -48
  108. data/lib/pione/model.rb +1 -3
  109. data/lib/pione/model/assignment.rb +1 -0
  110. data/lib/pione/model/basic-model.rb +31 -15
  111. data/lib/pione/model/block.rb +1 -1
  112. data/lib/pione/model/boolean.rb +10 -23
  113. data/lib/pione/model/constraints.rb +12 -0
  114. data/lib/pione/model/data-expr.rb +31 -36
  115. data/lib/pione/model/feature-expr.rb +6 -23
  116. data/lib/pione/model/float.rb +29 -18
  117. data/lib/pione/model/integer.rb +44 -56
  118. data/lib/pione/model/keyed-sequence.rb +11 -4
  119. data/lib/pione/model/message.rb +4 -4
  120. data/lib/pione/model/ordinal-sequence.rb +12 -14
  121. data/lib/pione/model/package-expr.rb +53 -0
  122. data/lib/pione/model/parameters.rb +12 -11
  123. data/lib/pione/model/pione-method.rb +2 -2
  124. data/lib/pione/model/rule-expr.rb +30 -52
  125. data/lib/pione/model/sequence.rb +26 -26
  126. data/lib/pione/model/string.rb +13 -54
  127. data/lib/pione/model/ticket-expr.rb +12 -53
  128. data/lib/pione/model/type.rb +7 -1
  129. data/lib/pione/model/variable-table.rb +5 -4
  130. data/lib/pione/model/variable.rb +0 -5
  131. data/lib/pione/option/common-option.rb +2 -1
  132. data/lib/pione/option/task-worker-owner-option.rb +1 -1
  133. data/lib/pione/patch/drb-patch.rb +1 -1
  134. data/lib/pione/patch/em-ftpd-patch.rb +7 -0
  135. data/lib/pione/patch/rinda-patch.rb +53 -0
  136. data/lib/pione/patch/uri-patch.rb +5 -0
  137. data/lib/pione/relay/relay-socket.rb +2 -2
  138. data/lib/pione/rule-handler/action-handler.rb +71 -64
  139. data/lib/pione/rule-handler/basic-handler.rb +50 -32
  140. data/lib/pione/rule-handler/flow-handler.rb +51 -34
  141. data/lib/pione/rule-handler/update-criteria.rb +43 -20
  142. data/lib/pione/system.rb +13 -0
  143. data/lib/pione/system/domain-info.rb +34 -0
  144. data/lib/pione/system/global.rb +8 -1
  145. data/lib/pione/system/object.rb +1 -1
  146. data/lib/pione/transformer/expr-transformer.rb +3 -3
  147. data/lib/pione/transformer/literal-transformer.rb +3 -3
  148. data/lib/pione/transformer/rule-definition-transformer.rb +11 -9
  149. data/lib/pione/tuple-space/tuple-space-server-interface.rb +19 -1
  150. data/lib/pione/tuple-space/tuple-space-server.rb +9 -2
  151. data/lib/pione/tuple.rb +30 -0
  152. data/lib/pione/tuple/data-null-tuple.rb +14 -0
  153. data/lib/pione/tuple/message-tuple.rb +7 -0
  154. data/lib/pione/tuple/process-log-tuple.rb +13 -0
  155. data/lib/pione/tuple/touch-tuple.rb +14 -0
  156. data/lib/pione/uri-scheme/myftp-scheme.rb +45 -0
  157. data/lib/pione/util.rb +18 -0
  158. data/lib/pione/util/cpu.rb +20 -0
  159. data/lib/pione/util/error-report.rb +9 -1
  160. data/lib/pione/util/evaluatable.rb +47 -0
  161. data/lib/pione/util/ftp-server.rb +468 -0
  162. data/lib/pione/util/id.rb +39 -0
  163. data/lib/pione/util/indentation.rb +19 -0
  164. data/lib/pione/util/ip-address.rb +35 -0
  165. data/lib/pione/util/misc.rb +0 -47
  166. data/lib/pione/util/uuid.rb +28 -0
  167. data/lib/pione/util/variable-holdable.rb +38 -0
  168. data/lib/pione/version.rb +1 -1
  169. data/pione.gemspec +16 -14
  170. data/test/agent/spec_logger.rb +35 -44
  171. data/test/agent/spec_messenger.rb +25 -0
  172. data/test/agent/spec_rule-provider.rb +1 -1
  173. data/test/agent/spec_task-worker.rb +7 -13
  174. data/test/{system → component}/spec_document.rb +20 -20
  175. data/test/component/spec_package.rb +77 -0
  176. data/test/component/spec_package/TestPackage/Test.pione +14 -0
  177. data/test/component/spec_package/TestPackage/bin/count +3 -0
  178. data/test/component/spec_package/TestPackage/package.yml +7 -0
  179. data/test/component/spec_package/TestPackage/scenario/case1/input/1.txt +1 -0
  180. data/test/component/spec_package/TestPackage/scenario/case1/scenario.yml +1 -0
  181. data/test/component/spec_rule.rb +140 -0
  182. data/test/endurance-test/graph.plt +12 -0
  183. data/test/endurance-test/run.sh +65 -0
  184. data/test/location/location-behavior.rb +125 -0
  185. data/test/location/spec_ftp-location.rb +28 -90
  186. data/test/location/spec_local-location.rb +26 -76
  187. data/test/log/raw-process-log/pione-process.log +710 -0
  188. data/test/log/spec_domain-log.rb +57 -0
  189. data/test/log/spec_message-log.rb +44 -0
  190. data/test/log/spec_process-log.rb +88 -0
  191. data/test/log/spec_process-record.rb +148 -0
  192. data/test/log/spec_system-log.rb +142 -0
  193. data/test/log/spec_xes-log.rb +2 -2
  194. data/test/model/spec_assignment.rb +26 -25
  195. data/test/model/spec_block.rb +51 -97
  196. data/test/model/spec_boolean.rb +0 -5
  197. data/test/model/spec_call-rule.rb +6 -6
  198. data/test/model/spec_data-expr.rb +0 -7
  199. data/test/model/spec_data-expr.yml +8 -0
  200. data/test/model/spec_float.rb +1 -1
  201. data/test/model/spec_float.yml +13 -0
  202. data/test/model/spec_integer.rb +1 -1
  203. data/test/model/spec_integer.yml +12 -1
  204. data/test/model/spec_keyed-sequence.yml +5 -0
  205. data/test/model/spec_message.rb +2 -4
  206. data/test/model/spec_package-expr.rb +19 -0
  207. data/test/model/spec_parameters.rb +56 -88
  208. data/test/model/spec_pione-method.rb +15 -14
  209. data/test/model/spec_rule-expr.rb +4 -52
  210. data/test/model/spec_rule-expr.yml +11 -0
  211. data/test/model/spec_sequence.yml +6 -0
  212. data/test/model/spec_string.rb +21 -13
  213. data/test/model/spec_string.yml +10 -2
  214. data/test/model/spec_ticket-expr.rb +25 -3
  215. data/test/model/spec_variable.rb +8 -8
  216. data/test/rule-handler/spec_action-handler.pione +37 -0
  217. data/test/rule-handler/spec_action-handler.rb +41 -97
  218. data/test/rule-handler/spec_flow-handler.rb +24 -30
  219. data/test/rule-handler/spec_update-criteria.pione +16 -0
  220. data/test/rule-handler/spec_update-criteria.rb +7 -4
  221. data/test/rule-handler/spec_update-criteria.yml +191 -0
  222. data/test/system/spec_domain-info.rb +25 -0
  223. data/test/test-util.rb +38 -228
  224. data/test/transformer/spec_block-transformer.rb +1 -1
  225. data/test/transformer/spec_expr-transformer.rb +30 -39
  226. data/test/transformer/spec_flow-element-transformer.rb +17 -17
  227. data/test/transformer/spec_literal-transformer.rb +3 -3
  228. data/test/transformer/spec_rule-definition-transformer.rb +55 -76
  229. data/test/{spec_data-finder.rb → tuple-space/spec_data-finder.rb} +1 -1
  230. data/test/{spec_data-finder.yml → tuple-space/spec_data-finder.yml} +0 -0
  231. data/test/tuple/spec_data-tuple.rb +5 -76
  232. data/test/tuple/spec_finished-tuple.rb +5 -46
  233. data/test/tuple/spec_message-tuple.rb +10 -0
  234. data/test/tuple/spec_task-tuple.rb +4 -110
  235. data/test/tuple/spec_touch-tuple.rb +14 -0
  236. data/test/tuple/tuple-behavior.rb +14 -0
  237. data/test/uri-scheme/spec_local-scheme.rb +1 -1
  238. data/test/uri-scheme/spec_myftp-scheme.rb +73 -0
  239. data/test/uri-scheme/spec_myftp-scheme.yml +85 -0
  240. data/test/util/spec_cpu.rb +8 -0
  241. data/test/util/spec_error-report.rb +42 -0
  242. data/test/util/spec_evaluatable.rb +18 -0
  243. data/test/util/spec_ftp-server.rb +249 -0
  244. data/test/util/spec_id.pione +14 -0
  245. data/test/util/spec_id.rb +77 -0
  246. data/test/util/spec_indentation.rb +77 -0
  247. data/test/util/spec_ip-address.rb +15 -0
  248. data/test/util/spec_uuid.rb +11 -0
  249. data/test/util/spec_variable-holdable.rb +69 -0
  250. metadata +282 -83
  251. data/bin/pione-eval +0 -111
  252. data/demo/demo.rb +0 -311
  253. data/demo/public/base.css +0 -94
  254. data/demo/public/demo.js +0 -107
  255. data/demo/public/index.html +0 -91
  256. data/demo/public/jquery-1.8.3.min.js +0 -2
  257. data/lib/pione/model/binary-operator.rb +0 -90
  258. data/lib/pione/model/list.rb +0 -108
  259. data/lib/pione/model/package.rb +0 -56
  260. data/lib/pione/model/rule-io.rb +0 -178
  261. data/lib/pione/model/rule.rb +0 -295
  262. data/lib/pione/system/identifier.rb +0 -61
  263. data/lib/pione/tuple/log-tuple.rb +0 -14
  264. data/lib/pione/util/terminal.rb +0 -78
  265. data/test/log/data/sample.log +0 -1003
  266. data/test/model/spec_binary-operator.rb +0 -39
  267. data/test/model/spec_package.rb +0 -15
  268. data/test/model/spec_rule.rb +0 -158
  269. data/test/spec_identifier.rb +0 -29
  270. data/test/spec_log.rb +0 -52
@@ -0,0 +1,29 @@
1
+ Rule Main
2
+ output 'o1-*'.all
3
+ output 'o2'
4
+ Flow
5
+ rule Init
6
+ rule A
7
+ rule B
8
+ rule C
9
+ End
10
+
11
+ Rule Init
12
+ output 'i1'.touch
13
+ End
14
+
15
+ Rule A
16
+ input 'i1'
17
+ output 'p1'.touch
18
+ End
19
+
20
+ Rule B
21
+ input 'p1'
22
+ output 'o2'.touch
23
+ End
24
+
25
+ Rule C
26
+ input 'p1'
27
+ output 'o1-{$N}'.touch
28
+ param $N := 1.upto(5)
29
+ End
@@ -0,0 +1,28 @@
1
+ Rule Main
2
+ output 'o1'
3
+ Flow
4
+ rule Init
5
+ rule A
6
+ rule B
7
+ rule C
8
+ End
9
+
10
+ Rule Init
11
+ output 'i1'.touch
12
+ End
13
+
14
+ Rule A
15
+ input 'i1'
16
+ output 'p1'.touch
17
+ End
18
+
19
+ Rule B
20
+ input 'p1'
21
+ output 'p2-{$N}'.touch
22
+ param $N := 1.upto(5)
23
+ End
24
+
25
+ Rule C
26
+ input 'p2-*'.all
27
+ output 'o1'.touch
28
+ End
@@ -0,0 +1,33 @@
1
+ param $NUM := 5
2
+
3
+ Rule Main
4
+ output 'o1'
5
+ Flow
6
+ rule Init
7
+ rule A
8
+ rule B
9
+ rule C
10
+ End
11
+
12
+ Rule Init
13
+ output 'i1'.touch
14
+ End
15
+
16
+ Rule A
17
+ input 'i1'
18
+ output 'p1'.touch
19
+ output 'p3'.touch
20
+ End
21
+
22
+ Rule B
23
+ input 'p2-*'.all
24
+ input 'p3'
25
+ output 'o1'.touch
26
+ End
27
+
28
+ Rule C
29
+ input 'p1'
30
+ output 'p2-{$N}'.touch
31
+ param $N := 1.upto($NUM)
32
+ End
33
+
@@ -0,0 +1,21 @@
1
+ Rule Main
2
+ output '*.o1'.all
3
+ Flow
4
+ rule Init
5
+ rule A
6
+ End
7
+
8
+ Rule Init
9
+ output '{$N}.i1'.touch
10
+ output '{$N}.i2'.touch
11
+ output '{$N}.i3'.touch
12
+ param $N := (1 | 2 | 3 | 4 | 5)
13
+ End
14
+
15
+ Rule A
16
+ input '*.i1'
17
+ input '{$*}.i2'
18
+ input '{$*}.i3'
19
+ output '{$*}.o1'.touch
20
+ End
21
+
@@ -0,0 +1,101 @@
1
+ param $ST1 := true
2
+ $ST2 := not :: $ST1
3
+
4
+ Rule Main
5
+ output 'o1'
6
+ Flow
7
+ rule Init
8
+ rule A
9
+ rule B
10
+ rule C
11
+ rule D
12
+ rule E
13
+ rule S1
14
+ rule S2
15
+ rule S3
16
+ End
17
+
18
+ Rule Init
19
+ output 'i1'.touch
20
+ End
21
+
22
+ Rule A
23
+ input 'i1'
24
+ output 'p1-c'
25
+ output 'p1-true' or 'p1-false'
26
+ output 'p2-c'
27
+ output 'p2-true' or 'p2-false'
28
+ Flow
29
+ rule A1
30
+ rule A2
31
+ rule A3
32
+ rule A4
33
+ End
34
+
35
+ Rule A1
36
+ output 'p1-c'.touch
37
+ output 'p1-true'.touch
38
+ constraint $ST1
39
+ End
40
+
41
+ Rule A2
42
+ output 'p1-c'.touch
43
+ output 'p1-false'.touch
44
+ constraint not :: $ST1
45
+ End
46
+
47
+ Rule A3
48
+ output 'p2-c'.touch
49
+ output 'p2-true'.touch
50
+ constraint $ST2
51
+ End
52
+
53
+ Rule A4
54
+ output 'p2-c'.touch
55
+ output 'p2-false'.touch
56
+ constraint not :: $ST2
57
+ End
58
+
59
+ Rule B
60
+ input 'p1-c'
61
+ input 'p1-true'
62
+ output 'p3-c'.touch
63
+ output 'p3-true'.touch
64
+ End
65
+
66
+ Rule C
67
+ input 'p2-c'
68
+ input 'p2-true'
69
+ output 'p5'.touch
70
+ End
71
+
72
+ Rule D
73
+ input 'p3-c'
74
+ input 'p3-true'
75
+ output 'p4'.touch
76
+ End
77
+
78
+ Rule E
79
+ input 'p4'
80
+ input 'p5'
81
+ output 'o1'.touch
82
+ End
83
+
84
+ Rule S1
85
+ input 'p1-c'
86
+ input 'p1-false'
87
+ output 'p3-c'.touch
88
+ output 'p3-false'.touch
89
+ End
90
+
91
+ Rule S2
92
+ input 'p3-c'
93
+ input 'p3-false'
94
+ output 'p4'.touch
95
+ End
96
+
97
+ Rule S3
98
+ input 'p2-c'
99
+ input 'p2-false'
100
+ output 'p5'.touch
101
+ End
@@ -0,0 +1,43 @@
1
+ Rule Main
2
+ output 'o1'
3
+ Flow
4
+ rule Init
5
+ rule A
6
+ End
7
+
8
+ Rule Init
9
+ output 'i1'.touch
10
+ output 'cont'.touch
11
+ output '0.count'.touch
12
+ End
13
+
14
+ Rule A
15
+ input 'i1'
16
+ input 'cont'
17
+ input '0.count'
18
+ output 'o1'
19
+ Flow
20
+ rule A1
21
+ rule A2
22
+ End
23
+
24
+ Rule A1
25
+ input '*.count'.all or null
26
+ input 'cont'
27
+ output '{$*.length}.count'
28
+ Flow
29
+ rule A1Count {N: $*.length}
30
+ End
31
+
32
+ Rule A1Count
33
+ output '{$N}.count'.touch
34
+ param $N
35
+ End
36
+
37
+ Rule A2
38
+ input '*.count'.all
39
+ input 'cont'
40
+ output 'o1'.touch
41
+ output 'cont'.remove
42
+ constraint $*.length > 5
43
+ End
@@ -0,0 +1,16 @@
1
+ Rule Main
2
+ output 'o1-*'.all
3
+ Flow
4
+ rule Init
5
+ rule A
6
+ End
7
+
8
+ Rule Init
9
+ output 'p1'.touch
10
+ End
11
+
12
+ Rule A
13
+ input 'p1'
14
+ output 'o1-{$N}'.touch
15
+ param $N := 1.upto(5)
16
+ End
data/lib/pione.rb CHANGED
@@ -23,6 +23,7 @@ require 'time'
23
23
  require 'etc'
24
24
  require 'json'
25
25
  require 'rexml/document'
26
+ require 'logger'
26
27
 
27
28
  require 'uuidtools'
28
29
  require 'parslet'
@@ -34,23 +35,21 @@ require 'hamster'
34
35
  require 'naming'
35
36
  require 'temppath'
36
37
  require 'xes'
38
+ require 'sys/uname'
39
+ require 'simple-identity'
40
+ require 'rainbow'
41
+ require 'em-ftpd'
42
+ require 'pione/patch/em-ftpd-patch'
43
+ require 'sys/cpu'
44
+ require 'structx'
45
+ require 'syslog-logger'
37
46
 
38
47
  #
39
48
  # load pione
40
49
  #
41
50
 
42
- # version
43
51
  require 'pione/version'
44
-
45
- # util
46
- require 'pione/util/misc'
47
- require 'pione/util/terminal'
48
- require 'pione/util/console-message'
49
- require 'pione/util/waiter-table'
50
- require 'pione/util/error-report'
51
-
52
- # log
53
- require 'pione/log'
52
+ require 'pione/util'
54
53
 
55
54
  # patch
56
55
  require 'pione/patch/array-patch'
@@ -59,27 +58,19 @@ require 'pione/patch/rinda-patch'
59
58
  require 'pione/patch/uri-patch'
60
59
  require 'pione/patch/monitor-patch'
61
60
 
62
- # system
63
- require 'pione/system/object'
64
- require 'pione/system/common'
65
- require 'pione/system/config'
66
- require 'pione/system/global'
67
- require 'pione/system/init'
68
- require 'pione/system/identifier'
69
- require 'pione/system/document'
70
- require 'pione/system/file-cache'
71
-
72
- Pione.module_exec {const_set(:PioneObject, Pione::System::PioneObject)}
73
- Pione.module_exec {const_set(:Global, Pione::System::Global)}
74
-
75
61
  # uri-scheme
76
62
  require 'pione/uri-scheme/basic-scheme'
77
63
  require 'pione/uri-scheme/local-scheme'
78
64
  require 'pione/uri-scheme/dropbox-scheme'
79
65
  require 'pione/uri-scheme/broadcast-scheme'
66
+ require 'pione/uri-scheme/myftp-scheme'
80
67
 
81
- # location
82
68
  require 'pione/location'
69
+ require 'pione/log'
70
+ require 'pione/system'
71
+
72
+ Pione.module_exec {const_set(:PioneObject, Pione::System::PioneObject)}
73
+ Pione.module_exec {const_set(:Global, Pione::System::Global)}
83
74
 
84
75
  # relay
85
76
  require 'pione/relay/transmitter-socket'
@@ -100,30 +91,11 @@ require 'pione/tuple-space/data-finder'
100
91
  # rule-handler
101
92
  require 'pione/rule-handler.rb'
102
93
 
103
- # model
104
94
  require 'pione/model'
95
+ require 'pione/component'
105
96
 
106
97
  # tuple
107
- require 'pione/tuple/basic-tuple'
108
- require 'pione/tuple/agent-tuple'
109
- require 'pione/tuple/data-tuple'
110
- require 'pione/tuple/finished-tuple'
111
- require 'pione/tuple/process-info-tuple'
112
- require 'pione/tuple/lift-tuple'
113
- require 'pione/tuple/working-tuple'
114
- require 'pione/tuple/attribute-tuple'
115
- require 'pione/tuple/bye-tuple'
116
- require 'pione/tuple/dry-run-tuple'
117
- require 'pione/tuple/foreground-tuple'
118
- require 'pione/tuple/request-rule-tuple'
119
- require 'pione/tuple/task-tuple'
120
- require 'pione/tuple/base-location-tuple'
121
- require 'pione/tuple/command-tuple'
122
- require 'pione/tuple/exception-tuple'
123
- require 'pione/tuple/log-tuple'
124
- require 'pione/tuple/rule-tuple'
125
- require 'pione/tuple/task-worker-resource-tuple'
126
- require 'pione/tuple/ticket-tuple'
98
+ require 'pione/tuple'
127
99
 
128
100
  # parser
129
101
  require 'pione/parser/parslet-extension'
@@ -151,6 +123,7 @@ require 'pione/agent/broker'
151
123
  require 'pione/agent/process-manager'
152
124
  require 'pione/agent/trivial-routine-worker'
153
125
  require 'pione/agent/tuple-space-server-client-life-checker'
126
+ require 'pione/agent/messenger'
154
127
 
155
128
  # front
156
129
  require 'pione/front/basic-front'
@@ -176,12 +149,15 @@ module Pione
176
149
  include System
177
150
  include Relay
178
151
  include Util
179
- include Util::ConsoleMessage
152
+ include Log::MessageLog
180
153
  include Model
181
154
  include TupleSpace
182
155
  include Parser
183
156
  include Transformer
184
157
 
158
+ extend Util::Evaluatable
159
+
160
+ module_function :debug_mode
185
161
  module_function :debug_mode=
186
162
  module_function :debug_mode?
187
163
  end
@@ -126,7 +126,7 @@ module Pione
126
126
 
127
127
  # Create a task worker for the server.
128
128
  def create_task_worker(tuple_space_server)
129
- connection_id = Util.generate_uuid
129
+ connection_id = Util::UUID.generate
130
130
  @assignment_table[connection_id] = tuple_space_server
131
131
  Thread.new do
132
132
  begin
@@ -40,7 +40,7 @@ module Pione
40
40
  def initialize(tuple_space_server, dir)
41
41
  raise Argument.new(dir) unless dir.kind_of?(Location::BasicLocation) or dir.nil?
42
42
  super(tuple_space_server)
43
- @gen = dir ? dir.entries.to_enum : [].each
43
+ @gen = dir ? dir.file_entries.to_enum : [].each
44
44
  end
45
45
 
46
46
  def generate
@@ -1,17 +1,15 @@
1
1
  module Pione
2
2
  module Agent
3
- # Logger is an agent for logging processings in tuple space.
3
+ # Logger is an agent for logging process events like agent activity or rule
4
+ # process.
4
5
  class Logger < TupleSpaceClient
5
6
  set_agent_type :logger
6
7
 
7
8
  # @return [BasicLocation]
8
- attr_reader :location
9
+ attr_reader :log_location
9
10
 
10
11
  # @return [Pathname]
11
- attr_reader :out
12
-
13
- # @return [Array<Log::ProcessRecord>]
14
- attr_reader :records
12
+ attr_reader :output_location
15
13
 
16
14
  # Create a logger agent.
17
15
  #
@@ -21,22 +19,17 @@ module Pione
21
19
  # the path to store log records
22
20
  def initialize(tuple_space_server, location)
23
21
  super(tuple_space_server)
24
- @location = location
25
- @temporary = Location[Pione.temporary_path(@location.basename)]
26
- @out = @temporary.path.open("w+")
27
- @records = []
22
+ @log_id = Time.now.iso8601(3)
23
+ @log_location = get_log_location(location)
24
+ @output_location = get_output_location
28
25
  end
29
26
 
30
27
  define_state :initialized
31
- define_state :take
32
- define_state :store
28
+ define_state :record
33
29
  define_state :terminated
34
30
 
35
- define_state_transition :initialized => :take
36
- define_state_transition :take => :store
37
- define_state_transition :store => :take
38
-
39
- define_exception_handler Exception => :terminated
31
+ define_state_transition :initialized => :record
32
+ define_state_transition :record => :record
40
33
 
41
34
  # Sleeps till the logger clears logs.
42
35
  #
@@ -44,52 +37,72 @@ module Pione
44
37
  # timespan for clearing logs
45
38
  # @return [void]
46
39
  def wait_to_clear_logs(timespan=0.1)
47
- while count_tuple(Tuple[:log].any) > 0 || @records.size > 0
40
+ while count_tuple(Tuple[:process_log].any) > 0
48
41
  sleep timespan
49
42
  end
50
43
  end
51
44
 
52
- def store_records
53
- unless @records.empty?
54
- @records.sort{|a,b| a.timestamp <=> b.timestamp}.each do |record|
55
- @out.puts record.format
56
- end
57
- @out.flush
58
- @out.fsync
59
- @records = []
45
+ # Record process_log tuples.
46
+ def transit_to_record
47
+ begin
48
+ write_records(take_all(Tuple[:process_log].any))
49
+ rescue => e
50
+ # logger is terminated at last in termination processes, so tuple space may be closed
51
+ ErrorReport.warn("Failed to take process logs.", self, e, __FILE__, __LINE__)
52
+ terminate
60
53
  end
61
54
  end
62
55
 
56
+ # Copy from output to log when log and output are different.
57
+ def transit_to_terminated
58
+ begin
59
+ write_records(take_all!(Tuple[:process_log].any))
60
+ rescue => e
61
+ # logger is terminated at last in termination processes, so tuple space may be closed
62
+ ErrorReport.warn("Failed to take process logs.", self, e, __FILE__, __LINE__)
63
+ end
64
+ if @log_location != @output_location
65
+ @output_location.copy(@log_location)
66
+ end
67
+ super
68
+ end
69
+
63
70
  private
64
71
 
65
- # Transits to the state +take+.
66
- def transit_to_take
67
- timeout(2) do
68
- loop do
69
- if @current_tuple = take(Tuple[:log].any)
70
- @records << @current_tuple.message
71
- @current_tuple = nil
72
- end
73
- end
74
- end
75
- rescue TimeoutError
76
- if @current_tuple
77
- @records << @current_tuple.message
78
- @current_tuple = nil
72
+ # Write records with sorting.
73
+ #
74
+ # @param tuples [Array<Tuple::LogTuple>]
75
+ # records
76
+ # @return [void]
77
+ def write_records(tuples)
78
+ tuples.sort{|a,b| a.timestamp <=> b.timestamp}.each do |tuple|
79
+ @output_location.append tuple.message.format(@log_id) + "\n"
79
80
  end
80
81
  end
81
82
 
82
- # Transits to the state +store+.
83
- def transit_to_store
84
- store_records
83
+ # Get the log location. If the location is a directory, log filename is
84
+ # "pione-process.log".
85
+ #
86
+ # @param location [BasicLocation]
87
+ # location
88
+ # @return [BasicLocation]
89
+ # log location
90
+ def get_log_location(location)
91
+ if location.directory?
92
+ location + "pione-process.log"
93
+ else
94
+ location
95
+ end
85
96
  end
86
97
 
87
- # State terminated.
88
- def transit_to_terminated
89
- store_records
90
- Util.ignore_exception {@out.close}
91
- @temporary.copy(@location)
92
- super
98
+ # Get the output location. If the log location is not suportted append
99
+ # writing, output location is in local filesystem.
100
+ def get_output_location
101
+ if @log_location.real_appendable?
102
+ @log_location
103
+ else
104
+ Location[Pione.temporary_path(@log_location.basename)]
105
+ end
93
106
  end
94
107
  end
95
108