scout-gear 7.1.0 → 7.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/.vimproject +29 -0
  3. data/VERSION +1 -1
  4. data/bin/scout +5 -1
  5. data/lib/rbbt-scout.rb +5 -0
  6. data/lib/scout/concurrent_stream.rb +6 -2
  7. data/lib/scout/config.rb +168 -0
  8. data/lib/scout/exceptions.rb +4 -3
  9. data/lib/scout/indiferent_hash/options.rb +1 -0
  10. data/lib/scout/indiferent_hash.rb +4 -2
  11. data/lib/scout/log/color.rb +3 -1
  12. data/lib/scout/log/progress/report.rb +1 -0
  13. data/lib/scout/log/progress/util.rb +1 -1
  14. data/lib/scout/log/progress.rb +5 -3
  15. data/lib/scout/log.rb +3 -2
  16. data/lib/scout/misc/monitor.rb +3 -0
  17. data/lib/scout/misc/system.rb +15 -0
  18. data/lib/scout/misc.rb +1 -0
  19. data/lib/scout/named_array.rb +68 -0
  20. data/lib/scout/open/stream.rb +38 -7
  21. data/lib/scout/path/find.rb +27 -3
  22. data/lib/scout/path/util.rb +7 -4
  23. data/lib/scout/persist/serialize.rb +7 -14
  24. data/lib/scout/persist.rb +21 -1
  25. data/lib/scout/resource/produce.rb +7 -94
  26. data/lib/scout/resource/software.rb +176 -0
  27. data/lib/scout/tsv/dumper.rb +107 -0
  28. data/lib/scout/tsv/index.rb +49 -0
  29. data/lib/scout/tsv/parser.rb +203 -30
  30. data/lib/scout/tsv/path.rb +13 -0
  31. data/lib/scout/tsv/persist/adapter.rb +348 -0
  32. data/lib/scout/tsv/persist/tokyocabinet.rb +113 -0
  33. data/lib/scout/tsv/persist.rb +15 -0
  34. data/lib/scout/tsv/traverse.rb +48 -0
  35. data/lib/scout/tsv/util.rb +24 -0
  36. data/lib/scout/tsv.rb +16 -3
  37. data/lib/scout/work_queue/worker.rb +3 -3
  38. data/lib/scout/work_queue.rb +22 -7
  39. data/lib/scout/workflow/definition.rb +93 -4
  40. data/lib/scout/workflow/step/config.rb +18 -0
  41. data/lib/scout/workflow/step/dependencies.rb +40 -0
  42. data/lib/scout/workflow/step/file.rb +15 -0
  43. data/lib/scout/workflow/step/info.rb +31 -4
  44. data/lib/scout/workflow/step/provenance.rb +148 -0
  45. data/lib/scout/workflow/step.rb +68 -19
  46. data/lib/scout/workflow/task.rb +3 -2
  47. data/lib/scout/workflow/usage.rb +1 -1
  48. data/lib/scout/workflow.rb +11 -3
  49. data/lib/scout-gear.rb +1 -0
  50. data/lib/scout.rb +1 -0
  51. data/scout-gear.gemspec +34 -3
  52. data/scout_commands/find +1 -1
  53. data/scout_commands/workflow/task +16 -10
  54. data/share/software/install_helpers +523 -0
  55. data/test/scout/log/test_progress.rb +0 -2
  56. data/test/scout/misc/test_system.rb +21 -0
  57. data/test/scout/open/test_stream.rb +159 -0
  58. data/test/scout/path/test_find.rb +14 -7
  59. data/test/scout/resource/test_software.rb +24 -0
  60. data/test/scout/test_config.rb +66 -0
  61. data/test/scout/test_meta_extension.rb +10 -0
  62. data/test/scout/test_named_array.rb +19 -0
  63. data/test/scout/test_persist.rb +35 -0
  64. data/test/scout/test_tmpfile.rb +2 -2
  65. data/test/scout/test_tsv.rb +41 -1
  66. data/test/scout/test_work_queue.rb +40 -13
  67. data/test/scout/tsv/persist/test_adapter.rb +34 -0
  68. data/test/scout/tsv/persist/test_tokyocabinet.rb +92 -0
  69. data/test/scout/tsv/test_dumper.rb +44 -0
  70. data/test/scout/tsv/test_index.rb +64 -0
  71. data/test/scout/tsv/test_parser.rb +86 -0
  72. data/test/scout/tsv/test_persist.rb +36 -0
  73. data/test/scout/tsv/test_traverse.rb +9 -0
  74. data/test/scout/tsv/test_util.rb +0 -0
  75. data/test/scout/work_queue/test_worker.rb +3 -3
  76. data/test/scout/workflow/step/test_dependencies.rb +25 -0
  77. data/test/scout/workflow/step/test_info.rb +15 -17
  78. data/test/scout/workflow/step/test_load.rb +16 -18
  79. data/test/scout/workflow/step/test_provenance.rb +25 -0
  80. data/test/scout/workflow/test_step.rb +206 -10
  81. data/test/scout/workflow/test_task.rb +0 -3
  82. data/test/test_helper.rb +6 -0
  83. metadata +33 -2
