comana 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -6,9 +6,9 @@ source "http://rubygems.org"
6
6
  # Add dependencies to develop your gem here.
7
7
  # Include everything needed to run rake, tests, features, etc.
8
8
  group :development do
9
- gem "rspec", "~> 2.9.0"
10
- gem "rdoc", "~> 3.12"
11
- gem "bundler", "~> 1.1.3"
12
- gem "jeweler", "~> 1.8.3"
9
+ gem "rspec", ">= 2.9.0"
10
+ gem "rdoc", ">= 3.12"
11
+ gem "bundler", ">= 1.1.3"
12
+ gem "jeweler", ">= 1.8.3"
13
13
  gem "simplecov", ">= 0"
14
14
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.5
1
+ 0.0.6
data/bin/submitqueue ADDED
@@ -0,0 +1,65 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "optparse"
5
+ require "yaml"
6
+ require "pp"
7
+ require "comana/queuesubmitter.rb"
8
+ require "comana/machineinfo.rb"
9
+
10
+ ## option analysis
11
+ OPTS = {}
12
+ op = OptionParser.new
13
+ #op.on("-e", "--economy" , "Prior efficiency."){OPTS[:e] = true}
14
+ op.on("-s" , "--speed" , "Prior speed to efficiency."){OPTS[:s] = true}
15
+ op.on("-n nodes" , "--nodes" , "Node series." ){|v| OPTS[:n] = v}
16
+ op.on("-c command", "--command", "Command to calculate." ){|v| OPTS[:c] = v}
17
+ op.on("-d dir" , "--dir" , "Directory to calculate." ){|v| OPTS[:d] = v}
18
+ op.parse!(ARGV)
19
+ #cluster = ARGV[0]
20
+ #cluster = ARGV
21
+
22
+ OPTS[:machineinfo] = MachineInfo.load_file
23
+
24
+ qs = QueueSubmitter.new(OPTS)
25
+ begin
26
+ qs.start
27
+ rescue QueueSubmitter::AlreadyStartedError
28
+ puts "Already started. Exit"
29
+ exit
30
+ rescue QueueSubmitter::PrepareNextError
31
+ puts "Submitted. Exit"
32
+ exit
33
+ end
34
+
35
+ #yaml = YAML.load_file("#{ENV["HOME"]}/.machineinfo")
36
+ #pp yaml
37
+ #
38
+ #if File.exits?(SCRIPT_FILE)
39
+ # puts "#{SCRIPT_FILE} already exist. Exit."
40
+ # exit
41
+ #end
42
+ #
43
+ #File.open(SCRIPT_FILE, "w") do |io|
44
+ # io.puts "#PBS -N task"
45
+ # io.puts "#PBS -l nodes=4:ppn=1:Ga"
46
+ # io.puts "cd $PBS_O_WORKDIR"
47
+ # io.puts "runvasp"
48
+ # #io.puts "#/usr/local/bin/mpiexec /usr/local/bin/vasp5212mpi-ifc11-fast"
49
+ # #io.puts "#/home/ippei/local/mpi/mpiexec-0.84/mpiexec /usr/local/calc/bin/vasp5212-mpich2"
50
+ # #io.puts "#/usr/local/calc/mpiexec/bin/mpiexec /usr/local/calc/bin/vasp5212-mpich2"
51
+ # #io.puts "#~/tmp.rb #OK"
52
+ #
53
+ # #io.puts condition
54
+ # #io.puts rsync
55
+ # #io.puts run
56
+ # #io.puts rsync
57
+ # #io.puts mv to trash?
58
+ #end
59
+ #
60
+ ## Record job_id in pbs. Overwrite if exists.
61
+ #job_id = `qsub #{SCRIPT_FILE}`
62
+ #File.open(PBS_LOG, "w") do |io|
63
+ # io.puts job_id
64
+ #end
65
+ #
data/comana.gemspec CHANGED
@@ -5,13 +5,14 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "comana"
8
- s.version = "0.0.5"
8
+ s.version = "0.0.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["ippei94da"]
12
- s.date = "2012-05-07"
12
+ s.date = "2012-05-08"
13
13
  s.description = "Comana, COmputation MANAger,\n is a software to provide a framework of\n managing scientific computing.\n Researchers on computing have to check calculation and\n generate new calculation and execute, repeatedly.\n The abstract class that this gem provide would help the work.\n "
