pione 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (304) hide show
  1. data/.gitignore +2 -0
  2. data/.s3cfg +42 -0
  3. data/.travis.yml +18 -4
  4. data/.yardopts +1 -0
  5. data/Gemfile +3 -0
  6. data/History.txt +14 -0
  7. data/Procfile +7 -0
  8. data/Rakefile +25 -0
  9. data/bin/pione-interactive +6 -0
  10. data/bin/{pione-compiler → pione-notification-listener} +1 -1
  11. data/bin/{pione-broker → pione-task-worker-broker} +1 -1
  12. data/doc/man/pione-list-param.md +36 -0
  13. data/example/ActionError/ActionError.pione +9 -0
  14. data/example/ActionError/pione-package.json +15 -0
  15. data/example/CountChar/CountChar.pione +1 -1
  16. data/example/ScoreAggregation/ScoreAggregation.pione +1 -1
  17. data/example/Touch/pione-package.json +15 -0
  18. data/lib/pione.rb +12 -0
  19. data/lib/pione/agent.rb +3 -3
  20. data/lib/pione/agent/basic-agent.rb +10 -4
  21. data/lib/pione/agent/input-generator.rb +3 -3
  22. data/lib/pione/agent/{process-manager.rb → job-manager.rb} +10 -7
  23. data/lib/pione/agent/job-terminator.rb +2 -2
  24. data/lib/pione/agent/logger.rb +3 -3
  25. data/lib/pione/agent/messenger.rb +20 -9
  26. data/lib/pione/agent/notification-listener.rb +88 -0
  27. data/lib/pione/agent/task-worker-broker.rb +84 -0
  28. data/lib/pione/agent/task-worker.rb +3 -2
  29. data/lib/pione/agent/tuple-space-client.rb +1 -0
  30. data/lib/pione/agent/tuple-space-provider.rb +17 -35
  31. data/lib/pione/command.rb +33 -15
  32. data/lib/pione/command/action.rb +105 -0
  33. data/lib/pione/command/basic-command.rb +34 -376
  34. data/lib/pione/command/command-exception.rb +12 -11
  35. data/lib/pione/command/common.rb +198 -0
  36. data/lib/pione/command/option.rb +159 -204
  37. data/lib/pione/command/pione-action-exec.rb +85 -0
  38. data/lib/pione/command/pione-action-list.rb +43 -19
  39. data/lib/pione/command/pione-action-print.rb +79 -0
  40. data/lib/pione/command/pione-action.rb +8 -67
  41. data/lib/pione/command/pione-clean.rb +88 -68
  42. data/lib/pione/command/pione-client.rb +475 -332
  43. data/lib/pione/command/pione-command.rb +14 -31
  44. data/lib/pione/command/pione-compile.rb +90 -0
  45. data/lib/pione/command/pione-config-get.rb +53 -0
  46. data/lib/pione/command/pione-config-list.rb +64 -0
  47. data/lib/pione/command/pione-config-set.rb +59 -0
  48. data/lib/pione/command/pione-config-unset.rb +50 -0
  49. data/lib/pione/command/pione-config.rb +61 -0
  50. data/lib/pione/command/pione-diagnosis-notification.rb +235 -0
  51. data/lib/pione/command/pione-diagnosis.rb +21 -0
  52. data/lib/pione/command/pione-interactive.rb +188 -0
  53. data/lib/pione/command/pione-lang-check-syntax.rb +163 -0
  54. data/lib/pione/command/pione-lang-interactive.rb +146 -0
  55. data/lib/pione/command/pione-lang.rb +22 -0
  56. data/lib/pione/command/pione-log-format.rb +163 -0
  57. data/lib/pione/command/pione-log-list-id.rb +48 -0
  58. data/lib/pione/command/pione-log.rb +19 -101
  59. data/lib/pione/command/pione-notification-listener.rb +95 -0
  60. data/lib/pione/command/pione-package-add.rb +137 -0
  61. data/lib/pione/command/pione-package-build.rb +122 -0
  62. data/lib/pione/command/pione-package-show.rb +96 -0
  63. data/lib/pione/command/pione-package-update.rb +59 -0
  64. data/lib/pione/command/pione-package.rb +11 -139
  65. data/lib/pione/command/pione-task-worker-broker.rb +88 -0
  66. data/lib/pione/command/pione-task-worker.rb +148 -98
  67. data/lib/pione/command/pione-tuple-space-provider.rb +62 -54
  68. data/lib/pione/command/pione-tuple-space-viewer.rb +105 -83
  69. data/lib/pione/command/pione-val.rb +39 -39
  70. data/lib/pione/command/spawner.rb +34 -27
  71. data/lib/pione/front.rb +4 -2
  72. data/lib/pione/front/basic-front.rb +86 -23
  73. data/lib/pione/front/client-front.rb +2 -2
  74. data/lib/pione/front/diagnosis-notification-front.rb +40 -0
  75. data/lib/pione/front/front-exception.rb +7 -1
  76. data/lib/pione/front/notification-listener-front.rb +36 -0
  77. data/lib/pione/front/notification-recipient-interface.rb +19 -0
  78. data/lib/pione/front/relay-front.rb +4 -4
  79. data/lib/pione/front/task-worker-broker-front.rb +19 -0
  80. data/lib/pione/front/task-worker-front.rb +2 -2
  81. data/lib/pione/front/tuple-space-provider-front.rb +3 -2
  82. data/lib/pione/global.rb +3 -1
  83. data/lib/pione/global/client-variable.rb +1 -1
  84. data/lib/pione/global/config.rb +63 -7
  85. data/lib/pione/global/diagnosis-variable.rb +26 -0
  86. data/lib/pione/global/item.rb +28 -5
  87. data/lib/pione/global/log-variable.rb +6 -5
  88. data/lib/pione/global/network-variable.rb +75 -4
  89. data/lib/pione/global/path-variable.rb +1 -1
  90. data/lib/pione/global/system-variable.rb +12 -12
  91. data/lib/pione/global/task-worker-broker-variable.rb +43 -0
  92. data/lib/pione/global/tuple-space-notifier-variable.rb +3 -55
  93. data/lib/pione/lang/boolean.rb +4 -0
  94. data/lib/pione/lang/data-expr.rb +1 -1
  95. data/lib/pione/lang/integer.rb +1 -1
  96. data/lib/pione/lang/string.rb +4 -0
  97. data/lib/pione/lang/type.rb +1 -1
  98. data/lib/pione/location.rb +1 -0
  99. data/lib/pione/location/data-location.rb +41 -13
  100. data/lib/pione/location/dropbox-location.rb +175 -56
  101. data/lib/pione/location/ftp-location.rb +4 -1
  102. data/lib/pione/location/http-location.rb +5 -3
  103. data/lib/pione/location/https-location.rb +4 -2
  104. data/lib/pione/location/local-location.rb +6 -3
  105. data/lib/pione/location/location-exception.rb +12 -0
  106. data/lib/pione/location/notification-scheme.rb +46 -0
  107. data/lib/pione/log.rb +8 -7
  108. data/lib/pione/log/debug.rb +9 -9
  109. data/lib/pione/log/domain-log.rb +6 -1
  110. data/lib/pione/log/message-log-receiver.rb +32 -0
  111. data/lib/pione/log/system-log.rb +62 -141
  112. data/lib/pione/model.rb +7 -0
  113. data/lib/pione/model/notification-listener-model.rb +29 -0
  114. data/lib/pione/model/task-worker-broker-model.rb +129 -0
  115. data/lib/pione/notification.rb +13 -0
  116. data/lib/pione/notification/address.rb +104 -0
  117. data/lib/pione/notification/exception.rb +10 -0
  118. data/lib/pione/notification/message.rb +109 -0
  119. data/lib/pione/notification/receiver.rb +90 -0
  120. data/lib/pione/notification/recipient.rb +68 -0
  121. data/lib/pione/notification/task-worker-broker-recipient.rb +85 -0
  122. data/lib/pione/notification/transmitter.rb +84 -0
  123. data/lib/pione/pnml.rb +35 -0
  124. data/lib/pione/pnml/annotation-extractor.rb +47 -0
  125. data/lib/pione/pnml/compiler.rb +176 -0
  126. data/lib/pione/pnml/input-merge-complement.rb +78 -0
  127. data/lib/pione/pnml/input-parallelization-complement.rb +75 -0
  128. data/lib/pione/pnml/input-reduction.rb +80 -0
  129. data/lib/pione/pnml/invalid-arc-elimination.rb +41 -0
  130. data/lib/pione/pnml/io-expansion.rb +88 -0
  131. data/lib/pione/pnml/isolated-element-elimination.rb +32 -0
  132. data/lib/pione/pnml/net-rewriter.rb +44 -0
  133. data/lib/pione/pnml/output-decomposition-complement.rb +77 -0
  134. data/lib/pione/pnml/output-reduction.rb +86 -0
  135. data/lib/pione/pnml/output-synchronization-complement.rb +77 -0
  136. data/lib/pione/pnml/pione-model.rb +417 -0
  137. data/lib/pione/pnml/pnml-exception.rb +23 -0
  138. data/lib/pione/pnml/pnml-model.rb +368 -0
  139. data/lib/pione/pnml/reader.rb +51 -0
  140. data/lib/pione/rule-engine/action-handler.rb +8 -6
  141. data/lib/pione/rule-engine/basic-handler.rb +5 -5
  142. data/lib/pione/rule-engine/engine-exception.rb +7 -6
  143. data/lib/pione/rule-engine/flow-handler.rb +27 -18
  144. data/lib/pione/system.rb +3 -1
  145. data/lib/pione/system/domain-dump.rb +34 -0
  146. data/lib/pione/system/file-cache.rb +92 -13
  147. data/lib/pione/system/init.rb +3 -0
  148. data/lib/pione/system/normalizer.rb +40 -0
  149. data/lib/pione/system/status.rb +5 -5
  150. data/lib/pione/system/system-exception.rb +14 -1
  151. data/lib/pione/task-worker-broker.rb +7 -0
  152. data/lib/pione/task-worker-broker/basic-provider.rb +20 -0
  153. data/lib/pione/task-worker-broker/easy-provider.rb +65 -0
  154. data/lib/pione/test-helper.rb +27 -0
  155. data/lib/pione/test-helper/command-helper.rb +9 -101
  156. data/lib/pione/tuple-space/basic-tuple.rb +1 -1
  157. data/lib/pione/tuple-space/tuple-definition.yml +4 -6
  158. data/lib/pione/tuple-space/tuple-space-interface.rb +3 -45
  159. data/lib/pione/tuple-space/tuple-space-server.rb +45 -0
  160. data/lib/pione/util.rb +1 -2
  161. data/lib/pione/util/boolean-value.rb +62 -0
  162. data/lib/pione/util/completion.rb +111 -0
  163. data/lib/pione/util/evaluatable.rb +13 -27
  164. data/lib/pione/util/package-parameters-list.rb +15 -27
  165. data/lib/pione/util/zip.rb +8 -3
  166. data/lib/pione/version.rb +1 -1
  167. data/lib/rootage.rb +20 -0
  168. data/lib/rootage/action.rb +114 -0
  169. data/lib/rootage/argument.rb +46 -0
  170. data/lib/rootage/command.rb +218 -0
  171. data/lib/rootage/core.rb +532 -0
  172. data/lib/rootage/exception.rb +107 -0
  173. data/lib/rootage/help.rb +148 -0
  174. data/lib/rootage/help.txt.erb +31 -0
  175. data/lib/rootage/log.rb +226 -0
  176. data/lib/rootage/normalizer.rb +184 -0
  177. data/lib/rootage/option.rb +152 -0
  178. data/lib/rootage/scenario-test-result.erb +39 -0
  179. data/lib/rootage/scenario.rb +362 -0
  180. data/lib/rootage/test-helper.rb +115 -0
  181. data/man/pione-list-param.1 +44 -0
  182. data/misc/clock.rb +9 -0
  183. data/misc/machine-info.sh +21 -0
  184. data/misc/pione-completion.bash +238 -0
  185. data/misc/pione-completion.erb +53 -0
  186. data/misc/pione-completion.zsh +238 -0
  187. data/misc/pione.god +22 -0
  188. data/misc/ui.xml +23 -0
  189. data/pione.gemspec +3 -1
  190. data/test/agent/spec_basic-agent.rb +1 -1
  191. data/test/agent/spec_input-generator.rb +2 -2
  192. data/test/agent/spec_messenger.rb +6 -9
  193. data/test/agent/spec_notification-listener.rb +80 -0
  194. data/test/agent/{spec_broker.rb → spec_task-worker-broker.rb} +13 -10
  195. data/test/agent/spec_tuple-space-provider.rb +10 -6
  196. data/test/command/command-behavior.rb +3 -11
  197. data/test/command/data/pione-list-param/AdvancedParameters.pione +12 -0
  198. data/test/command/data/pione-list-param/BasicParameters.pione +12 -0
  199. data/test/command/spec_pione-action-exec.rb +16 -0
  200. data/test/command/spec_pione-action-list.rb +15 -10
  201. data/test/command/spec_pione-action-print.rb +14 -0
  202. data/test/command/spec_pione-action.rb +6 -19
  203. data/test/command/spec_pione-clean.rb +29 -46
  204. data/test/command/spec_pione-client.rb +29 -36
  205. data/test/command/spec_pione-command.rb +6 -6
  206. data/test/command/{spec_pione-compiler.rb → spec_pione-compile.rb} +11 -13
  207. data/test/command/spec_pione-config-get.rb +47 -0
  208. data/test/command/spec_pione-config-list.rb +42 -0
  209. data/test/command/spec_pione-config-set.rb +38 -0
  210. data/test/command/spec_pione-config-unset.rb +44 -0
  211. data/test/command/spec_pione-config.rb +11 -0
  212. data/test/command/spec_pione-diagnosis-notification.rb +23 -0
  213. data/test/command/spec_pione-diagnosis.rb +11 -0
  214. data/test/command/spec_pione-lang-check-syntax.rb +12 -0
  215. data/test/command/spec_pione-lang.rb +11 -0
  216. data/test/command/spec_pione-log-format.rb +29 -0
  217. data/test/command/spec_pione-log-list-id.rb +17 -0
  218. data/test/command/spec_pione-log.rb +6 -20
  219. data/test/command/spec_pione-package-add.rb +55 -0
  220. data/test/command/spec_pione-package-build.rb +57 -0
  221. data/test/command/spec_pione-package-show.rb +72 -0
  222. data/test/command/{spec_pione-update-package-info.rb → spec_pione-package-update.rb} +12 -13
  223. data/test/command/spec_pione-package.rb +4 -104
  224. data/test/command/spec_pione-val.rb +10 -7
  225. data/test/global/spec_config.rb +50 -0
  226. data/test/global/spec_item.rb +1 -1
  227. data/test/literate-action/data/HelloWorld.md +1 -1
  228. data/test/location/location-behavior.rb +1 -1
  229. data/test/location/spec_dropbox-location.rb +39 -0
  230. data/test/location/spec_notification-scheme.rb +37 -0
  231. data/test/log/spec_debug.rb +5 -4
  232. data/test/log/spec_message-log-receiver.rb +13 -0
  233. data/test/log/spec_message-log.rb +6 -9
  234. data/test/log/spec_system-log.rb +5 -3
  235. data/test/notification/spec_address.rb +229 -0
  236. data/test/notification/spec_message.rb +30 -0
  237. data/test/notification/spec_receiver.rb +36 -0
  238. data/test/notification/spec_transmitter.rb +37 -0
  239. data/test/pnml/data/ConditionalBranchIf.pnml +270 -0
  240. data/test/pnml/data/ConditionalBranchIfElse.pnml +309 -0
  241. data/test/pnml/data/IOExpansionComplex.pnml +363 -0
  242. data/test/pnml/data/IOExpansionSimple.pnml +140 -0
  243. data/test/pnml/data/InputMergeComplementComplex.pnml +381 -0
  244. data/test/pnml/data/InputMergeComplementSimple.pnml +248 -0
  245. data/test/pnml/data/InputParallelizationComplementComplex.pnml +433 -0
  246. data/test/pnml/data/InputParallelizationComplementSimple.pnml +288 -0
  247. data/test/pnml/data/InputReductionComplex.pnml +192 -0
  248. data/test/pnml/data/InputReductionLong.pnml +344 -0
  249. data/test/pnml/data/InputReductionSimple.pnml +140 -0
  250. data/test/pnml/data/IsolatedElementElimination.pnml +171 -0
  251. data/test/pnml/data/OutputDecompositionComplementComplex.pnml +381 -0
  252. data/test/pnml/data/OutputDecompositionComplementSimple.pnml +242 -0
  253. data/test/pnml/data/OutputReductionComplex.pnml +186 -0
  254. data/test/pnml/data/OutputReductionLong.pnml +344 -0
  255. data/test/pnml/data/OutputReductionSimple.pnml +140 -0
  256. data/test/pnml/data/OutputSynchronizationComplementComplex.pnml +498 -0
  257. data/test/pnml/data/OutputSynchronizationComplementSimple.pnml +347 -0
  258. data/test/pnml/data/SampleNet.pnml +238 -0
  259. data/test/pnml/spec_input-merge-complement.rb +40 -0
  260. data/test/pnml/spec_input-parallelization-complement.rb +50 -0
  261. data/test/pnml/spec_input-reduction.rb +113 -0
  262. data/test/pnml/spec_invalid-arc-elimination.rb +33 -0
  263. data/test/pnml/spec_io-expansion.rb +126 -0
  264. data/test/pnml/spec_isolated-element-elimination.rb +25 -0
  265. data/test/pnml/spec_output-decomposition-complement.rb +40 -0
  266. data/test/pnml/spec_output-reduction.rb +114 -0
  267. data/test/pnml/spec_output-synchronization-complement.rb +62 -0
  268. data/test/pnml/spec_pione-element.rb +144 -0
  269. data/test/pnml/spec_pnml-element.rb +373 -0
  270. data/test/pnml/spec_reader.rb +16 -0
  271. data/test/rootage/spec_argument.rb +18 -0
  272. data/test/rootage/spec_command.rb +239 -0
  273. data/test/rootage/spec_core.rb +198 -0
  274. data/test/rootage/spec_scenario.rb +149 -0
  275. data/test/system/{spec_domain-info.rb → spec_domain-dump.rb} +6 -6
  276. data/test/system/spec_file-cache.rb +6 -9
  277. data/test/tuple-space/spec_finished-tuple.rb +1 -1
  278. data/test/util/{spec_package-parameters-list_1.pione → data/package-parameters-list/Param1.pione} +0 -0
  279. data/test/util/{spec_package-parameters-list_2.pione → data/package-parameters-list/Param2.pione} +0 -0
  280. data/test/util/{spec_package-parameters-list_3.pione → data/package-parameters-list/Param3.pione} +0 -0
  281. data/test/util/{spec_package-parameters-list_4.pione → data/package-parameters-list/Param4.pione} +0 -0
  282. data/test/util/spec_boolean-value.rb +32 -0
  283. data/test/util/spec_completion.rb +22 -0
  284. data/test/util/spec_package-parameters-list.rb +39 -52
  285. data/test/util/spec_zip.rb +28 -1
  286. metadata +288 -47
  287. data/bin/pione-tuple-space-receiver +0 -5
  288. data/lib/pione/agent/broker.rb +0 -304
  289. data/lib/pione/agent/tuple-space-receiver.rb +0 -137
  290. data/lib/pione/command/pione-broker.rb +0 -104
  291. data/lib/pione/command/pione-compiler.rb +0 -57
  292. data/lib/pione/command/pione-relay-account-db.rb +0 -141
  293. data/lib/pione/command/pione-relay-client-db.rb +0 -118
  294. data/lib/pione/command/pione-relay.rb +0 -59
  295. data/lib/pione/command/pione-syntax-checker.rb +0 -214
  296. data/lib/pione/command/pione-tuple-space-receiver.rb +0 -111
  297. data/lib/pione/command/pione-update-package-info.rb +0 -53
  298. data/lib/pione/front/broker-front.rb +0 -22
  299. data/lib/pione/front/tuple-space-receiver-front.rb +0 -11
  300. data/lib/pione/global/broker-variable.rb +0 -33
  301. data/lib/pione/system/domain-info.rb +0 -25
  302. data/lib/pione/util/pnml-compiler.rb +0 -168
  303. data/test/agent/spec_tuple-space-receiver.rb +0 -47
  304. data/test/util/spec_pnml-compiler.rb +0 -32