@@ -15,22 +15,218 @@ class TestWorkflowStep < Test::Unit::TestCase
15
15
  end
16
16
 
17
17
  def test_dependency
18
- Log.with_severity 0 do
19
- tmpfile = tmpdir.test_step
20
- step1 = Step.new tmpfile.step1, ["12"] do |s|
21
- s.length
18
+ tmpfile = tmpdir.test_step
19
+ step1 = Step.new tmpfile.step1, ["12"] do |s|
20
+ s.length
21
+ end
22
+
23
+ step2 = Step.new tmpfile.step2 do
24
+ step1 = dependencies.first
25
+ step1.inputs.first + " has " + step1.load.to_s + " characters"
26
+ end
27
+
28
+ step2.dependencies = [step1]
29
+
30
+
31
+ assert_equal "12 has 2 characters", step2.run
32
+ assert_equal "12 has 2 characters", step2.run
33
+ end
34
+
35
+ def test_streaming
36
+ tmpfile = tmpdir.test_step
37
+
38
+ times = 10_000
39
+ sleep = 1 / times
40
+
41
+ step1 = Step.new tmpfile.step1, [times, sleep] do |times,sleep|
42
+ Open.open_pipe do |sin|
43
+ times.times do |i|
44
+ sin.puts "line-#{i}"
45
+ sleep sleep
46
+ end
22
47
  end
48
+ end
49
+ step1.type = :array
23
50
 
24
- step2 = Step.new tmpfile.step2 do
25
- step1 = dependencies.first
26
- step1.inputs.first + " has " + step1.load.to_s + " characters"
51
+ step2 = Step.new tmpfile.step2 do
52
+ step1 = dependencies.first
53
+ stream = step1.get_stream
54
+
55
+ Open.open_pipe do |sin|
56
+ while line = stream.gets
57
+ num = line.split("-").last
58
+ next if num.to_i % 2 == 1
59
+ sin.puts line
60
+ end
27
61
  end
62
+ end
63
+ step2.type = :array
64
+ step2.dependencies = [step1]
65
+
66
+ step1.run
67
+ step1.join
68
+ assert step1.path.read.end_with? "line-#{times-1}\n"
28
69
 
29
- step2.dependencies = [step1]
70
+ step1.clean
30
71
 
72
+ stream = step2.exec
73
+ lines = []
74
+ while line = stream.gets
75
+ lines << line
76
+ end
77
+ assert_equal times/2, lines.length
78
+
79
+ stream = step2.run
80
+ assert step1.streaming?
81
+ assert step2.streaming?
31
82
 
32
- assert_equal "12 has 2 characters", step2.run
33
- assert_equal "12 has 2 characters", step2.run
83
+ lines = []
84
+ while line = stream.gets
85
+ lines << line
34
86
  end
