pione 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (214) hide show
  1. data/.gitignore +16 -13
  2. data/.travis.yml +1 -1
  3. data/History.txt +11 -0
  4. data/Rakefile +13 -0
  5. data/bin/pione-package +5 -0
  6. data/example/AbstractRule/package.yml +6 -0
  7. data/example/AbstractRule/scenario/a/output/message.txt +1 -0
  8. data/example/AbstractRule/scenario/a/scenario.yml +4 -0
  9. data/example/AbstractRule/scenario/b/output/message.txt +1 -0
  10. data/example/AbstractRule/scenario/b/scenario.yml +4 -0
  11. data/example/AbstractRule/scenario/c/output/message.txt +1 -0
  12. data/example/AbstractRule/scenario/c/scenario.yml +4 -0
  13. data/example/HelloWorld/package.yml +5 -1
  14. data/example/HelloWorld/scenario/scenario.yml +2 -1
  15. data/example/LoopByTouch/package.yml +4 -1
  16. data/example/MakePair/package.yml +6 -0
  17. data/example/MakePair/scenario/{input → case1/input}/1.i +0 -0
  18. data/example/MakePair/scenario/{input → case1/input}/2.i +0 -0
  19. data/example/MakePair/scenario/{input → case1/input}/3.i +0 -0
  20. data/example/MakePair/scenario/{input → case1/input}/4.i +0 -0
  21. data/example/MakePair/scenario/{input → case1/input}/5.i +0 -0
  22. data/example/MakePair/scenario/{output → case1/output}/comb-1-2.pair +0 -0
  23. data/example/MakePair/scenario/{output → case1/output}/comb-1-3.pair +0 -0
  24. data/example/MakePair/scenario/{output → case1/output}/comb-1-4.pair +0 -0
  25. data/example/MakePair/scenario/{output → case1/output}/comb-1-5.pair +0 -0
  26. data/example/MakePair/scenario/{output → case1/output}/comb-2-3.pair +0 -0
  27. data/example/MakePair/scenario/{output → case1/output}/comb-2-4.pair +0 -0
  28. data/example/MakePair/scenario/{output → case1/output}/comb-2-5.pair +0 -0
  29. data/example/MakePair/scenario/{output → case1/output}/comb-3-4.pair +0 -0
  30. data/example/MakePair/scenario/{output → case1/output}/comb-3-5.pair +0 -0
  31. data/example/MakePair/scenario/{output → case1/output}/comb-4-5.pair +0 -0
  32. data/example/MakePair/scenario/{output → case1/output}/perm-1-2.pair +0 -0
  33. data/example/MakePair/scenario/{output → case1/output}/perm-1-3.pair +0 -0
  34. data/example/MakePair/scenario/{output → case1/output}/perm-1-4.pair +0 -0
  35. data/example/MakePair/scenario/{output → case1/output}/perm-1-5.pair +0 -0
  36. data/example/MakePair/scenario/{output → case1/output}/perm-2-1.pair +0 -0
  37. data/example/MakePair/scenario/{output → case1/output}/perm-2-3.pair +0 -0
  38. data/example/MakePair/scenario/{output → case1/output}/perm-2-4.pair +0 -0
  39. data/example/MakePair/scenario/{output → case1/output}/perm-2-5.pair +0 -0
  40. data/example/MakePair/scenario/{output → case1/output}/perm-3-1.pair +0 -0
  41. data/example/MakePair/scenario/{output → case1/output}/perm-3-2.pair +0 -0
  42. data/example/MakePair/scenario/{output → case1/output}/perm-3-4.pair +0 -0
  43. data/example/MakePair/scenario/{output → case1/output}/perm-3-5.pair +0 -0
  44. data/example/MakePair/scenario/{output → case1/output}/perm-4-1.pair +0 -0
  45. data/example/MakePair/scenario/{output → case1/output}/perm-4-2.pair +0 -0
  46. data/example/MakePair/scenario/{output → case1/output}/perm-4-3.pair +0 -0
  47. data/example/MakePair/scenario/{output → case1/output}/perm-4-5.pair +0 -0
  48. data/example/MakePair/scenario/{output → case1/output}/perm-5-1.pair +0 -0
  49. data/example/MakePair/scenario/{output → case1/output}/perm-5-2.pair +0 -0
  50. data/example/MakePair/scenario/{output → case1/output}/perm-5-3.pair +0 -0
  51. data/example/MakePair/scenario/{output → case1/output}/perm-5-4.pair +0 -0
  52. data/example/MakePair/scenario/{output → case1/output}/succ-1-2.pair +0 -0
  53. data/example/MakePair/scenario/{output → case1/output}/succ-2-3.pair +0 -0
  54. data/example/MakePair/scenario/{output → case1/output}/succ-3-4.pair +0 -0
  55. data/example/MakePair/scenario/{output → case1/output}/succ-4-5.pair +0 -0
  56. data/example/MakePair/scenario/case1/scenario.yml +42 -0
  57. data/example/MakePair/scenario/case2/input/10.i +0 -0
  58. data/example/MakePair/scenario/case2/input/11.i +0 -0
  59. data/example/MakePair/scenario/case2/input/9.i +0 -0
  60. data/example/MakePair/scenario/case2/output/comb-10-11.pair +0 -0
  61. data/example/MakePair/scenario/case2/output/comb-9-10.pair +0 -0
  62. data/example/MakePair/scenario/case2/output/comb-9-11.pair +0 -0
  63. data/example/MakePair/scenario/case2/output/perm-10-11.pair +0 -0
  64. data/example/MakePair/scenario/case2/output/perm-10-9.pair +0 -0
  65. data/example/MakePair/scenario/case2/output/perm-11-10.pair +0 -0
  66. data/example/MakePair/scenario/case2/output/perm-11-9.pair +0 -0
  67. data/example/MakePair/scenario/case2/output/perm-9-10.pair +0 -0
  68. data/example/MakePair/scenario/case2/output/perm-9-11.pair +0 -0
  69. data/example/MakePair/scenario/case2/output/succ-10-11.pair +0 -0
  70. data/example/MakePair/scenario/case2/output/succ-9-10.pair +0 -0
  71. data/example/MakePair/scenario/case2/scenario.yml +17 -0
  72. data/example/MakePair/scenario/case3/input/1.i +0 -0
  73. data/example/MakePair/scenario/case3/input/3.i +0 -0
  74. data/example/MakePair/scenario/case3/input/5.i +0 -0
  75. data/example/MakePair/scenario/case3/input/7.i +0 -0
  76. data/example/MakePair/scenario/case3/input/9.i +0 -0
  77. data/example/MakePair/scenario/case3/output/comb-1-3.pair +0 -0
  78. data/example/MakePair/scenario/case3/output/comb-1-5.pair +0 -0
  79. data/example/MakePair/scenario/case3/output/comb-1-7.pair +0 -0
  80. data/example/MakePair/scenario/case3/output/comb-1-9.pair +0 -0
  81. data/example/MakePair/scenario/case3/output/comb-3-5.pair +0 -0
  82. data/example/MakePair/scenario/case3/output/comb-3-7.pair +0 -0
  83. data/example/MakePair/scenario/case3/output/comb-3-9.pair +0 -0
  84. data/example/MakePair/scenario/case3/output/comb-5-7.pair +0 -0
  85. data/example/MakePair/scenario/case3/output/comb-5-9.pair +0 -0
  86. data/example/MakePair/scenario/case3/output/comb-7-9.pair +0 -0
  87. data/example/MakePair/scenario/case3/output/perm-1-3.pair +0 -0
  88. data/example/MakePair/scenario/case3/output/perm-1-5.pair +0 -0
  89. data/example/MakePair/scenario/case3/output/perm-1-7.pair +0 -0
  90. data/example/MakePair/scenario/case3/output/perm-1-9.pair +0 -0
  91. data/example/MakePair/scenario/case3/output/perm-3-1.pair +0 -0
  92. data/example/MakePair/scenario/case3/output/perm-3-5.pair +0 -0
  93. data/example/MakePair/scenario/case3/output/perm-3-7.pair +0 -0
  94. data/example/MakePair/scenario/case3/output/perm-3-9.pair +0 -0
  95. data/example/MakePair/scenario/case3/output/perm-5-1.pair +0 -0
  96. data/example/MakePair/scenario/case3/output/perm-5-3.pair +0 -0
  97. data/example/MakePair/scenario/case3/output/perm-5-7.pair +0 -0
  98. data/example/MakePair/scenario/case3/output/perm-5-9.pair +0 -0
  99. data/example/MakePair/scenario/case3/output/perm-7-1.pair +0 -0
  100. data/example/MakePair/scenario/case3/output/perm-7-3.pair +0 -0
  101. data/example/MakePair/scenario/case3/output/perm-7-5.pair +0 -0
  102. data/example/MakePair/scenario/case3/output/perm-7-9.pair +0 -0
  103. data/example/MakePair/scenario/case3/output/perm-9-1.pair +0 -0
  104. data/example/MakePair/scenario/case3/output/perm-9-3.pair +0 -0
  105. data/example/MakePair/scenario/case3/output/perm-9-5.pair +0 -0
  106. data/example/MakePair/scenario/case3/output/perm-9-7.pair +0 -0
  107. data/example/MakePair/scenario/case3/scenario.yml +39 -0
  108. data/example/PegasusWMS/Merge/Merge.pione +21 -0
  109. data/example/PegasusWMS/Merge/package.yml +2 -0
  110. data/example/PegasusWMS/Pipeline/Pipeline.pione +20 -0
  111. data/example/PegasusWMS/Pipeline/package.yml +2 -0
  112. data/example/PegasusWMS/Split/Split.pione +27 -0
  113. data/example/PegasusWMS/Split/package.yml +2 -0
  114. data/example/ScoreAggregation/package.yml +4 -0
  115. data/example/ScoreAggregation/scenario/case1/scenario.yml +27 -1
  116. data/example/SerialProcessing/package.yml +5 -1
  117. data/example/SerialProcessing/scenario/scenario.yml +10 -0
  118. data/lib/pione.rb +20 -71
  119. data/lib/pione/agent.rb +17 -0
  120. data/lib/pione/agent/basic-agent.rb +2 -4
  121. data/lib/pione/command.rb +1 -0
  122. data/lib/pione/command/option.rb +4 -1
  123. data/lib/pione/command/pione-package.rb +97 -0
  124. data/lib/pione/command/pione-task-worker.rb +11 -7
  125. data/lib/pione/component.rb +5 -0
  126. data/lib/pione/component/document.rb +22 -5
  127. data/lib/pione/component/package-archiver.rb +92 -0
  128. data/lib/pione/component/package-expander.rb +37 -0
  129. data/lib/pione/component/package-filename.rb +38 -0
  130. data/lib/pione/component/package-reader.rb +276 -0
  131. data/lib/pione/component/package.rb +50 -162
  132. data/lib/pione/front.rb +14 -0
  133. data/lib/pione/location.rb +5 -0
  134. data/lib/pione/location/basic-location.rb +47 -274
  135. data/lib/pione/location/data-location.rb +328 -0
  136. data/lib/pione/location/dropbox-location.rb +30 -7
  137. data/lib/pione/location/exception.rb +38 -0
  138. data/lib/pione/location/ftp-location.rb +24 -13
  139. data/lib/pione/location/git-repository-location.rb +153 -0
  140. data/lib/pione/location/http-location.rb +65 -0
  141. data/lib/pione/location/https-location.rb +37 -0
  142. data/lib/pione/location/local-location.rb +24 -5
  143. data/lib/pione/parser.rb +14 -0
  144. data/lib/pione/patch.rb +10 -0
  145. data/lib/pione/patch/drb-patch.rb +2 -2
  146. data/lib/pione/relay.rb +11 -0
  147. data/lib/pione/system/file-cache.rb +1 -1
  148. data/lib/pione/system/global.rb +15 -0
  149. data/lib/pione/tuple-space.rb +11 -0
  150. data/lib/pione/tuple-space/tuple-space-server.rb +1 -1
  151. data/lib/pione/util.rb +1 -0
  152. data/lib/pione/util/error-report.rb +7 -0
  153. data/lib/pione/util/misc.rb +2 -2
  154. data/lib/pione/util/zip.rb +60 -0
  155. data/lib/pione/version.rb +1 -1
  156. data/pione.gemspec +5 -1
  157. data/test/agent/spec_rule-provider.rb +2 -2
  158. data/test/command/spec_pione-package.rb +15 -0
  159. data/test/component/spec_document.rb +2 -2
  160. data/test/component/spec_package-archiver.rb +27 -0
  161. data/test/component/spec_package-expander.rb +11 -0
  162. data/test/component/spec_package-filename.rb +79 -0
  163. data/test/component/spec_package-reader.rb +100 -0
  164. data/test/component/spec_package.rb +50 -33
  165. data/test/location/http-behavior.rb +59 -0
  166. data/test/location/location-behavior.rb +8 -0
  167. data/test/location/spec_basic-location.rb +5 -1
  168. data/test/location/spec_git-repository-location.rb +143 -0
  169. data/test/location/spec_http-location.rb +28 -0
  170. data/test/location/spec_http-location/a.txt +1 -0
  171. data/test/location/spec_http-location/b.txt +1 -0
  172. data/test/location/spec_http-location/c.txt +1 -0
  173. data/test/location/spec_http-location/dir/d.txt +1 -0
  174. data/test/location/spec_https-location.rb +37 -0
  175. data/test/rule-handler/spec_flow-handler.rb +1 -1
  176. data/test/rule-handler/spec_update-criteria.rb +1 -1
  177. data/test/test-data/package/HelloWorld+v0.1.0.ppg +0 -0
  178. data/test/test-data/package/HelloWorld-gitrepos.zip +0 -0
  179. data/test/test-data/package/HelloWorld/HelloWorld.pione +5 -0
  180. data/test/test-data/package/HelloWorld/package.yml +6 -0
  181. data/test/test-data/package/HelloWorld/scenario/output/message.txt +1 -0
  182. data/test/test-data/package/HelloWorld/scenario/scenario.yml +3 -0
  183. data/test/test-data/package/TestPackage1+v0.1.0.ppg +0 -0
  184. data/test/{component/spec_package/TestPackage → test-data/package/TestPackage1}/Test.pione +3 -1
  185. data/test/test-data/package/TestPackage1/bin/count +11 -0
  186. data/test/test-data/package/TestPackage1/package.yml +9 -0
  187. data/test/{component/spec_package/TestPackage → test-data/package/TestPackage1}/scenario/case1/input/1.txt +0 -0
  188. data/test/test-data/package/TestPackage1/scenario/case1/output/1.count +1 -0
  189. data/test/test-data/package/TestPackage1/scenario/case1/scenario.yml +6 -0
  190. data/test/test-data/package/TestPackage1/scenario/case2/input/1.txt +2 -0
  191. data/test/test-data/package/TestPackage1/scenario/case2/input/2.txt +1 -0
  192. data/test/test-data/package/TestPackage1/scenario/case2/input/3.txt +3 -0
  193. data/test/test-data/package/TestPackage1/scenario/case2/output/1.count +1 -0
  194. data/test/test-data/package/TestPackage1/scenario/case2/output/2.count +1 -0
  195. data/test/test-data/package/TestPackage1/scenario/case2/output/3.count +1 -0
  196. data/test/test-data/package/TestPackage1/scenario/case2/scenario.yml +10 -0
  197. data/test/test-data/package/TestPackage1/scenario/case3/input/a.txt +1 -0
  198. data/test/test-data/package/TestPackage1/scenario/case3/input/b.txt +1 -0
  199. data/test/test-data/package/TestPackage1/scenario/case3/output/a.count +1 -0
  200. data/test/test-data/package/TestPackage1/scenario/case3/output/b.count +1 -0
  201. data/test/test-data/package/TestPackage1/scenario/case3/scenario.yml +8 -0
  202. data/test/test-util.rb +10 -146
  203. data/test/test-util/command.rb +53 -0
  204. data/test/test-util/package.rb +9 -0
  205. data/test/test-util/parser.rb +45 -0
  206. data/test/test-util/transformer.rb +50 -0
  207. data/test/test-util/webserver.rb +43 -0
  208. data/test/util/spec_error-report.rb +12 -3
  209. data/test/util/spec_zip.rb +36 -0
  210. metadata +282 -54
  211. data/example/MakePair/scenario/scenario.yml +0 -1
  212. data/test/component/spec_package/TestPackage/bin/count +0 -3
  213. data/test/component/spec_package/TestPackage/package.yml +0 -7
  214. data/test/component/spec_package/TestPackage/scenario/case1/scenario.yml +0 -1