@@ -7,99 +7,117 @@ module Pione
7
7
  # basic informations
8
8
  #
9
9
 
10
- command_name "pione-tuple-space-viewer"
11
- command_banner "Show and search tuples in tuple spaces."
10
+ define(:name, "pione-tuple-space-viewer")
11
+ define(:desc, "Show and search tuples in tuple spaces")
12
12
 
13
13
  #
14
- # command options
14
+ # requirements
15
15
  #
16
16
 
17
- use_option :color
18
- use_option :debug
17
+ require :pp
19
18
 
20
- define_option(:identifiers) do |item|
19
+ #
20
+ # arguments
21
+ #
22
+
23
+ argument(:address) do |item|
24
+ item.type = :location
25
+ item.desc = "Tuple space address"
26
+ item.missing = "You should set tuple space address"
27
+ end
28
+
29
+ #
30
+ # options
31
+ #
32
+
33
+ option CommonOption.color
34
+ option CommonOption.debug
35
+
36
+ option(:identifiers) do |item|
37
+ item.type = :string
21
38
  item.short = '-i'
22
- item.long = '--identifier=NAME'
23
- item.desc = 'show tuples that have the identifier'
24
- item.default = []
25
- item.values = lambda {|name| name}
39
+ item.long = '--identifier'
40
+ item.arg = 'NAME'
41
+ item.desc = 'show tuples that have the identifier'
42
+
43
+ item.assign do |val|
44
+ (model[:identifiers] || []) << val
45
+ end
26
46
  end