87
+
88
+ assert step1.path.read.end_with? "line-#{times-1}\n"
89
+ assert_equal times/2, lines.length
90
+ assert_equal times/2, step2.path.read.split("\n").length
91
+ end
92
+
93
+ def test_streaming_duplicate
94
+ tmpfile = tmpdir.test_step
95
+
96
+ times = 10_000
97
+ sleep = 0.01 / times
98
+
99
+ step1 = Step.new tmpfile.step1, [times, sleep] do |times,sleep|
100
+ Open.open_pipe do |sin|
101
+ times.times do |i|
102
+ sin.puts "line-#{i}"
103
+ sleep sleep
104
+ end
105
+ end
106
+ end
107
+ step1.type = :array
108
+
109
+ step2 = Step.new tmpfile.step2 do
110
+ step1 = dependencies.first
111
+ stream = step1.get_stream
112
+
113
+ Open.open_pipe do |sin|
114
+ while line = stream.gets
115
+ num = line.split("-").last
116
+ next if num.to_i % 2 == 1
117
+ sin.puts line
118
+ end
119
+ end
120
+ end
121
+ step2.type = :array
122
+ step2.dependencies = [step1]
123
+
124
+ step3 = Step.new tmpfile.step3 do
125
+ step1, step2 = dependencies
126
+ stream = step2.get_stream
127
+
128
+ Open.open_pipe do |sin|
129
+ while line = stream.gets
130
+ num = line.split("-").last
131
+ next if num.to_i % 2 == 1
132
+ sin.puts line
133
+ end
134
+ end
135
+ end
136
+ step3.type = :array
137
+ step3.dependencies = [step1, step2]
138
+
139
+ step3.recursive_clean
140
+
141
+ stream = step3.run
142
+ out = []
143
+ while l = stream.gets
144
+ out << l
145
+ end
146
+ assert_equal times/2, out.length
147
+ end
148
+
149
+ def test_fork_stream
150
+ tmpfile = tmpdir.test_step
151
+
152
+ times = 10_000
153
+ sleep = 0.1 / times
154
+
155
+ step1 = Step.new tmpfile.step1, [times, sleep] do |times,sleep|
156
+ Open.open_pipe do |sin|
157
+ times.times do |i|
158
+ sin.puts "line-#{i}"
159
+ sleep sleep
160
+ end
161
+ end
162
+ end
163
+ step1.type = :array
164
+
165
+ step2 = Step.new tmpfile.step2 do
166
+ step1 = dependencies.first
167
+ stream = step1.get_stream
168
+
169
+ Open.open_pipe do |sin|
170
+ while line = stream.gets
171
+ num = line.split("-").last
172
+ next if num.to_i % 2 == 1
173
+ sin.puts "S2: " + line
174
+ end
175
+ end
176
+ end
177
+ step2.type = :array
178
+ step2.dependencies = [step1]
179
+
180
+ step3 = Step.new tmpfile.step3 do
181
+ step1 = dependencies.first
182
+ stream = step1.get_stream
183
+
184
+ Open.open_pipe do |sin|
185
+ while line = stream.gets
186
+ num = line.split("-").last
187
+ next if num.to_i % 2 == 0
188
+ sin.puts "S3: " + line
189
+ end
190
+ end
191
+ end
192
+ step3.type = :array
193
+ step3.dependencies = [step1]
194
+
195
+
196
+ step4 = Step.new tmpfile.step4 do
197
+ step2, step3 = dependencies
198
+
199
+ mutex = Mutex.new
200
+ Open.open_pipe do |sin|
201
+ t2 = Thread.new do
202
+ stream2 = step2.get_stream
203
+ while line = stream2.gets
204
+ sin.puts line
205
+ end
206
+ end
207
+
208
+ t3 = Thread.new do
209
+ stream3 = step3.get_stream
210
+ while line = stream3.gets
211
+ sin.puts line
212
+ end
213
+ end
214
+ t2.join
215
+ t3.join
216
+ end
217
+ end
218
+ step4.type = :array
219
+ step4.dependencies = [step2, step3]
220
+
221
+ lines = []
222
+ io = step4.run
223
+ Log::ProgressBar.with_bar do |b|
224
+ while line = io.gets
225
+ b.tick
226
+ lines << line.strip
227
+ end
228
+ end
229
+
230
+ assert_equal times, lines.length
35
231
  end
36
232
  end
@@ -37,7 +37,6 @@ class TestTask < Test::Unit::TestCase
37
37
  end