@@ -0,0 +1,21 @@
1
+ Rule Main
2
+ output 'binaries.txt'
3
+ Flow
4
+ rule List
5
+ rule Join
6
+ End
7
+
8
+ Rule List
9
+ output 'bin_{$INDEX}.txt'
10
+ param $INDEX := 0.upto(2)
11
+ param $DIRS := ("/bin" | "/usr/bin" | "/usr/local/bin").all
12
+ Action
13
+ ls -l {$DIRS[$INDEX+1]} > {$O[1]}
14
+ End
15
+
16
+ Rule Join
17
+ input 'bin_*.txt'.all
18
+ output 'binaries.txt'
19
+ Action
20
+ cat {$I[1].as_string.join(" ")} > {$O[1]}
21
+ End
@@ -0,0 +1,2 @@
1
+ PackageName: PegasusWMSMerge
2
+ Version: 0.1.0
@@ -0,0 +1,20 @@
1
+ Rule Main
2
+ output 'count.txt'
3
+ Flow
4
+ rule GetHTML
5
+ rule Count
6
+ End
7
+
8
+ Rule GetHTML
9
+ output 'pegasus.html'
10
+ Action
11
+ curl -o {$O[1]} "http://pegasus.isi.edu"
12
+ End
13
+
14
+ Rule Count
15
+ input 'pegasus.html'
16
+ output 'count.txt'
17
+ Action
18
+ wc {$I[1]} > {$O[1]}
19
+ End
20
+
@@ -0,0 +1,2 @@
1
+ PackageName: PegasusWMSPipeline
2
+ Version: 0.1.0
@@ -0,0 +1,27 @@
1
+ Rule Main
2
+ output 'count.txt.*'.all
3
+ Flow
4
+ rule GetHTML
5
+ rule Split
6
+ rule Count
7
+ End
8
+
9
+ Rule GetHTML
10
+ output 'pegasus.html'
11
+ Action
12
+ curl -o {$O[1]} "http://pegasus.isi.edu"
13
+ End
14
+
15
+ Rule Split
16
+ input 'pegasus.html'
17
+ output 'part.*'.all
18
+ Action
19
+ split -l 100 -a 1 "{$I[1]}" part.
20
+ End
21
+
22
+ Rule Count
23
+ input 'part.*'
24
+ output 'count.txt.{$*}'
25
+ Action
26
+ wc {$I[1]} > {$O[1]}
27
+ End
@@ -0,0 +1,2 @@
1
+ PackageName: PegasusWMSSplit
2
+ Version: 0.1.0
@@ -1 +1,5 @@
1
1
  PackageName: ScoreAggregation