27
47
 
28
- define_option(:exclusions) do |item|
48
+ option(:exclusions) do |item|
49
+ item.type = :string
29
50
  item.short = '-e'
30
- item.long = '--exclude=NAME'
51
+ item.long = '--exclude'
52
+ item.arg = 'NAME'
31
53
  item.desc = 'exclude the tuple identifier'
32
- item.default = []
33
- item.values = lambda {|name| name}
54
+
55
+ item.assign do |val|
56
+ (model[:exclusions] || []) << val
57
+ end
34
58
  end
35
59
 
36
- define_option(:package) do |item|
37
- item.long = '--package=NAME'
60
+ option(:package) do |item|
61
+ item.type = :string
62
+ item.long = '--package'
63
+ item.arg = 'NAME'
38
64
  item.desc = 'show tuples which domain has the package name'
39
- item.value = lambda {|name| name}
40
65
  end
41
66
 
42
- define_option(:rule) do |item|
43
- item.long = '--rule=NAME'
67
+ option(:rule) do |item|
68
+ item.type = :string
69
+ item.long = '--rule'
70
+ item.arg = 'NAME'
44
71
  item.desc = 'show tuples which domain has the rule name'
45
- item.value = lambda {|name| name}
46
72
  end
47
73
 
48
- define_option(:rule_path) do |item|
49
- item.long = '--rule-path=NAME'
74
+ option(:rule_path) do |item|
75
+ item.type = :string
76
+ item.long = '--rule-path'
77
+ item.arg = 'NAME'
50
78
  item.desc = 'show tuples which domain has the rule path'