14
14
  s.email = "ippei94da@gmail.com"
15
+ s.executables = ["submitqueue"]
15
16
  s.extra_rdoc_files = [
16
17
  "LICENSE.txt",
17
18
  "README.rdoc"
@@ -24,19 +25,21 @@ Gem::Specification.new do |s|
24
25
  "README.rdoc",
25
26
  "Rakefile",
26
27
  "VERSION",
28
+ "bin/submitqueue",
27
29
  "comana.gemspec",
28
30
  "dot.machineinfo",
29
31
  "lib/comana.rb",
30
32
  "lib/comana/computationmanager.rb",
31
33
  "lib/comana/machineinfo.rb",
34
+ "lib/comana/queuesubmitter.rb",
32
35
  "memo.txt",
33
36
  "spec/computationmanager_spec.rb",
34
- "spec/locked/comana_lock/dummy",
35
37
  "spec/locked/input_a",
36
38
  "spec/locked/input_b",
37
- "spec/locked_outputted/comana_lock/dummy",
39
+ "spec/locked/lock_comana/dummy",
38
40
  "spec/locked_outputted/input_a",
39
41
  "spec/locked_outputted/input_b",
42
+ "spec/locked_outputted/lock_comana/dummy",
40
43
  "spec/locked_outputted/output",
41
44
  "spec/machineinfo",
42
45
  "spec/machineinfo_spec.rb",
@@ -45,6 +48,7 @@ Gem::Specification.new do |s|
45
48
  "spec/outputted/input_a",
46
49
  "spec/outputted/input_b",
47
50
  "spec/outputted/output",
51
+ "spec/queuesubmitter_spec.rb",
48
52
  "spec/spec_helper.rb"
49
53
  ]
50
54
  s.homepage = "http://github.com/ippei94da/comana"
@@ -57,23 +61,23 @@ Gem::Specification.new do |s|
57
61
  s.specification_version = 3
58
62
 
59
63
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
60
- s.add_development_dependency(%q<rspec>, ["~> 2.9.0"])
61
- s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
62
- s.add_development_dependency(%q<bundler>, ["~> 1.1.3"])
63
- s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
64
+ s.add_development_dependency(%q<rspec>, [">= 2.9.0"])
65
+ s.add_development_dependency(%q<rdoc>, [">= 3.12"])
66
+ s.add_development_dependency(%q<bundler>, [">= 1.1.3"])
67
+ s.add_development_dependency(%q<jeweler>, [">= 1.8.3"])
64
68
  s.add_development_dependency(%q<simplecov>, [">= 0"])
65
69
  else
66
- s.add_dependency(%q<rspec>, ["~> 2.9.0"])
67
- s.add_dependency(%q<rdoc>, ["~> 3.12"])
68
- s.add_dependency(%q<bundler>, ["~> 1.1.3"])
69
- s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
70
+ s.add_dependency(%q<rspec>, [">= 2.9.0"])
71
+ s.add_dependency(%q<rdoc>, [">= 3.12"])
72
+ s.add_dependency(%q<bundler>, [">= 1.1.3"])
73
+ s.add_dependency(%q<jeweler>, [">= 1.8.3"])
70
74
  s.add_dependency(%q<simplecov>, [">= 0"])
71
75
  end
72
76
  else
73
- s.add_dependency(%q<rspec>, ["~> 2.9.0"])
74
- s.add_dependency(%q<rdoc>, ["~> 3.12"])
75
- s.add_dependency(%q<bundler>, ["~> 1.1.3"])
76
- s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
77
+ s.add_dependency(%q<rspec>, [">= 2.9.0"])
78
+ s.add_dependency(%q<rdoc>, [">= 3.12"])
79
+ s.add_dependency(%q<bundler>, [">= 1.1.3"])
80
+ s.add_dependency(%q<jeweler>, [">= 1.8.3"])
77
81
  s.add_dependency(%q<simplecov>, [">= 0"])