2
+ Documents:
3
+ - "ScoreAggregation.pione"
4
+ Scenarios:
5
+ - "scenario/case1"
@@ -1,3 +1,29 @@
1
1
  ScenarioName: case1
2
-
2
+ Inputs:
3
+ - "A.score"
4
+ - "B.score"
5
+ - "C.score"
6
+ - "D.score"
7
+ - "E.score"
8
+ - "F.score"
9
+ - "G.score"
10
+ - "H.score"
11
+ - "I.score"
12
+ - "J.score"
13
+ - "K.score"
14
+ - "L.score"
15
+ - "M.score"
16
+ - "N.score"
17
+ - "O.score"
18
+ - "P.score"
19
+ - "Q.score"
20
+ - "R.score"
21
+ - "S.score"
22
+ - "T.score"
23
+ - "U.score"
24
+ - "V.score"
25
+ - "W.score"
26
+ - "X.score"
27
+ - "Y.score"
28
+ - "Z.score"
3
29
 
@@ -1 +1,5 @@
1
- PackageName: SerialProcessing
1
+ PackageName: "SerialProcessing"
2
+ Documents:
3
+ - "SerialProcessing.pione"
4
+ Scenarios:
5
+ - "scenario"
@@ -0,0 +1,10 @@
1
+ ScenarioName: SerialProcessing Test
2
+ Outputs:
3
+ - "1.a"
4
+ - "2.a"
5
+ - "3.a"
6
+ - "4.a"
7
+ - "1.b"
8
+ - "2.b"
9
+ - "3.b"
10
+ - "4.b"
@@ -1,7 +1,11 @@
1
1
  #