51
- item.value = lambda {|path| path}
52
79
  end
53
80
 
54
- define_option(:data_name) do |item|
55
- item.long = '--data-name=NAME'
81
+ option(:data_name) do |item|
82
+ item.type = :string
83
+ item.long = '--data-name'
84
+ item.arg = 'NAME'
56
85
  item.desc = 'show tuples that has the the name'
57
- item.value = lambda {|name| name}
58
86
  end
59
87
 
60
- define_option(:bag_type) do |item|
61
- item.long = '--type=TYPE'
88
+ option(:bag_type) do |item|
89
+ item.type = :symbol
90
+ item.long = '--type'
91
+ item.arg = 'TYPE'
62
92
  item.desc = 'show the bag which has the type("bag", "read_waiter", or "take_waiter")'
63
- item.value = lambda {|bag_type| bag_type.to_sym}
64
93
  end
65
94
 
66
- define_option(:address) do |item|
67
- item.long = '--client=ADDRESS'
95
+ option(:address) do |item|
96
+ item.type = :string
97
+ item.long = '--client '
98
+ item.arg = 'ADDRESS'
68
99
  item.desc = 'druby address of target client process'
69
- item.value = lambda {|address| address}
70
- end
71
-
72
- #
73
- # instance methods
74
- #
75
-
76
- def initialize(*argv)
77
- super
78
- @tuple_spaces = []
79
100
  end