78
82
  end
79
83
  end
@@ -7,16 +7,17 @@
7
7
  # This profides a framework of scientific computation.
8
8
  # Users have to redefine some methods in subclasses for various computation.
9
9
  #
10
- class Comana
10
+ class ComputationManager
11
11
  class NotImplementedError < Exception; end
12
12
  class AlreadyStartedError < Exception; end
13
+ class ExecuteError < Exception; end
13
14
 
14
15
  attr_reader :dir
15
16
 
16
17
  # You can redefine in subclass to modify from default values.
17
18
  def initialize(dir)
18
19
  @dir = dir # redefine in subclass.
19
- @lockdir = "comana_lock"
20
+ @lockdir = "lock_comana"
20
21
  @alive_time = 3600
21
22
  end
22
23
 
@@ -33,7 +34,7 @@ class Comana
33
34
  end
34
35
 
35
36
  # Execute calculation.
36
- # If log of Comana exist, raise Comana::AlreadyStartedError,
37
+ # If log of ComputationManager exist, raise ComputationManager::AlreadyStartedError,
37
38
  # because the calculation has been done by other process already.
38
39
  def start
39
40
  begin
@@ -43,7 +44,8 @@ class Comana
43
44
  end
44
45
 
45
46
  while true
46
- calculate
47
+ end_status = calculate
48
+ raise ExecuteError unless end_status
47
49
  if finished?
48
50
  break
49
51
  else
@@ -55,6 +57,9 @@ class Comana
55
57
 
56
58
  private
57
59
 
60
+ # Redefine in subclass.
61
+ # Return nil if cannot execute, return false if error in executing,
62
+ # like Kernel.system.
58
63
  def calculate
59
64
  raise NotImplementedError, "#{self.class}::calculate need to be redefined"
60
65
  end
@@ -3,8 +3,10 @@
3
3
 
4
4
  require "yaml"
5
5
 
6
- #
7
- #
6
+ # Series name is composed only of alphabets.
7
+ # Host name is started by the series name and followed by integers.
8
+ # E.g.,
9
+ # "Fe", "Fe00", "Fe01" are of series "Fe" and not "F"
8
10
  #
9
11
  class MachineInfo
10
12
 
@@ -15,18 +17,15 @@ class MachineInfo
15
17
  @data = data
16
18
  end
17
19
 
18
- def self.load_file(data_file)
19
- #pp data_file
20
- #pp ENV["PWD"]
21
- #pp File.open(DATA_FILE, "r").readlines
20
+ def self.load_file(data_file = (ENV["HOME"] + "/.machineinfo"))
22
21
  data = YAML.load_file(data_file)
23
22
  MachineInfo.new data
24
- #pp @data
25
23
  end
26
24
 
27
- def get_host(host)
28
- raise NoEntryError unless @data.has_key?(host)
29
- @data[host]
25
+ def get_info(host)
26
+ series = host.sub(/\d*$/, "")
27
+ raise NoEntryError unless @data.has_key?(series)
28
+ @data[series]
30
29
  end
31
30
 
32
31
  end