2
2
  # load libraries
3
3
  #
4
+
5
+ # bundler
4
6
  require 'bundler/setup'
7
+
8
+ # standard
5
9
  require 'set'
6
10
  require 'socket'
7
11
  require 'digest'
@@ -24,11 +28,13 @@ require 'etc'
24
28
  require 'json'
25
29
  require 'rexml/document'
26
30
  require 'logger'
31
+ require 'ostruct'
32
+ require 'net/ftp'
33
+ require 'net/http'
27
34
 
35
+ # gems
28
36
  require 'uuidtools'
29
37
  require 'parslet'
30
- require 'ostruct'
31
- require 'net/ftp'
32
38
  require 'highline'
33
39
  require 'dropbox_sdk'
34
40
  require 'hamster'
@@ -39,10 +45,15 @@ require 'sys/uname'
39
45
  require 'simple-identity'
40
46
  require 'rainbow'
41
47
  require 'em-ftpd'
42
- require 'pione/patch/em-ftpd-patch'
48
+ require 'pione/patch/em-ftpd-patch' # patch
43
49
  require 'sys/cpu'
44
50
  require 'structx'
45
51
  require 'syslog-logger'
52
+ require 'zipruby'
53
+ require 'retriable'
54
+ require 'childprocess'
55
+
56
+ ChildProcess.posix_spawn = true
46
57
 