80
101
 
81
102
  #
82
103
  # command lifecycle: setup phase
83
104
  #
84
105
 
85
- setup :pp
86
- setup :tuple_space
87
-
88
- def setup_pp
89
- require 'pp'
106
+ phase(:setup) do |item|
107
+ item << :tuple_space
90
108
  end
91
109
 
92
- def setup_tuple_space
93
- unless @argv.size > 0
94
- abort("you should set tuple space address")
95
- end
110
+ setup(:tuple_space) do |item|
111
+ item.desc = "Setup tuple space"
96
112
 
97
- address = @argv.first
98
- @tuple_spaces = get_tuple_space(address)
113
+ item.assign(:tuple_space) do
114
+ get_tuple_space(model[:address])
115
+ end
99
116
 
100
117
  # the tuple space not found
101
- if @tuple_spaces.empty?
102
- abort("No tuple space servers.")
118
+ item.process do
119
+ test(model[:tuple_spaces].empty?)
120
+ cmd.abort("No tuple space servers.")
103
121
  end
104
122
  end
105
123
 
@@ -107,40 +125,42 @@ module Pione
107
125
  # command lifecycle: execution phase
108
126
  #
109
127
 
110
- execute :print_bag
128
+ phase(:execution) do |item|
129
+ item << :print_bag
130
+ end
111
131
 