38
38
 
39
39
  def test_override_inputs_block
40
- Log.severity = 0
41
40
  wf = Workflow.annonymous_workflow "TaskInputs" do
42
41
  input :input1, :string
43
42
  task :step1 => :string do |i| i end
@@ -55,7 +54,6 @@ class TestTask < Test::Unit::TestCase
55
54
  end
56
55
 
57
56
  def test_task_override_dep
58
- Log.severity = 0
59
57
  wf = Workflow.annonymous_workflow "TaskInputs" do
60
58
  input :input1, :integer
61
59
  task :step1 => :integer do |i| i end
@@ -171,7 +169,6 @@ class TestTask < Test::Unit::TestCase
171
169
  end
172
170
  end
173
171
 
174
- Log.severity = 0
175
172
  job = wf.job(:my_sum, :vv1 => 2, :vv2 => 3)
176
173
  assert_equal 5, job.run
177
174
  end
data/test/test_helper.rb CHANGED
@@ -22,16 +22,22 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
22
22
  #require 'scout/helper/misc/development'
23
23
  require 'scout/tmpfile'
24
24
  require 'scout/log'
25
+ require 'scout/open'
25
26
  require 'scout/persist'
26
27
  require 'scout/workflow'
27
28
 
28
29
  class Test::Unit::TestCase
29
30
 
31
+ def assert_equal_path(path1, path2)
32
+ assert_equal File.expand_path(path1), File.expand_path(path2)
33
+ end
34
+
30
35
  def tmpdir
31
36
  @tmpdir = Path.setup('tmp/test_tmpdir').find
32
37
  end
33
38
 
34
39
  setup do
40
+ Log::ProgressBar.default_severity = 0
35
41
  Persist.cache_dir = tmpdir.var.cache
36
42
  Open.remote_cache_dir = tmpdir.var.cache
37
43
  Workflow.directory = tmpdir.var.jobs
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scout-gear
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.1.0
4
+ version: 7.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-01 00:00:00.000000000 Z
11
+ date: 2023-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: term-ansicolor
@@ -97,10 +97,12 @@ files:
97
97
  - Rakefile
98
98
  - VERSION
99
99
  - bin/scout
100
+ - lib/rbbt-scout.rb
100
101
  - lib/scout-gear.rb
101
102
  - lib/scout.rb
102
103
  - lib/scout/cmd.rb
103
104
  - lib/scout/concurrent_stream.rb
105
+ - lib/scout/config.rb
104
106
  - lib/scout/exceptions.rb
105
107
  - lib/scout/indiferent_hash.rb
106
108
  - lib/scout/indiferent_hash/case_insensitive.rb
@@ -119,6 +121,8 @@ files:
119
121
  - lib/scout/misc/format.rb
120
122
  - lib/scout/misc/insist.rb
121
123
  - lib/scout/misc/monitor.rb
124
+ - lib/scout/misc/system.rb
125
+ - lib/scout/named_array.rb
122
126
  - lib/scout/open.rb
123
127
  - lib/scout/open/lock.rb
124
128
  - lib/scout/open/remote.rb
@@ -137,6 +141,7 @@ files:
137
141
  - lib/scout/resource/produce.rb
138
142
  - lib/scout/resource/produce/rake.rb
139
143
  - lib/scout/resource/scout.rb
144
+ - lib/scout/resource/software.rb
140
145
  - lib/scout/resource/util.rb
141
146
  - lib/scout/semaphore.rb
142
147
  - lib/scout/simple_opt.rb
@@ -147,7 +152,15 @@ files:
147
152
  - lib/scout/simple_opt/setup.rb
148
153
  - lib/scout/tmpfile.rb
149
154
  - lib/scout/tsv.rb
155
+ - lib/scout/tsv/dumper.rb
156
+ - lib/scout/tsv/index.rb
150
157
  - lib/scout/tsv/parser.rb
158
+ - lib/scout/tsv/path.rb
159
+ - lib/scout/tsv/persist.rb
160
+ - lib/scout/tsv/persist/adapter.rb
161
+ - lib/scout/tsv/persist/tokyocabinet.rb
162
+ - lib/scout/tsv/traverse.rb
163
+ - lib/scout/tsv/util.rb
151
164
  - lib/scout/work_queue.rb