47
58
  #
48
59
  # load pione
@@ -50,14 +61,7 @@ require 'syslog-logger'
50
61
 
51
62
  require 'pione/version'
52
63
  require 'pione/util'
53
-
54
- # patch
55
- require 'pione/patch/array-patch'
56
- require 'pione/patch/drb-patch'
57
- require 'pione/patch/rinda-patch'
58
- require 'pione/patch/uri-patch'
59
- require 'pione/patch/monitor-patch'
60
-
64
+ require 'pione/patch'
61
65
  require 'pione/uri-scheme'
62
66
  require 'pione/location'
63
67
  require 'pione/log'
@@ -66,71 +70,16 @@ require 'pione/system'
66
70
  Pione.module_exec {const_set(:PioneObject, Pione::System::PioneObject)}
67
71
  Pione.module_exec {const_set(:Global, Pione::System::Global)}
68
72
 
69
- # relay
70
- require 'pione/relay/transmitter-socket'
71
- require 'pione/relay/trampoline'
72
- require 'pione/relay/receiver-socket'
73
- require 'pione/relay/relay-socket'
74
- require 'pione/relay/relay-client-db'
75
- require 'pione/relay/relay-account-db'
76
-
77
- # tuple-space
78
- require 'pione/tuple-space/tuple-space-server-interface'
79
- require 'pione/tuple-space/presence-notifier'
80
- require 'pione/tuple-space/tuple-space-server'
81
- require 'pione/tuple-space/tuple-space-receiver'
82
- require 'pione/tuple-space/tuple-space-provider'
83
- require 'pione/tuple-space/data-finder'
84
-
85
- # rule-handler
73
+ require 'pione/relay'
74
+ require 'pione/tuple-space'
86
75
  require 'pione/rule-handler.rb'