@@ -0,0 +1,73 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "comana/computationmanager.rb"
5
+ require "comana/machineinfo.rb"
6
+
7
+ #
8
+ #
9
+ #
10
+ class QueueSubmitter < ComputationManager
11
+ QSUB_SCRIPT = "script.qsub"
12
+
13
+ class PrepareNextError < Exception; end
14
+
15
+ #
16
+ def initialize(opts)
17
+ super(opts[:d])
18
+ @command = opts[:c]
19
+ @nodes = opts[:n]
20
+ @speed = opts[:s]
21
+ @machineinfo = opts[:machineinfo]
22
+ @lockdir = "lock_queuesubmitter"
23
+ end
24
+
25
+ def calculate
26
+ script_path = "#{@dir}/#{QSUB_SCRIPT}"
27
+ File.open(script_path, "w") do |io|
28
+ dump_qsub_str(io)
29
+ end
30
+
31
+ system("cd #{@dir}; qsub #{script_path} > #{@dir}/#{@lockdir}/stdout")
32
+ end
33
+
34
+ # Raise QueueSubmitter::PrepareNextError when called.
35
+ def prepare_next
36
+ raise PrepareNextError
37
+ end
38
+
39
+ def finished?
40
+ # do nothing
41
+ end
42
+
43
+ private
44
+
45
+ def dump_qsub_str(io = nil)
46
+ fs = @machineinfo.get_info("fileserver") #fileserver
47
+ node_info = @machineinfo.get_info(@nodes)
48
+ num = node_info["economy_nodes"]
49
+ num = node_info["speed_nodes"] if @speed
50
+
51
+ str = [
52
+ "#! /bin/sh",
53
+ "#PBS -N #{@dir}",
54
+ "#PBS -l nodes=#{num}:ppn=1:#{@nodes},walltime=168:00:00",
55
+ "#PBS -j oe",
56
+ "mkdir -p ${PBS_O_WORKDIR}",
57
+ "cp ${PBS_NODEFILE} ${PBS_O_WORKDIR}/pbs_nodefile",
58
+ "rsync -azq --delete #{fs}:${PBS_O_WORKDIR}/ ${PBS_O_WORKDIR}",
59
+ "cd ${PBS_O_WORKDIR}",
60
+ "#{@command}",
61
+ "#rsync -azq --delete ${PBS_O_WORKDIR}/ #{fs}:${PBS_O_WORKDIR}",
62
+ "#rm -rf ${PBS_O_WORKDIR}",
63
+ ].join("\n")
64
+
65
+ if io
66
+ io.puts str
67
+ else
68
+ return str
69
+ end
70
+ end
71
+ end
72
+
73
+
data/memo.txt CHANGED
@@ -2,6 +2,10 @@ Comana don't have information of output files.
2
2
  Because it is difficult to define final output and to deal systematically.
3
3
  e.g., repeated calculation till convergence.
4
4
 
5
+ 0.0.6 release
6
+ Add bin/submitqueue.
7
+ Add lib/queuesubmitter.rb.
8
+
5
9
  0.0.5 release
6
10
  Changed directory structure and file name.
7
11
  Changed method name.
@@ -3,12 +3,12 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
3
3
 
4
4
  NOW = Time.now
5
5
 
6
- class Comana
6
+ class ComputationManager
7
7
  public :latest_modified_time, :started?
8
8
  end
9
9
 
10
- describe Comana, "not started" do
11
- class CalcYet < Comana
10
+ describe ComputationManager, "not started" do
11
+ class CalcYet < ComputationManager
12
12
  def finished? ; false ; end
13
13
  end
14
14
  before do
@@ -17,7 +17,7 @@ describe Comana, "not started" do
17
17
 
18
18
  File.utime(NOW - 1000 ,NOW - 1000, "#{calc_dir}/input_a")
19
19
  File.utime(NOW - 2000 ,NOW - 2000, "#{calc_dir}/input_b")
20
- @lockdir = "#{calc_dir}/comana_lock"
20
+ @lockdir = "#{calc_dir}/lock_comana"
21
21
  FileUtils.rm(@lockdir) if File.exist?(@lockdir)
22
22
  end
23
23
 
@@ -43,8 +43,8 @@ describe Comana, "not started" do
43
43
  #end
44
44
  end
45
45
 
46
- describe Comana, "with lock" do
47
- class CalcStarted < Comana
46
+ describe ComputationManager, "with lock" do
47
+ class CalcStarted < ComputationManager
48
48
  def finished? ; false ; end
49
49
  end
50
50
 
@@ -60,8 +60,8 @@ describe Comana, "with lock" do
60
60
  end
61
61
  end
62
62
 
63
- describe Comana, "with output, without lock" do
64
- class CalcStarted < Comana
63
+ describe ComputationManager, "with output, without lock" do
64
+ class CalcStarted < ComputationManager
65
65
  def finished? ; false ; end