112
- def execute_print_bag
113
- @tuple_spaces.each do |address, tuple_space_server|
114
- puts "TupleSpaceServer: %s" % address.color(:red)
115
- puts "-"*78
116
- if option[:bag_type] == :bag or option[:bag_type].nil?
117
- puts "*** bag ***"
118
- show_bag(tuple_space_server, :bag)
119
- end
120
- if option[:bag_type] == :read_waiter or option[:bag_type].nil?
121
- puts "*** read waiter ***"
122
- show_bag(tuple_space_server, :read_waiter)
123
- end
124
- if option[:bag_type] == :take_waiter or option[:bag_type].nil?
125
- puts "*** take waiter ***"
126
- show_bag(tuple_space_server, :take_waiter)
127
- end
132
+ execution(:print_bag) do |item|
133
+ item.desc = "Print tuples in bag"
134
+
135
+ item.process do
136
+ model[:tuple_spaces].each do |address, tuple_space_server|
137
+ puts "TupleSpaceServer: %s" % address.color(:red)
138
+ puts "-"*78
139
+ if option[:bag_type] == :bag or option[:bag_type].nil?
140
+ puts "*** bag ***"
141
+ show_bag(tuple_space_server, :bag)
142
+ end
143
+ if option[:bag_type] == :read_waiter or option[:bag_type].nil?
144
+ puts "*** read waiter ***"
145
+ show_bag(tuple_space_server, :read_waiter)
146
+ end
147
+ if option[:bag_type] == :take_waiter or option[:bag_type].nil?
148
+ puts "*** take waiter ***"
149
+ show_bag(tuple_space_server, :take_waiter)
150
+ end
128
151
 