152
165
  - lib/scout/work_queue/socket.rb
153
166
  - lib/scout/work_queue/worker.rb
@@ -155,8 +168,12 @@ files:
155
168
  - lib/scout/workflow/definition.rb
156
169
  - lib/scout/workflow/documentation.rb
157
170
  - lib/scout/workflow/step.rb
171
+ - lib/scout/workflow/step/config.rb
172
+ - lib/scout/workflow/step/dependencies.rb
173
+ - lib/scout/workflow/step/file.rb
158
174
  - lib/scout/workflow/step/info.rb
159
175
  - lib/scout/workflow/step/load.rb
176
+ - lib/scout/workflow/step/provenance.rb
160
177
  - lib/scout/workflow/task.rb
161
178
  - lib/scout/workflow/task/inputs.rb
162
179
  - lib/scout/workflow/usage.rb
@@ -173,6 +190,7 @@ files:
173
190
  - scout_commands/workflow/task_old
174
191
  - share/color/color_names
175
192
  - share/color/diverging_colors.hex
193
+ - share/software/install_helpers
176
194
  - test/scout/indiferent_hash/test_case_insensitive.rb
177
195
  - test/scout/indiferent_hash/test_options.rb
178
196
  - test/scout/log/test_color.rb
@@ -180,6 +198,7 @@ files:
180
198
  - test/scout/misc/test_digest.rb
181
199
  - test/scout/misc/test_filesystem.rb
182
200
  - test/scout/misc/test_insist.rb
201
+ - test/scout/misc/test_system.rb
183
202
  - test/scout/open/test_lock.rb
184
203
  - test/scout/open/test_remote.rb
185
204
  - test/scout/open/test_stream.rb
@@ -191,6 +210,7 @@ files:
191
210
  - test/scout/persist/test_serialize.rb
192
211
  - test/scout/resource/test_path.rb
193
212
  - test/scout/resource/test_produce.rb
213
+ - test/scout/resource/test_software.rb
194
214
  - test/scout/resource/test_util.rb
195
215
  - test/scout/simple_opt/test_doc.rb
196
216
  - test/scout/simple_opt/test_get.rb
@@ -198,10 +218,12 @@ files:
198
218
  - test/scout/simple_opt/test_setup.rb
199
219
  - test/scout/test_cmd.rb
200
220
  - test/scout/test_concurrent_stream.rb
221
+ - test/scout/test_config.rb
201
222
  - test/scout/test_indiferent_hash.rb
202
223
  - test/scout/test_log.rb
203
224
  - test/scout/test_meta_extension.rb
204
225
  - test/scout/test_misc.rb
226
+ - test/scout/test_named_array.rb
205
227
  - test/scout/test_open.rb
206
228
  - test/scout/test_path.rb
207
229
  - test/scout/test_persist.rb
@@ -211,11 +233,20 @@ files:
211
233
  - test/scout/test_tsv.rb
212
234
  - test/scout/test_work_queue.rb
213
235
  - test/scout/test_workflow.rb
236
+ - test/scout/tsv/persist/test_adapter.rb
237
+ - test/scout/tsv/persist/test_tokyocabinet.rb
238
+ - test/scout/tsv/test_dumper.rb
239
+ - test/scout/tsv/test_index.rb
214
240
  - test/scout/tsv/test_parser.rb
241
+ - test/scout/tsv/test_persist.rb
242
+ - test/scout/tsv/test_traverse.rb
243
+ - test/scout/tsv/test_util.rb
215
244
  - test/scout/work_queue/test_socket.rb
216
245
  - test/scout/work_queue/test_worker.rb
246
+ - test/scout/workflow/step/test_dependencies.rb
217
247
  - test/scout/workflow/step/test_info.rb
218
248
  - test/scout/workflow/step/test_load.rb
249
+ - test/scout/workflow/step/test_provenance.rb
219
250
  - test/scout/workflow/task/test_inputs.rb
220
251
  - test/scout/workflow/test_definition.rb
221
252
  - test/scout/workflow/test_documentation.rb