66
66
  end
67
67
 
@@ -81,12 +81,12 @@ describe Comana, "with output, without lock" do
81
81
 
82
82
  end
83
83
 
84
- describe Comana, "terminated" do
85
- class CalcTerminated < Comana
84
+ describe ComputationManager, "terminated" do
85
+ class CalcTerminated < ComputationManager
86
86
  def finished? ; false ; end
87
87
  def initialize(dir)
88
88
  @dir = dir
89
- @lockdir = "comana_lock"
89
+ @lockdir = "lock_comana"
90
90
  @alive_time = 500
91
91
  end
92
92
  end
@@ -98,7 +98,7 @@ describe Comana, "terminated" do
98
98
  File.utime(NOW - 1000 ,NOW - 1000, "#{calc_dir}/input_a")
99
99
  File.utime(NOW - 2000 ,NOW - 2000, "#{calc_dir}/input_b")
100
100
  File.utime(NOW - 9000 ,NOW - 9000, "#{calc_dir}/output")
101
- File.utime(NOW - 9000 ,NOW - 9000, "#{calc_dir}/comana_lock")
101
+ File.utime(NOW - 9000 ,NOW - 9000, "#{calc_dir}/lock_comana")
102
102
  end
103
103
 
104
104
  it "should return the state" do
@@ -106,8 +106,8 @@ describe Comana, "terminated" do
106
106
  end
107
107
  end
108
108
 
109
- describe Comana, "finished" do
110
- class CalcFinished < Comana
109
+ describe ComputationManager, "finished" do
110
+ class CalcFinished < ComputationManager
111
111
  def finished? ; true ; end
112
112
  end
113
113
 
@@ -123,3 +123,35 @@ describe Comana, "finished" do
123
123
  @calc_finished .state.should == :finished
124
124
  end
125
125
  end
126
+
127
+ describe ComputationManager, "cannot execute" do
128
+ class CalcNotExecutable < ComputationManager
129
+ def calculate
130
+ system "" # notExistCommand
131
+ end
132
+
133
+ def finished?
134
+ return false
135
+ end
136
+
137
+ def prepare_next
138
+ #return false
139
+ raise
140
+ end
141
+ end
142
+
143
+ before do
144
+ calc_dir = "spec/not_executable"
145
+ @calc = CalcNotExecutable .new(calc_dir)
146
+ #File.utime(NOW - 1000 ,NOW - 1000, "#{calc_dir}/input_a")
147
+ #File.utime(NOW - 2000 ,NOW - 2000, "#{calc_dir}/input_b")
148
+ @lockdir = calc_dir + "/lock_comana"
149
+
150
+ Dir.rmdir(@lockdir) if File.exist?(@lockdir)
151
+ end
152
+
153
+ it "should raise error" do
154
+ lambda{@calc.start}.should raise_error(ComputationManager::ExecuteError)
155
+ end
156
+ end
157
+
data/spec/machineinfo CHANGED
@@ -1,7 +1,7 @@
1
1
  --- # vim:syntax=yaml
2
- "Host1":
3
- "data1": "1-1"
4
- "data2": "1-2"
5
- "Host2":
6
- "data1": "2-1"
7
- "data2": "2-2"
2
+ "SeriesA":
3
+ "data1": "A-1"
4
+ "data2": "A-2"
5
+ "SeriesB":
6
+ "data1": "B-1"
7
+ "data2": "B-2"
@@ -12,8 +12,8 @@ describe MachineInfo do
12
12
  DATA_FILE = "spec/machineinfo"
13
13
  #DATA_FILE = "spec/dummy.yaml"
14
14
  #data = {
15
- # "Host1" => { "data1" => "1-1", "data2" => "1-2" },
16
- # "Host2" => { "data1" => "2-1", "data2" => "2-2" },
15
+ # "SeriesA" => { "data1" => "A-1", "data2" => "A-2" },
16
+ # "SeriesB" => { "data1" => "B-1", "data2" => "B-2" },
17
17
  #}