129
- # summary
130
- puts "*** summary ***"
131
- puts "task: %s" % tuple_space_server.task_size
132
- puts "working: %s" % tuple_space_server.working_size
133
- puts "finished: %s" % tuple_space_server.finished_size
134
- puts "data: %s" % tuple_space_server.data_size
152
+ # summary
153
+ puts "*** summary ***"
154
+ puts "task: %s" % tuple_space_server.task_size
155
+ puts "working: %s" % tuple_space_server.working_size
156
+ puts "finished: %s" % tuple_space_server.finished_size
157
+ puts "data: %s" % tuple_space_server.data_size
158
+ end
135
159
  end
136
160
  end
161
+ end
137
162
 
138
- #
139
- # helper methods
140
- #
141
-
142
- private
143
-
163
+ class PioneTupleSpaceViewerContext < Rootage::CommandContext
144
164
  # Get a tuple space from the address.
145
165
  def get_tuple_space(address)
146
166
  ref = DRbObject.new_with_uri(address)
@@ -183,6 +203,8 @@ module Pione
183
203
  puts res
184
204
  end
185
205
  end
206
+
207
+ PioneTupleSpaceViewer.define(:process_context_class, PioneTupleSpaceViewerContext)
186
208
  end
187
209
  end
188
210
  end
@@ -1,70 +1,70 @@
1
1
  module Pione
2
2
  module Command
3
- # PioneVal command enables you to get evaluation result of PIONE expressions from out of PIONE system.
3
+ # `PioneVal` is a command that enables to get evaluation value of PIONE
4
+ # expressions from out side of PIONE system.
4
5
  class PioneVal < BasicCommand
5
6
  #
6
- # basic informations
7
+ # informations
7
8
  #
8
9
 
9
- command_name "pione-val"
10
- command_banner "Get the evaluation result value of the PIONE expression."
11
- PioneCommand.add_subcommand("val", self)
10
+ define(:name, "val")
11
+ define(:desc, "Get the value of the PIONE expression")
12
12
 
13
13
  #
14
- # options
14
+ # arguments
15
15
  #
16
16
 
17
- use_option :debug
18
-
19
- define_option(:domain_info) do |item|
20
- item.long = '--domain-info=LOCATION'
21
- item.desc = 'location of Domain info file'
22
- item.default = Location["./domain.dump"]
23
- item.value = lambda {|location| Location[location]}
17
+ argument(:expr) do |item|
18
+ item.type = :string
19
+ item.desc = "PIONE expression string that is evaluated"
20
+ item.missing = "There is no expression."
24
21
  end
25
22
 
26
23
  #
27
- # command lifecycle: setup phase
24
+ # options
28
25
  #
29
26
 
30
- setup :expression
31
- setup :domain_info
27
+ option CommonOption.debug
28
+ option CommonOption.domain_dump_location
32
29
 
33
- # get expression string
34
- def setup_expression
35
- @str = @argv.first || abort("error: no expressions")
36
- end
30
+ #
31
+ # command lifecycle: setup phase
32
+ #
37
33
 
38
- # Read a domain info file.
39
- def setup_domain_info
40
- if option[:domain_info].exist?
41
- @domain_info = System::DomainInfo.read(option[:domain_info])
42
- end
34
+ phase(:setup) do |item|
35
+ item << CommonAction.load_domain_dump
43
36
  end
44
37
 
45
38
  #
46
39
  # command lifecycle: execution phase
47
40
  #
48
41
 
49
- execute :evaluate
50
- execute :print
42
+ phase(:execution) do |seq|
43
+ seq << :evaluation
44
+ seq << :print
45
+ end
46
+
47
+ execution(:evaluation) do |item|
48
+ item.desc = "Evaluate expression string as PIONE expression"
49
+
50
+ item.assign(:val) do
51
+ Pione.val(model[:expr], model[:domain_dump])
52
+ end
51
53
 