87
-
88
76
  require 'pione/model'
89
77
  require 'pione/component'
90
-
91
- # tuple
92
78
  require 'pione/tuple'
93
-
94
- # parser
95
- require 'pione/parser/parslet-extension'
96
- require 'pione/parser/common-parser'
97
- require 'pione/parser/literal-parser'
98
- require 'pione/parser/feature-expr-parser'
99
- require 'pione/parser/expr-parser'
100
- require 'pione/parser/flow-element-parser'
101
- require 'pione/parser/block-parser'
102
- require 'pione/parser/rule-definition-parser'
103
- require 'pione/parser/document-parser'
104
-
105
- # transformer
79
+ require 'pione/parser'
106
80
  require 'pione/transformer'
107
-
108
- # agent
109
- require 'pione/agent/basic-agent'
110
- require 'pione/agent/tuple-space-client'
111
- require 'pione/agent/command-listener'
112
- require 'pione/agent/task-worker'
113
- require 'pione/agent/input-generator'
114
- require 'pione/agent/rule-provider'
115
- require 'pione/agent/logger'
116
- require 'pione/agent/broker'
117
- require 'pione/agent/process-manager'
118
- require 'pione/agent/trivial-routine-worker'
119
- require 'pione/agent/tuple-space-server-client-life-checker'
120
- require 'pione/agent/messenger'
121
-
122
- # front
123
- require 'pione/front/basic-front'
124
- require 'pione/front/task-worker-owner'
125
- require 'pione/front/tuple-space-provider-owner'
126
- require 'pione/front/client-front'
127
- require 'pione/front/broker-front'
128
- require 'pione/front/task-worker-front'
129
- require 'pione/front/tuple-space-provider-front'
130
- require 'pione/front/tuple-space-receiver-front'
131
- require 'pione/front/relay-front'
132
-
133
- # command
81
+ require 'pione/agent'
82
+ require 'pione/front'
134
83
  require 'pione/command'