18
18
  #io = File.open(DATA_FILE, "w")
19
19
  #YAML.dump(data, io)
@@ -24,7 +24,7 @@ describe MachineInfo do
24
24
  it { lambda{MachineInfo.load_file(DATA_FILE)}.should_not raise_error}
25
25
 
26
26
  mi00 = MachineInfo.load_file(DATA_FILE)
27
- it {mi00.get_host("Host1").should == { "data1" => "1-1", "data2" => "1-2" } }
27
+ it {mi00.get_info("SeriesA").should == { "data1" => "A-1", "data2" => "A-2" } }
28
28
 
29
29
  #FileUtils.rm DATA_FILE
30
30
  end
@@ -34,21 +34,30 @@ describe MachineInfo do
34
34
  end
35
35
  end
36
36
 
37
- describe "#get_host" do
37
+ describe "#get_info" do
38
38
  before do
39
39
  @mi00 = MachineInfo.new({
40
- "Host1" => { "data1" => "1-1", "data2" => "1-2" },
41
- "Host2" => { "data1" => "2-1", "data2" => "2-2" },
40
+ "SeriesA" => { "data1" => "A-1", "data2" => "A-2" },
41
+ "SeriesB" => { "data1" => "B-1", "data2" => "B-2" },
42
42
  })
43
43
  end
44
44
 
45
- context "exist in data" do
46
- subject { @mi00.get_host("Host1") }
47
- it {should == { "data1" => "1-1", "data2" => "1-2" } }
45
+ context "mach to hostname in data" do
46
+ subject { @mi00.get_info("SeriesA") }
47
+ it {should == { "data1" => "A-1", "data2" => "A-2" } }
48
+ end
49
+
50
+ context "series name + integers" do
51
+ subject { @mi00.get_info("SeriesA00") }
52
+ it {should == { "data1" => "A-1", "data2" => "A-2" } }
53
+ end
54
+
55
+ context "series name + alphabet" do
56
+ it {lambda{@mi00.get_info("seriesAB")}.should raise_error(MachineInfo::NoEntryError)}
48
57
  end
49
58
 
50
59
  context "no entry" do
51
- it {lambda{@mi00.get_host("")}.should raise_error(MachineInfo::NoEntryError)}
60
+ it {lambda{@mi00.get_info("")}.should raise_error(MachineInfo::NoEntryError)}
52
61
  end
53
62
  end
54
63
 
@@ -0,0 +1,55 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
5
+ require "comana/queuesubmitter.rb"
6
+ require "comana/machineinfo.rb"
7
+
8
+ class QueueSubmitter < ComputationManager
9
+ public :dump_qsub_str
10
+ end
11
+
12
+ #describe QueueSubmitter, "with chars to be escaped" do
13
+ describe QueueSubmitter do
14
+ describe "#dump_qsub_str" do
15
+ before do
16
+ opts = {
17
+ :d => "dir_name",
18
+ :c => "command_line",
19
+ :n => "Nodes",
20
+ :s => true,
21
+ :machineinfo => MachineInfo.new(
22
+ "fileserver" => "FS",
23
+ "Nodes" => { "speed_nodes" => 4, "economy_nodes" => 1, }
24
+ )
25
+ }
26
+ @qs00 = QueueSubmitter.new(opts)
27
+
28
+ @correct = [
29
+ "#! /bin/sh",
30
+ "#PBS -N dir_name",
31
+ "#PBS -l nodes=4:ppn=1:Nodes,walltime=168:00:00",
32
+ "#PBS -j oe",
33
+ "mkdir -p ${PBS_O_WORKDIR}",
34
+ "cp ${PBS_NODEFILE} ${PBS_O_WORKDIR}/pbs_nodefile",
35
+ "rsync -azq --delete FS:${PBS_O_WORKDIR}/ ${PBS_O_WORKDIR}",
36
+ "cd ${PBS_O_WORKDIR}",
37
+ "command_line",
38
+ "#rsync -azq --delete ${PBS_O_WORKDIR}/ FS:${PBS_O_WORKDIR}",
39
+ "#rm -rf ${PBS_O_WORKDIR}",
40
+ ].join("\n")
41
+ end
42
+
43
+ context "speed mode" do
44
+ it { @qs00.dump_qsub_str.should == @correct}
45
+
46
+ it do
47
+ io = StringIO.new
48
+ @qs00.dump_qsub_str(io)
49
+ io.rewind
50
+ #pp io.readlines
51
+ io.readlines.join.chomp.should == @correct
52
+ end
53
+ end
54
+ end
55
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: comana
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,55 +9,55 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-07 00:00:00.000000000 Z
12
+ date: 2012-05-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &75511580 !ruby/object:Gem::Requirement
16
+ requirement: &81878250 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ~>
19
+ - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
21
  version: 2.9.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *75511580