52
- # Evaluate expression string as PIONE expression.
53
- def execute_evaluate
54
- @val = Pione.val(@str, @domain_info)
55
- rescue Lang::UnboundError => e
56
- if option[:domain_info].exist?
57
- raise
58
- else
59
- abort("domain info file '%s' not found" % option[:domain_info].uri.to_s)
54
+ item.exception do |e|
55
+ cmd.abort(e)
60
56
  end
61
57
  end
62
58
 
63
- # Print evaluation result.
64
- def execute_print
65
- $stdout.puts @val
59
+ execution(:print) do |item|
60
+ item.desc = "Print the evaluation value"
61
+
62
+ item.process do
63
+ puts model[:val]
64
+ end
66
65
  end
67
66
  end
67
+
68
+ PioneCommand.define_subcommand("val", PioneVal)
68
69
  end
69
70
  end
70
-
@@ -5,48 +5,53 @@ module Pione
5
5
  class Spawner
6
6
  attr_reader :pid # PID of spawned child process
7
7
  attr_reader :child_front # front URI of spawned child process
8
+ attr_reader :thread # watch thread for spawned child process
8
9
 
9
- def initialize(name)
10
- @name = name # callee command name
11
- @args = [] # callee command arguments
10
+ def initialize(model, name)
11
+ @model = model # caller's model
12
+ @name = name # callee command name
13
+ @argv = [] # callee command arguments
12
14
  end
13
15
 
14
16
  # Spawn the command process.
15
17
  def spawn
16
- Log::Debug.system("process \"%s\" is spawned with arguments %s" % [@name, @args])
18
+ Log::Debug.system('process "%{name}" is spawned with arguments %{argv}' % {name: @name, argv: @argv})
17
19
 
18
20
  # create a new process and watch it
19
- pid = Process.spawn(@name, *@args)
20
-
21
- # register PID to front server for termination
22
- Global.front.child[pid] = nil if Global.front
21
+ @pid = Process.spawn(@name, *@argv)
23
22
 
24
23
  # keep to watch child process
25
- thread = Process.detach(pid)
26
-
27
- begin
28
- # find child front while child process is alive
29
- retriable :on => [SpawnerRetry, Timeout::Error], :tries => 30, :interval => 0.1 do
30
- # when process is dead, raise an error
31
- if thread.nil? or not(thread.alive?)
32
- raise SpawnError.new("%s failed to spawn %s." % [Global.command.command_name, @name])
33
- end
24
+ @thread = Process.detach(@pid)
34
25
 
26
+ # find child front while child process is alive
27
+ Timeout.timeout(10) do
28
+ while @thread and @thread.alive? do
35
29
  # find front and save its uri and pid
36
- @child_front = find_child_front(pid) || (raise SpawnerRetry)
37
- @pid = pid
38
- @thread = thread
30
+ if child_front = find_child_front(@pid)
31
+ @child_front = child_front
39
32
 
40
- return self
33
+ return self
34
+ else
35
+ sleep 0.1
36
+ end
41
37
  end
42
- rescue Exception => e
43
- raise SpawnError.new("%s failed to spawn %s: %s" % [Global.command.command_name, @name, e.message])
38
+
39
+ # when process is dead, raise an error
40
+ raise SpawnError.new(@model[:scenario_name], @name, @argv, "child process is dead")
41
+ end
42
+ rescue Timeout::Error
43
+ raise SpawnError.new(@model[:scenario_name], @name, @argv, "timed out")
44
+ rescue Object => e
45
+ if e.kind_of?(SpawnError)
46
+ raise
47
+ else
48
+ raise SpawnError.new(@model[:scenario_name], @name, @argv, e.message)
44
49
  end
45
50
  end
46
51
 
47
52
  # Append arguments to the command.
48
- def option(*args)
49
- @args += args
53
+ def option(*argv)
54
+ @argv += argv.map {|val| val.to_s}
50
55
  end
51
56
 
52
57
  # Register the block that is executed when the spawned process is terminated.
@@ -63,11 +68,13 @@ module Pione
63
68
  # URI to children table of my front, so we get it from my front and create
64
69
  # the reference.
65
70
  def find_child_front(pid)
66
- if child_front_uri = Global.front.child[pid]
67
- return DRbObject.new_with_uri(child_front_uri).tap do |front|
71
+ if child_front_uri = @model[:front].child_front_uri(pid)
72
+ return DRbObject.new_with_uri(child_front_uri.to_s).tap do |front|
68
73
  timeout(1) {front.ping} # test connection
69
74
  end
70
75
  end
76
+ rescue Timeout::Error
77
+ return nil
71
78
  end
72
79
  end
73
80
  end