135
84
 
136
85
  #
@@ -0,0 +1,17 @@
1
+ module Pione
2
+ # Agent is a namespace for agents.
3
+ module Agent; end
4
+ end
5
+
6
+ require 'pione/agent/basic-agent'
7
+ require 'pione/agent/tuple-space-client'
8
+ require 'pione/agent/command-listener'
9
+ require 'pione/agent/task-worker'
10
+ require 'pione/agent/input-generator'
11
+ require 'pione/agent/rule-provider'
12
+ require 'pione/agent/logger'
13
+ require 'pione/agent/broker'
14
+ require 'pione/agent/process-manager'
15
+ require 'pione/agent/trivial-routine-worker'
16
+ require 'pione/agent/tuple-space-server-client-life-checker'
17
+ require 'pione/agent/messenger'
@@ -216,12 +216,10 @@ module Pione
216
216
 
217
217
  # Terminate to transit.
218
218
  def terminate
219
- # abort the agent when called by other thread
220
- abort unless @running_thread == Thread.current
221
- # transit to terminated
222
219
  begin
223
220
  res = call_transition_method(:terminated)
224
- rescue DRb::DRbConnError, DRb::ReplyReaderThreadError
221
+ rescue DRb::DRbConnError, DRb::ReplyReaderThreadError => e
222
+ Util::ErrorReport.warn("raised a connection error when we terminated", self, e, __FILE__, __LINE__)
225
223
  end
226
224
  # set agent state
227
225
  set_current_state(:terminated)
@@ -21,4 +21,5 @@ require 'pione/command/pione-clean'
21
21
  require 'pione/command/pione-syntax-checker'
22
22
  require 'pione/command/pione-log'
23
23
  require 'pione/command/pione-val'
24
+ require 'pione/command/pione-package'
24
25
 
@@ -140,8 +140,11 @@ module Pione
140
140
  end
141
141
 
142
142
  def setup_item_value(opt, item, defs)
143
- if item.value.kind_of?(Proc)
143
+ case item.value
144
+ when Proc
144
145
  opt.on(*defs, Proc.new{|*args| @option[item.name] = self.instance_exec(*args, &item.value)})
146
+ when :as_is
147
+ opt.on(*defs, Proc.new{|*args| @option[item.name] = args.first})
145
148
  end
146
149
  end
147
150
 