24
+ version_requirements: *81878250
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rdoc
27
- requirement: &75526670 !ruby/object:Gem::Requirement
27
+ requirement: &81877750 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
- - - ~>
30
+ - - ! '>='
31
31
  - !ruby/object:Gem::Version
32
32
  version: '3.12'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *75526670
35
+ version_requirements: *81877750
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &75525340 !ruby/object:Gem::Requirement
38
+ requirement: &81877070 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
- - - ~>
41
+ - - ! '>='
42
42
  - !ruby/object:Gem::Version
43
43
  version: 1.1.3
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *75525340
46
+ version_requirements: *81877070
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &75524370 !ruby/object:Gem::Requirement
49
+ requirement: &81876620 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
- - - ~>
52
+ - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.8.3
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *75524370
57
+ version_requirements: *81876620
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: simplecov
60
- requirement: &75523390 !ruby/object:Gem::Requirement
60
+ requirement: &81875300 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,13 +65,14 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *75523390
68
+ version_requirements: *81875300
69
69
  description: ! "Comana, COmputation MANAger,\n is a software to provide a framework
70
70
  of\n managing scientific computing.\n Researchers on computing have to check
71
71
  calculation and\n generate new calculation and execute, repeatedly.\n The
72
72
  abstract class that this gem provide would help the work.\n "
73
73
  email: ippei94da@gmail.com
74
- executables: []
74
+ executables:
75
+ - submitqueue
75
76
  extensions: []
76
77
  extra_rdoc_files:
77
78
  - LICENSE.txt
@@ -84,19 +85,21 @@ files:
84
85
  - README.rdoc
85
86
  - Rakefile
86
87
  - VERSION
88
+ - bin/submitqueue
87
89
  - comana.gemspec
88
90
  - dot.machineinfo
89
91
  - lib/comana.rb
90
92
  - lib/comana/computationmanager.rb
91
93
  - lib/comana/machineinfo.rb
94
+ - lib/comana/queuesubmitter.rb
92
95
  - memo.txt
93
96
  - spec/computationmanager_spec.rb
94
- - spec/locked/comana_lock/dummy
95
97
  - spec/locked/input_a
96
98
  - spec/locked/input_b
97
- - spec/locked_outputted/comana_lock/dummy
99
+ - spec/locked/lock_comana/dummy
98
100
  - spec/locked_outputted/input_a
99
101
  - spec/locked_outputted/input_b
102
+ - spec/locked_outputted/lock_comana/dummy
100
103
  - spec/locked_outputted/output
101
104
  - spec/machineinfo
102
105
  - spec/machineinfo_spec.rb
@@ -105,6 +108,7 @@ files:
105
108
  - spec/outputted/input_a
106
109
  - spec/outputted/input_b
107
110
  - spec/outputted/output
111
+ - spec/queuesubmitter_spec.rb
108
112
  - spec/spec_helper.rb
109
113
  homepage: http://github.com/ippei94da/comana
110
114
  licenses:
@@ -121,7 +125,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
121
125
  version: '0'
122
126
  segments:
123
127
  - 0
124
- hash: 196413437
128
+ hash: 362387791
125
129
  required_rubygems_version: !ruby/object:Gem::Requirement
126
130
  none: false
127
131
  requirements:
File without changes