nera 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +6 -0
- data/Manifest.txt +14 -4
- data/Rakefile +18 -16
- data/config/website.yml +2 -0
- data/config/website.yml.sample +2 -0
- data/lib/nera/nera_database.rb +1 -0
- data/lib/nera/nera_job_layer_controller.rb +16 -10
- data/lib/nera/nera_parameter_layer_controller.rb +39 -2
- data/lib/nera/nera_parameter_records.rb +19 -3
- data/lib/nera/nera_run_layer_controller.rb +39 -31
- data/lib/nera/nera_run_records.rb +2 -3
- data/lib/nera.rb +1 -1
- data/{scripts → script}/console +2 -2
- data/script/txt2html +71 -0
- data/test/test_nera_job_layer_controller.rb +4 -1
- data/test/test_nera_parameter_layer_controller.rb +66 -9
- data/test/test_nera_parameter_records.rb +38 -1
- data/test/test_nera_run_layer_controller.rb +10 -3
- data/website/index.html +77 -0
- data/website/index.txt +55 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +159 -0
- data/website/template.html.erb +50 -0
- data/website/temporary/temp.html +177 -0
- data/website/temporary/temp.txt +138 -0
- metadata +19 -18
- /data/{scripts → script}/destroy +0 -0
- /data/{scripts → script}/generate +0 -0
- /data/{scripts → script}/make_manifest.rb +0 -0
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -5,6 +5,8 @@ Rakefile
|
|
5
5
|
bin/nera
|
6
6
|
bin/nera_addhost
|
7
7
|
bin/nera_addsim
|
8
|
+
config/website.yml
|
9
|
+
config/website.yml.sample
|
8
10
|
lib/nera.rb
|
9
11
|
lib/nera/nera_cui.rb
|
10
12
|
lib/nera/nera_database.rb
|
@@ -23,10 +25,11 @@ lib/nera/nera_simulator_layer_controller.rb
|
|
23
25
|
lib/nera/nera_simulator_records.rb
|
24
26
|
lib/nera_addhost/add_hosts.rb
|
25
27
|
lib/nera_addsim/make_simulator.rb
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
28
|
+
script/console
|
29
|
+
script/destroy
|
30
|
+
script/generate
|
31
|
+
script/make_manifest.rb
|
32
|
+
script/txt2html
|
30
33
|
test/runner.rb
|
31
34
|
test/test_helper.rb
|
32
35
|
test/test_nera_database.rb
|
@@ -42,3 +45,10 @@ test/test_nera_run_records.rb
|
|
42
45
|
test/test_nera_simulator.rb
|
43
46
|
test/test_nera_simulator_layer_controller.rb
|
44
47
|
test/test_nera_simulator_records.rb
|
48
|
+
website/index.html
|
49
|
+
website/index.txt
|
50
|
+
website/javascripts/rounded_corners_lite.inc.js
|
51
|
+
website/stylesheets/screen.css
|
52
|
+
website/template.html.erb
|
53
|
+
website/temporary/temp.html
|
54
|
+
website/temporary/temp.txt
|
data/Rakefile
CHANGED
@@ -1,28 +1,30 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'rubygems'
|
2
|
+
gem 'hoe', '>= 2.1.0'
|
3
|
+
require 'hoe'
|
4
|
+
require 'fileutils'
|
5
|
+
require './lib/nera'
|
6
|
+
|
7
|
+
Hoe.plugin :newgem
|
8
|
+
Hoe.plugin :website
|
9
|
+
# Hoe.plugin :cucumberfeatures
|
3
10
|
|
4
11
|
# Generate all the Rake tasks
|
5
12
|
# Run 'rake -T' to see list of generated tasks (from gem root directory)
|
6
|
-
$hoe = Hoe.
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
13
|
+
$hoe = Hoe.spec 'nera' do
|
14
|
+
self.developer 'Yohsuke Murase', 'murase@serow.t.u-tokyo.ac.jp'
|
15
|
+
# self.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
|
16
|
+
self.rubyforge_name = self.name # TODO this is default value
|
17
|
+
self.extra_deps = [
|
11
18
|
['net-ssh','>= 2.0.11'],
|
12
19
|
['net-sftp','>= 2.0.2']
|
13
20
|
]
|
14
|
-
|
15
|
-
['newgem', "= #{::Newgem::VERSION}"]
|
16
|
-
]
|
17
|
-
|
18
|
-
p.clean_globs |= %w[**/.DS_Store tmp *.log]
|
19
|
-
path = (p.rubyforge_name == p.name) ? p.rubyforge_name : "\#{p.rubyforge_name}/\#{p.name}"
|
20
|
-
p.remote_rdoc_dir = File.join(path.gsub(/^#{p.rubyforge_name}\/?/,''), 'rdoc')
|
21
|
-
p.rsync_args = '-av --delete --ignore-errors'
|
21
|
+
|
22
22
|
end
|
23
23
|
|
24
|
-
require 'newgem/tasks'
|
24
|
+
require 'newgem/tasks'
|
25
25
|
Dir['tasks/**/*.rake'].each { |t| load t }
|
26
26
|
|
27
|
+
|
27
28
|
# TODO - want other tests/tasks run by default? Add them to the list
|
29
|
+
# remove_task :default
|
28
30
|
# task :default => [:spec, :features]
|
data/config/website.yml
ADDED
data/lib/nera/nera_database.rb
CHANGED
@@ -76,10 +76,13 @@ module NERA
|
|
76
76
|
param_recs.set_yaml_file( @db_folders.path_to_parameters_yaml( klass) )
|
77
77
|
run_records = NERA::RunRecords.new( @db_folders.path_to_runs_table( klass, d[:parameter_id]), param_recs, d[:parameter_id] )
|
78
78
|
run_records.set_yaml_file( @db_folders.path_to_runs_yaml( klass, d[:parameter_id]) )
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
79
|
+
param_recs.transaction {
|
80
|
+
run_records.transaction {
|
81
|
+
a = run_records.destroy_job_id( jid)
|
82
|
+
raise RuntimeError, "must not happen" unless a
|
83
|
+
FileUtils.rm( @db_folders.path_to_job_script(jid) )
|
84
|
+
param_recs.update_num_runs( d[:parameter_id], run_records.list_all_finished.size, run_records.list_all.size)
|
85
|
+
}
|
83
86
|
}
|
84
87
|
destroyed_jobids << jid
|
85
88
|
@db_folders.logger.info(self.class.to_s) {
|
@@ -139,11 +142,14 @@ module NERA
|
|
139
142
|
fpath = @db_folders.path_to_include_layer + filename
|
140
143
|
return nil unless File.exist?(fpath)
|
141
144
|
jinfo, rinfo = expand_and_parse( fpath)
|
142
|
-
run_layer_path, run_recs = check_consistency( jinfo, rinfo)
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
145
|
+
run_layer_path, run_recs, param_recs, param_id = check_consistency( jinfo, rinfo)
|
146
|
+
param_recs.transaction {
|
147
|
+
run_recs.transaction {
|
148
|
+
folder_path = fpath.sub(/.tar.bz2$/,'/')
|
149
|
+
file_move( folder_path, run_layer_path, jinfo[:run_ids])
|
150
|
+
update_tables( run_recs, jinfo, rinfo)
|
151
|
+
param_recs.update_num_runs( param_id, run_recs.list_all_finished.size, run_recs.list_all.size)
|
152
|
+
}
|
147
153
|
}
|
148
154
|
remove_files( fpath)
|
149
155
|
@db_folders.logger.info(self.class.to_s) {
|
@@ -211,7 +217,7 @@ module NERA
|
|
211
217
|
raise "Run info is not consistent with job info!" unless jinfo[:run_ids] == rinfo.keys.sort
|
212
218
|
|
213
219
|
run_layer_path = @db_folders.path_to_run_layer( sim_class, jinfo[:param_id])
|
214
|
-
return run_layer_path, run_recs
|
220
|
+
return run_layer_path, run_recs, param_records, jinfo[:param_id]
|
215
221
|
end
|
216
222
|
|
217
223
|
def conflicting
|
@@ -35,8 +35,29 @@ module NERA
|
|
35
35
|
p_tab_path = @db_folders.path_to_parameters_table( @sim_class)
|
36
36
|
@param_records = NERA::ParameterRecords.new( p_tab_path, sim_records, sim_id)
|
37
37
|
@param_records.set_yaml_file( @db_folders.path_to_parameters_yaml( @sim_class) )
|
38
|
+
|
39
|
+
convert_to_recent_format
|
38
40
|
end
|
39
41
|
|
42
|
+
# update the parameters table to the most recent one
|
43
|
+
private
|
44
|
+
def convert_to_recent_format
|
45
|
+
@param_records.transaction do
|
46
|
+
recs = @param_records.list_active
|
47
|
+
found = recs.find_all do |rec|
|
48
|
+
rec[:num_finished_runs] == nil or rec[:num_all_runs] == nil
|
49
|
+
end
|
50
|
+
found.each do |rec|
|
51
|
+
param_id = rec[:id]
|
52
|
+
run_records = NERA::RunRecords.new( @db_folders.path_to_runs_table( @sim_class, param_id), @param_records, param_id )
|
53
|
+
num_all_runs = run_records.list_all.size
|
54
|
+
num_finished_runs = run_records.list_all_finished.size
|
55
|
+
@param_records.update_num_runs( param_id, num_finished_runs, num_all_runs)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
public
|
40
61
|
def parameters_list_in_csv
|
41
62
|
l_active = @param_records.list_active
|
42
63
|
header = @param_records.keys.dup
|
@@ -54,8 +75,14 @@ module NERA
|
|
54
75
|
strings << found[2].to_s
|
55
76
|
end
|
56
77
|
end
|
78
|
+
strings[1] = "#{strings[1]}/#{strings[2]}"
|
79
|
+
strings.delete_at(2)
|
57
80
|
csv_list << strings.join(", ")
|
58
81
|
end
|
82
|
+
|
83
|
+
header.delete( :num_finished_runs)
|
84
|
+
header[1] = :num_runs
|
85
|
+
|
59
86
|
return header.join(", "), csv_list
|
60
87
|
end
|
61
88
|
|
@@ -150,12 +177,21 @@ module NERA
|
|
150
177
|
elsif p_hash[key]
|
151
178
|
strings << p_hash[key].to_s
|
152
179
|
elsif p_hash[key] == nil
|
153
|
-
|
154
|
-
|
180
|
+
if key == :num_finished_runs or key == :num_all_runs
|
181
|
+
strings << 0
|
182
|
+
else
|
183
|
+
found = @sim_class::Parameters.find do |param| param[0] == key end
|
184
|
+
strings << found[2].to_s
|
185
|
+
end
|
155
186
|
end
|
156
187
|
end
|
188
|
+
strings[1] = "#{strings[1].to_i}/#{strings[2].to_i}"
|
189
|
+
strings.delete_at(2)
|
157
190
|
csv_list << strings.join(", ")
|
158
191
|
end
|
192
|
+
|
193
|
+
header.delete( :num_finished_runs)
|
194
|
+
header[1] = :num_runs
|
159
195
|
return header.join(", "), csv_list
|
160
196
|
end
|
161
197
|
|
@@ -173,6 +209,7 @@ module NERA
|
|
173
209
|
@db_folders.logger.info(self.class.to_s) {
|
174
210
|
"reverted a parameter set in the trashbox (#{@sim_class.to_s}/#{id})"
|
175
211
|
}
|
212
|
+
convert_to_recent_format
|
176
213
|
}
|
177
214
|
return true
|
178
215
|
end
|
@@ -8,6 +8,8 @@ module NERA
|
|
8
8
|
|
9
9
|
# keys of the parameter table
|
10
10
|
ATTRIBUTES_PART = [ [:id, Integer],
|
11
|
+
[:num_finished_runs, Integer],
|
12
|
+
[:num_all_runs, Integer],
|
11
13
|
[:created_at, DateTime],
|
12
14
|
[:updated_at, DateTime],
|
13
15
|
[:in_trashbox?, Symbol] ] # :active or :trashbox
|
@@ -48,7 +50,7 @@ module NERA
|
|
48
50
|
@db = NERA::Database.new( db_file, sim_id)
|
49
51
|
@db.add_observer( sim_records)
|
50
52
|
end
|
51
|
-
|
53
|
+
|
52
54
|
# argument is the path to parameters.yml
|
53
55
|
def set_yaml_file( yaml_path)
|
54
56
|
@db.set_yaml_file( yaml_path)
|
@@ -74,7 +76,7 @@ module NERA
|
|
74
76
|
NERA::Database.create_table( db_file)
|
75
77
|
end
|
76
78
|
|
77
|
-
#
|
79
|
+
# add one record
|
78
80
|
def add( param_hash)
|
79
81
|
# check the argument
|
80
82
|
unless param_hash.is_a?(Hash)
|
@@ -117,7 +119,7 @@ module NERA
|
|
117
119
|
|
118
120
|
# add a parameter
|
119
121
|
d = DateTime.now
|
120
|
-
h = {:created_at => d, :updated_at => d, :in_trashbox? => :active}
|
122
|
+
h = {:num_finished_runs => 0, :num_all_runs => 0, :created_at => d, :updated_at => d, :in_trashbox? => :active}
|
121
123
|
ps = param_hash.dup
|
122
124
|
@sim_class::Parameters.each do |p|
|
123
125
|
ps[ p[0]] = p[3] if ps[p[0]] == nil
|
@@ -171,6 +173,20 @@ module NERA
|
|
171
173
|
@db.update( found)
|
172
174
|
end
|
173
175
|
|
176
|
+
def update_num_runs( id, num_finished, num_all)
|
177
|
+
raise ArgumentError unless id.is_a?(Integer) and num_finished.is_a?(Integer) and num_all.is_a?(Integer)
|
178
|
+
return nil if num_finished < 0 or num_all < 0
|
179
|
+
return nil if num_finished > num_all
|
180
|
+
|
181
|
+
found = @db.find_by_id(id)
|
182
|
+
return nil unless found
|
183
|
+
return nil if found[:in_trashbox?] == :trashbox
|
184
|
+
|
185
|
+
found[:num_finished_runs] = num_finished
|
186
|
+
found[:num_all_runs] = num_all
|
187
|
+
@db.update( found)
|
188
|
+
end
|
189
|
+
|
174
190
|
def touch( id)
|
175
191
|
raise ArgumentError unless id.is_a?(Integer)
|
176
192
|
found = @db.find_by_id( id)
|
@@ -17,6 +17,8 @@ module NERA
|
|
17
17
|
@sim_instance
|
18
18
|
# id of the parameter set
|
19
19
|
@param_id
|
20
|
+
# instance of NERA::ParameterRecords
|
21
|
+
@param_records
|
20
22
|
# instance of NERA::RunRecords
|
21
23
|
@run_records
|
22
24
|
|
@@ -39,9 +41,9 @@ module NERA
|
|
39
41
|
|
40
42
|
@sim_instance = sim_class.new
|
41
43
|
@param_id = param_id
|
42
|
-
param_records = NERA::ParameterRecords.new( @db_folders.path_to_parameters_table( sim_class), sim_records, sim_id)
|
43
|
-
param_records.set_yaml_file( @db_folders.path_to_parameters_yaml( sim_class) )
|
44
|
-
found = param_records.find_by_id( @param_id)
|
44
|
+
@param_records = NERA::ParameterRecords.new( @db_folders.path_to_parameters_table( sim_class), sim_records, sim_id)
|
45
|
+
@param_records.set_yaml_file( @db_folders.path_to_parameters_yaml( sim_class) )
|
46
|
+
found = @param_records.find_by_id( @param_id)
|
45
47
|
raise "No such parameter : #{param_id}." unless found
|
46
48
|
@sim_instance.class::Parameters.each do |pa|
|
47
49
|
key = pa[0]
|
@@ -52,7 +54,7 @@ module NERA
|
|
52
54
|
end
|
53
55
|
end
|
54
56
|
|
55
|
-
@run_records = NERA::RunRecords.new( @db_folders.path_to_runs_table( sim_class, @param_id), param_records, @param_id )
|
57
|
+
@run_records = NERA::RunRecords.new( @db_folders.path_to_runs_table( sim_class, @param_id), @param_records, @param_id )
|
56
58
|
@run_records.set_yaml_file( @db_folders.path_to_runs_yaml( @sim_instance.class, @param_id) )
|
57
59
|
end
|
58
60
|
|
@@ -88,21 +90,24 @@ module NERA
|
|
88
90
|
job_recs.set_yaml_file( @db_folders.path_to_jobs_yaml)
|
89
91
|
js = NERA::JobScript.new( @db_folders)
|
90
92
|
job_recs.transaction {
|
91
|
-
@
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
93
|
+
@param_records.transaction {
|
94
|
+
@run_records.transaction {
|
95
|
+
num_jobs.times do |j_idx|
|
96
|
+
run_stat = @run_records.add( num_runs_per_job)
|
97
|
+
rid = run_stat[0][:id]
|
98
|
+
jid = job_recs.add( @sim_instance.class, @param_id, rid, num_runs_per_job)
|
99
|
+
@run_records.set_job_id( rid, num_runs_per_job, jid)
|
100
|
+
sim_records = NERA::SimulatorRecords.new( @db_folders.path_to_simulators_table)
|
101
|
+
sim_records.set_yaml_file( @db_folders.path_to_simulators_yaml )
|
102
|
+
found = sim_records.list.find do |rec| rec[:name] == @sim_instance.class.to_s end
|
103
|
+
path_script = js.create_script( jid, found[:id], @param_id, @sim_instance, run_stat)
|
104
|
+
job_ids << jid
|
105
|
+
@db_folders.logger.info(self.class.to_s) {
|
106
|
+
"created a job (#{@sim_instance.class.to_s}/#{@param_id}/#{rid}, #{num_runs_per_job} runs, jobid:#{jid})"
|
107
|
+
}
|
108
|
+
end
|
109
|
+
@param_records.update_num_runs( @param_id, @run_records.list_all_finished.size, @run_records.list_all.size)
|
110
|
+
}
|
106
111
|
}
|
107
112
|
}
|
108
113
|
return job_ids
|
@@ -144,18 +149,21 @@ module NERA
|
|
144
149
|
job_recs.set_yaml_file( @db_folders.path_to_jobs_yaml)
|
145
150
|
destroyed_jobids = []
|
146
151
|
job_recs.transaction {
|
147
|
-
@
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
152
|
+
@param_records.transaction {
|
153
|
+
@run_records.transaction {
|
154
|
+
job_ids.each do |jid|
|
155
|
+
d = job_recs.destroy(jid)
|
156
|
+
next unless d
|
157
|
+
a = @run_records.destroy_job_id( jid)
|
158
|
+
raise "must not happen" unless a
|
159
|
+
FileUtils.rm( @db_folders.path_to_job_script(jid) )
|
160
|
+
destroyed_jobids << jid
|
161
|
+
@db_folders.logger.info(self.class.to_s) {
|
162
|
+
"canceled a job (jobid:#{jid})"
|
163
|
+
}
|
164
|
+
end
|
165
|
+
@param_records.update_num_runs( @param_id, @run_records.list_all_finished.size, @run_records.list_all.size)
|
166
|
+
}
|
159
167
|
}
|
160
168
|
}
|
161
169
|
destroyed_jobids = nil if destroyed_jobids.size == 0
|
@@ -22,7 +22,7 @@ module NERA
|
|
22
22
|
# record
|
23
23
|
@keys
|
24
24
|
attr_accessor :keys
|
25
|
-
|
25
|
+
|
26
26
|
# run record
|
27
27
|
def initialize( table_file, param_recs, param_id)
|
28
28
|
raise ArgumentError unless param_recs.is_a?( NERA::ParameterRecords) and param_id.is_a?(Integer)
|
@@ -37,7 +37,6 @@ module NERA
|
|
37
37
|
@db.set_yaml_file( yaml_path)
|
38
38
|
end
|
39
39
|
|
40
|
-
|
41
40
|
def self.create_table(table_file)
|
42
41
|
NERA::Database.create_table( table_file)
|
43
42
|
end
|
@@ -106,7 +105,7 @@ module NERA
|
|
106
105
|
}
|
107
106
|
return j_id
|
108
107
|
end
|
109
|
-
|
108
|
+
|
110
109
|
def list_all
|
111
110
|
matched = @db.find_all do |rec|
|
112
111
|
true
|
data/lib/nera.rb
CHANGED
data/{scripts → script}/console
RENAMED
@@ -5,6 +5,6 @@ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
|
|
5
5
|
libs = " -r irb/completion"
|
6
6
|
# Perhaps use a console_lib to store any extra methods I may want available in the cosole
|
7
7
|
# libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
|
8
|
-
libs << " -r #{File.dirname(__FILE__) + '/../lib/
|
9
|
-
puts "Loading
|
8
|
+
libs << " -r #{File.dirname(__FILE__) + '/../lib/nera.rb'}"
|
9
|
+
puts "Loading nera gem"
|
10
10
|
exec "#{irb} #{libs} --simple-prompt"
|
data/script/txt2html
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
load File.dirname(__FILE__) + "/../Rakefile"
|
4
|
+
require 'rubyforge'
|
5
|
+
require 'redcloth'
|
6
|
+
require 'syntax/convertors/html'
|
7
|
+
require 'erb'
|
8
|
+
|
9
|
+
download = "http://rubyforge.org/projects/#{$hoe.rubyforge_name}"
|
10
|
+
version = $hoe.version
|
11
|
+
|
12
|
+
def rubyforge_project_id
|
13
|
+
RubyForge.new.configure.autoconfig["group_ids"][$hoe.rubyforge_name]
|
14
|
+
end
|
15
|
+
|
16
|
+
class Fixnum
|
17
|
+
def ordinal
|
18
|
+
# teens
|
19
|
+
return 'th' if (10..19).include?(self % 100)
|
20
|
+
# others
|
21
|
+
case self % 10
|
22
|
+
when 1: return 'st'
|
23
|
+
when 2: return 'nd'
|
24
|
+
when 3: return 'rd'
|
25
|
+
else return 'th'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class Time
|
31
|
+
def pretty
|
32
|
+
return "#{mday}#{mday.ordinal} #{strftime('%B')} #{year}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def convert_syntax(syntax, source)
|
37
|
+
return Syntax::Convertors::HTML.for_syntax(syntax).convert(source).gsub(%r!^<pre>|</pre>$!,'')
|
38
|
+
end
|
39
|
+
|
40
|
+
if ARGV.length >= 1
|
41
|
+
src, template = ARGV
|
42
|
+
template ||= File.join(File.dirname(__FILE__), '/../website/template.html.erb')
|
43
|
+
else
|
44
|
+
puts("Usage: #{File.split($0).last} source.txt [template.html.erb] > output.html")
|
45
|
+
exit!
|
46
|
+
end
|
47
|
+
|
48
|
+
template = ERB.new(File.open(template).read)
|
49
|
+
|
50
|
+
title = nil
|
51
|
+
body = nil
|
52
|
+
File.open(src) do |fsrc|
|
53
|
+
title_text = fsrc.readline
|
54
|
+
body_text_template = fsrc.read
|
55
|
+
body_text = ERB.new(body_text_template).result(binding)
|
56
|
+
syntax_items = []
|
57
|
+
body_text.gsub!(%r!<(pre|code)[^>]*?syntax=['"]([^'"]+)[^>]*>(.*?)</\1>!m){
|
58
|
+
ident = syntax_items.length
|
59
|
+
element, syntax, source = $1, $2, $3
|
60
|
+
syntax_items << "<#{element} class='syntax'>#{convert_syntax(syntax, source)}</#{element}>"
|
61
|
+
"syntax-temp-#{ident}"
|
62
|
+
}
|
63
|
+
title = RedCloth.new(title_text).to_html.gsub(%r!<.*?>!,'').strip
|
64
|
+
body = RedCloth.new(body_text).to_html
|
65
|
+
body.gsub!(%r!(?:<pre><code>)?syntax-temp-(\d+)(?:</code></pre>)?!){ syntax_items[$1.to_i] }
|
66
|
+
end
|
67
|
+
stat = File.stat(src)
|
68
|
+
created = stat.ctime
|
69
|
+
modified = stat.mtime
|
70
|
+
|
71
|
+
$stdout << template.result(binding)
|
@@ -65,7 +65,6 @@ class TC_NERA_JOB_LAYER_CONTROLLER < Test::Unit::TestCase
|
|
65
65
|
s2 = File.open(logp,'r').readlines.size
|
66
66
|
assert_equal( s1+2, s2)
|
67
67
|
|
68
|
-
|
69
68
|
flag = File.exist?( @dbf.path_to_job_script(1))
|
70
69
|
assert_equal( false, flag)
|
71
70
|
flag = File.exist?( @dbf.path_to_job_script(2))
|
@@ -73,6 +72,7 @@ class TC_NERA_JOB_LAYER_CONTROLLER < Test::Unit::TestCase
|
|
73
72
|
|
74
73
|
h, l = @rlc.not_finished_jobs_list_in_csv
|
75
74
|
assert_equal( 1, l.size)
|
75
|
+
assert_equal( "0/1", @plc.parameters_list_in_csv[1][0].split(',')[1].strip)
|
76
76
|
|
77
77
|
f = @jlc.cancel_jobs( [1000] )
|
78
78
|
assert_nil( f)
|
@@ -162,6 +162,8 @@ class TC_NERA_JOB_LAYER_CONTROLLER < Test::Unit::TestCase
|
|
162
162
|
assert_equal( 2, l.size)
|
163
163
|
h, l = @rlc.not_finished_jobs_list_in_csv
|
164
164
|
assert_equal( 2, l.size)
|
165
|
+
assert_equal( "1/3", @plc.parameters_list_in_csv[1][0].split(',')[1].strip)
|
166
|
+
|
165
167
|
end
|
166
168
|
|
167
169
|
def test_include_all
|
@@ -174,6 +176,7 @@ class TC_NERA_JOB_LAYER_CONTROLLER < Test::Unit::TestCase
|
|
174
176
|
assert_equal( [], a)
|
175
177
|
h, l = @jlc.not_finished_list_in_csv
|
176
178
|
assert_equal( [], l)
|
179
|
+
assert_equal( "3/3", @plc.parameters_list_in_csv[1][0].split(',')[1].strip)
|
177
180
|
h, l = @rlc.not_finished_jobs_list_in_csv
|
178
181
|
assert_equal( [], l)
|
179
182
|
s2 = File.open(logp,'r').readlines.size
|
@@ -33,11 +33,59 @@ class TC_NERA_PARAM_LAYER_CONTROLLER < Test::Unit::TestCase
|
|
33
33
|
x = NERA::ParameterLayerController.new( @db_folder, "Unknown")
|
34
34
|
}
|
35
35
|
end
|
36
|
+
|
37
|
+
def test_convert_to_recent_format
|
38
|
+
f = @plc.create_a_new_parameter_set( {:L => 96, :K => 0.25, :tmax => 128} )
|
39
|
+
io = File.open( File.join( @db_folder, "Tables", "Ising", "parameters.pstore") ,'w')
|
40
|
+
d = DateTime.now
|
41
|
+
Marshal.dump({ 1 => {:id => 1, :created_at => d, :updated_at => d, :in_trashbox? => :active, :L => 96, :K => 0.25, :tmax => 128 }, :max_id => 1} , io )
|
42
|
+
io.flush
|
43
|
+
plc = NERA::ParameterLayerController.new( @db_folder, "Ising")
|
44
|
+
loaded = YAML.load( File.open( File.join( @db_folder, "Ising", "parameters.yml") ) )
|
45
|
+
assert( loaded[0].has_key?( :num_finished_runs) )
|
46
|
+
assert( loaded[0].has_key?( :num_all_runs) )
|
47
|
+
assert_equal( 0, loaded[0][:num_all_runs])
|
48
|
+
assert_equal( 0, loaded[0][:num_finished_runs])
|
49
|
+
|
50
|
+
f = @plc.create_a_new_parameter_set( {:L => 32, :K => 0.25, :tmax => 128} )
|
51
|
+
rlc = NERA::RunLayerController.new( @db_folder, "Ising", f)
|
52
|
+
assert( rlc.create_jobs(3) )
|
53
|
+
io = File.open( File.join( @db_folder, "Tables", "Ising", "parameters.pstore") ,'w')
|
54
|
+
Marshal.dump( { 1 => {:id => 1, :created_at => d, :updated_at => d, :in_trashbox? => :active, :L => 96, :K => 0.25, :tmax => 128 },
|
55
|
+
2 => {:id => 2, :created_at => d, :updated_at => d, :in_trashbox? => :active, :L => 32, :K => 0.25, :tmax => 128 },
|
56
|
+
:max_id => 2 } , io )
|
57
|
+
io.flush
|
58
|
+
|
59
|
+
plc = NERA::ParameterLayerController.new( @db_folder, "Ising")
|
60
|
+
loaded = YAML.load( File.open( File.join( @db_folder, "Ising", "parameters.yml") ) )
|
61
|
+
assert( loaded[1].has_key?( :num_finished_runs) )
|
62
|
+
assert( loaded[1].has_key?( :num_all_runs) )
|
63
|
+
assert_equal( 3, loaded[1][:num_all_runs])
|
64
|
+
assert_equal( 0, loaded[1][:num_finished_runs])
|
65
|
+
|
66
|
+
assert( @plc.move_a_parameter_set_into_trashbox(1) )
|
67
|
+
io = File.open( File.join( @db_folder, "Tables", "Ising", "parameters.pstore") ,'w')
|
68
|
+
Marshal.dump( { 1 => {:id => 1, :created_at => d, :updated_at => d, :in_trashbox? => :trashbox, :L => 96, :K => 0.25, :tmax => 128 },
|
69
|
+
2 => {:id => 2, :created_at => d, :updated_at => d, :in_trashbox? => :active, :L => 32, :K => 0.25, :tmax => 128 },
|
70
|
+
:max_id => 2 } , io )
|
71
|
+
io.flush
|
72
|
+
plc = NERA::ParameterLayerController.new( @db_folder, "Ising")
|
73
|
+
loaded = YAML.load( File.open( File.join( @db_folder, "Ising", "parameters.yml") ) )
|
74
|
+
assert_equal( false, loaded[0].has_key?( :num_finished_runs) ) # only active records can be updated
|
75
|
+
assert_equal( false, loaded[0].has_key?( :num_all_runs) )
|
76
|
+
assert( loaded[1].has_key?( :num_finished_runs) ) # only active records can be updated
|
77
|
+
assert( loaded[1].has_key?( :num_all_runs) )
|
78
|
+
|
79
|
+
assert( plc.revert_a_parameter_set_in_trashbox(1) )
|
80
|
+
loaded = YAML.load( File.open( File.join( @db_folder, "Ising", "parameters.yml") ) )
|
81
|
+
assert( loaded[0].has_key?( :num_finished_runs) ) # format is converted when reverted
|
82
|
+
assert( loaded[0].has_key?( :num_all_runs) )
|
83
|
+
end
|
36
84
|
|
37
85
|
def test_parameters_list_in_csv
|
38
86
|
header, list = @plc.parameters_list_in_csv
|
39
87
|
assert( header.is_a?(String) )
|
40
|
-
assert_equal( "id, created_at, updated_at, L, K, tmax", header)
|
88
|
+
assert_equal( "id, num_runs, created_at, updated_at, L, K, tmax", header)
|
41
89
|
assert( list.is_a?(Array) )
|
42
90
|
assert_equal( 0, list.size)
|
43
91
|
|
@@ -45,24 +93,33 @@ class TC_NERA_PARAM_LAYER_CONTROLLER < Test::Unit::TestCase
|
|
45
93
|
assert_equal( 1, f)
|
46
94
|
header, list = @plc.parameters_list_in_csv
|
47
95
|
assert( header.is_a?(String) )
|
48
|
-
assert_equal( "id, created_at, updated_at, L, K, tmax", header)
|
96
|
+
assert_equal( "id, num_runs, created_at, updated_at, L, K, tmax", header)
|
49
97
|
assert( list.is_a?(Array) )
|
50
98
|
assert_equal( 1, list.size)
|
51
99
|
dstr = DateTime.now.to_s.split('T')[0]
|
52
|
-
assert_equal( "1, #{dstr}, #{dstr}, 96, 0.25, 128", list[0])
|
100
|
+
assert_equal( "1, 0/0, #{dstr}, #{dstr}, 96, 0.25, 128", list[0])
|
53
101
|
|
54
102
|
f = @plc.create_a_new_parameter_set( {:L => 32} )
|
55
103
|
assert_equal( 2, f)
|
56
104
|
header, list = @plc.parameters_list_in_csv
|
57
105
|
assert_equal( 2, list.size)
|
58
|
-
assert_equal( "1, #{dstr}, #{dstr}, 96, 0.25, 128", list[0])
|
106
|
+
assert_equal( "1, 0/0, #{dstr}, #{dstr}, 96, 0.25, 128", list[0])
|
59
107
|
dstr = DateTime.now.to_s.split('T')[0]
|
60
|
-
assert_equal( "2, #{dstr}, #{dstr}, 32, 0.223, 512", list[1])
|
108
|
+
assert_equal( "2, 0/0, #{dstr}, #{dstr}, 32, 0.223, 512", list[1])
|
61
109
|
|
62
110
|
@plc.move_a_parameter_set_into_trashbox(1)
|
63
111
|
header, list = @plc.parameters_list_in_csv
|
64
112
|
assert_equal( 1, list.size)
|
65
|
-
assert_equal( "2, #{dstr}, #{dstr}, 32, 0.223, 512", list[0])
|
113
|
+
assert_equal( "2, 0/0, #{dstr}, #{dstr}, 32, 0.223, 512", list[0])
|
114
|
+
|
115
|
+
=begin
|
116
|
+
rlc = NERA::RunLayerController.new( @db_folder, "Ising", 2)
|
117
|
+
assert( rlc.create_jobs(3), 2 )
|
118
|
+
header, list = @plc.parameters_list_in_csv
|
119
|
+
assert_equal( "2, 0/6, #{dstr}, #{dstr}, 32, 0.223, 512", list[0])
|
120
|
+
assert( rlc.create_jobs(1) )
|
121
|
+
assert_equal( "2, 0/4, #{dstr}, #{dstr}, 32, 0.223, 512", list[0])
|
122
|
+
=end
|
66
123
|
end
|
67
124
|
|
68
125
|
def add_three
|
@@ -137,9 +194,9 @@ class TC_NERA_PARAM_LAYER_CONTROLLER < Test::Unit::TestCase
|
|
137
194
|
}
|
138
195
|
header, list = @plc.parameters_list_in_csv
|
139
196
|
d = DateTime.now.to_s.split('T')[0]
|
140
|
-
l = [ "1, #{d}, #{d}, 32, 0.01, 1",
|
141
|
-
"2, #{d}, #{d}, 64, 0.02, 512",
|
142
|
-
"3, #{d}, #{d}, 96, 0.223, 3"]
|
197
|
+
l = [ "1, 0/0, #{d}, #{d}, 32, 0.01, 1",
|
198
|
+
"2, 0/0, #{d}, #{d}, 64, 0.02, 512",
|
199
|
+
"3, 0/0, #{d}, #{d}, 96, 0.223, 3"]
|
143
200
|
assert_equal( l, list)
|
144
201
|
end
|
145
202
|
|