@@ -0,0 +1,97 @@
1
+ module Pione
2
+ module Command
3
+ class PionePackage < BasicCommand
4
+ define_info do
5
+ set_name "pione-package"
6
+ set_banner "PIONE package utility."
7
+ end
8
+
9
+ define_option do
10
+ use :color
11
+ use :debug
12
+
13
+ default :output, Location["./"]
14
+
15
+ define(:build) do |item|
16
+ item.long = '--build'
17
+ item.desc = 'build PIONE archive file(*.ppg)'
18
+ item.action = lambda do |option, location|
19
+ option[:action] = :build
20
+ end
21
+ end
22
+
23
+ define(:output) do |item|
24
+ item.short = "-o"
25
+ item.long = "--output=LOCATION"
26
+ item.desc = "output file or directory location"
27
+ item.value = lambda {|val| Location[val]}
28
+ end
29
+
30
+ define(:tag) do |item|
31
+ item.long = "--tag=NAME"
32
+ item.desc = "specify tag name"
33
+ item.value = :as_is
34
+ end
35
+
36
+ define(:tag) do |item|
37
+ item.long = "--branch=NAME"
38
+ item.desc = "specify branch name"
39
+ item.value = :as_is
40
+ end
41
+
42
+ define(:hash_id) do |item|
43
+ item.long = "--hash-id=HASH"
44
+ item.desc = "specify git hash id"
45
+ item.value = :as_is
46
+ end
47
+
48
+ validate do |option|
49
+ unless option[:output].directory?
50
+ abort("output location should be a directory: %s" % option[:output])
51
+ end
52
+ end
53
+ end
54
+
55
+ start do
56
+ if option[:action] == :build
57
+ # package is not found
58
+ if @argv.first.nil?
59
+ abort("There are no PIONE documents or packages.")
60
+ end
61
+
62
+ # archive
63
+ if ppg = try_to_archive(Location[git: @argv.first], Location[data: @argv.first])
64
+ puts "suceeded: %s" % ppg.address
65
+ else
66
+ abort("Faild to archive.")
67
+ end
68
+ end
69
+ end
70
+
71
+ private
72
+
73
+ def archive_from_directory_package
74
+ archiver = Component::PackageArchiver.new(Location[@argv.first])
75
+ end
76
+
77
+ def try_to_archive(*locations)
78
+ locations.each do |location|
79
+ begin
80
+ # make archiver
81
+ archiver_option = {tag: option[:tag], branch: option[:branch], hash_id: option[:hash_id]}
82
+ if location.location_type == :data
83
+ archiver_option[:tag] = Time.now.strftime("%Y%m%d%H%M")
84
+ end
85
+ archiver = Component::PackageArchiver.new(location, archiver_option)
86
+
87
+ # archive
88
+ return archiver.archive(option[:output])
89
+ rescue => e
90
+ Util::ErrorReport.warn("archiver faild: %s" % location, self, e, __FILE__, __LINE__)
91
+ end
92
+ end
93
+ return false
94
+ end
95
+ end
96
+ end
97
+ end
@@ -115,28 +115,32 @@ BANNER
115
115
  terminate do
116
116
  Global.monitor.synchronize do
117
117
  begin
118
+ # flag
118
119
  return if @terminated
120
+ @terminated = true
119
121
 
120
122
  # terminate the agent
121
123
  if @agent
122
124
  @agent.terminate
123
125
 
124
- while true
125
- break if @agent.terminated? and @agent.running_thread and @agent.running_thread.stop?
126
- sleep 1
126
+ Timeout.timeout(5) do
127
+ while true
128
+ break if @agent.terminated? and @agent.running_thread and @agent.running_thread.stop?
129
+ sleep 1
130
+ end
127
131
  end
128
132
  end
129
133
 
130
134
  # disconnect parent front
131
135
  option[:parent_front].remove_task_worker_front(self, option[:connection_id])
132
136
 
133
- # flag
134
- @terminated = true
135
137
  rescue DRb::DRbConnError, DRb::ReplyReaderThreadError => e
136
- ErrorReport.warn("Disconnected in termination process of task worker agent.", self, e, __FILE__, __LINE__)
138
+ Util::ErrorReport.warn("Disconnected in termination process of task worker agent.", self, e, __FILE__, __LINE__)
137
139
  rescue ThreadError => e
138
140
  # tuple space may be closed
139
- ErrorReport.warn("Failed in termination process of task worker agent.", self, e, __FILE__, __LINE__)
141
+ Util::ErrorReport.warn("Failed in termination process of task worker agent.", self, e, __FILE__, __LINE__)
142
+ rescue Timeout::Error => e
143
+ Util::ErrorReport.warn("Timeouted in termination of pione-task-worker.", self, e, __FILE__, __LINE__)
140
144
  end
141
145
  end
142
146
  end