comana 0.0.10 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGES +8 -1
- data/Gemfile +7 -12
- data/VERSION +1 -1
- data/bin/genqsub +45 -0
- data/bin/hostinfo +182 -0
- data/bin/machinestatus +6 -3
- data/bin/queueinfo +28 -0
- data/comana.gemspec +110 -0
- data/lib/comana/clustersetting.rb +4 -3
- data/lib/comana/computationmanager.rb +25 -2
- data/lib/comana/gridenginescript.rb +68 -0
- data/lib/comana/hostinspector.rb +221 -2
- data/lib/comana/queuemanager.rb +34 -0
- data/lib/comana/queuesubmitter.rb +3 -1
- data/lib/comana.rb +2 -2
- data/test/hostinspector/.gitignore +1 -0
- data/test/test_gridenginescript.rb +16 -0
- data/test/test_hostinspector.rb +112 -0
- data/test/test_queuemanager.rb +19 -0
- metadata +57 -49
- data/lib/comana/hostinspector/pbsnodes.rb +0 -51
- data/lib/comana/hostinspector/ping.rb +0 -34
- data/test/test_hostinspector_pbsnodes.rb +0 -92
- data/test/test_hostinspector_ping.rb +0 -21
data/lib/comana/hostinspector.rb
CHANGED
@@ -1,4 +1,223 @@
|
|
1
|
-
|
1
|
+
#s! /usr/bin/env ruby
|
2
2
|
# coding: utf-8
|
3
|
+
#
|
4
|
+
require "yaml"
|
5
|
+
|
6
|
+
class Comana::HostInspector
|
7
|
+
PING_MIN_INTERVAL = 1
|
8
|
+
CACHE_DIR = "#{ENV['HOME']}/var/comana"
|
9
|
+
|
10
|
+
class NoUpdateFile < Exception; end
|
11
|
+
|
12
|
+
attr_reader :hostname
|
13
|
+
|
14
|
+
#
|
15
|
+
def initialize(hostname)
|
16
|
+
@hostname = hostname
|
17
|
+
@cache_dir = "#{CACHE_DIR}/#{@hostname}"
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
##ping
|
22
|
+
#Try ping three times.
|
23
|
+
#Return true if at least one time responds.
|
24
|
+
#def ping3
|
25
|
+
def update_ping
|
26
|
+
result = false
|
27
|
+
3.times do
|
28
|
+
command =
|
29
|
+
"ping -c 1 -W #{PING_MIN_INTERVAL} #{@hostname} 2> /dev/null 1> /dev/null"
|
30
|
+
if system(command)
|
31
|
+
result = true
|
32
|
+
break
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
write_cache("ping", result)
|
37
|
+
end
|
38
|
+
|
39
|
+
##cwd
|
40
|
+
##readlink コマンドが使えるかとも思ったが、シムリンク自体の名前が不明瞭になる。
|
41
|
+
def update_cwd
|
42
|
+
#str = `ssh #{@hostname} 'ls -l /proc/*/cwd'`
|
43
|
+
str = ssh_str('ls -l /proc/\*/cwd 2> /dev/null')
|
44
|
+
results = {}
|
45
|
+
str.split("\n").each do |line|
|
46
|
+
#pp line
|
47
|
+
items = line.split
|
48
|
+
pid = items[8].sub(/^\/proc\//, '').sub(/\/cwd$/, '')
|
49
|
+
results[pid] = items[10]
|
50
|
+
end
|
51
|
+
|
52
|
+
write_cache('cwd', results)
|
53
|
+
end
|
54
|
+
|
55
|
+
##processes
|
56
|
+
#%ps auxw
|
57
|
+
#USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
|
58
|
+
#ippei 28971 0.0 0.0 103684 3764 ? S 15:19 0:00 sshd: ippei@pts/19
|
59
|
+
#root 1 0.0 0.0 33876 2280 ? Ss 5月17 0:22 /sbin/init
|
60
|
+
#0---------1---------2---------3---------4---------5---------6---------7
|
61
|
+
#0-2-4-6-8-0-2-4-6-8-0-2-4-6-8-0-2-4-6-8-0-2-4-6-8-0-2-4-6-8-0-2-4-6-8-0
|
62
|
+
#
|
63
|
+
#% ps -o 'user pid %cpu %mem command'
|
64
|
+
#USER PID %CPU %MEM COMMAND
|
65
|
+
#ippei 19991 0.0 0.2 zsh
|
66
|
+
#ippei 23217 0.0 0.0 ps -o user pid %cpu %mem command
|
67
|
+
#0---------1---------2---------3---------4---------5---------6---------7
|
68
|
+
#0-2-4-6-8-0-2-4-6-8-0-2-4-6-8-0-2-4-6-8-0-2-4-6-8-0-2-4-6-8-0-2-4-6-8-0
|
69
|
+
#auxw だと、
|
70
|
+
#ippei 2948 198 11.8 4495708 3884740 pts/3 Rl Apr01 173494:26 /opt/bin/vasp5212openmpi で桁が崩れることがある。
|
71
|
+
def update_ps
|
72
|
+
#str = ssh_str('ps -eo "user pid %cpu %mem command"')
|
73
|
+
#results = {}
|
74
|
+
#lines = str.split("\n")
|
75
|
+
#lines.shift # titles of items
|
76
|
+
#lines.each do |line|
|
77
|
+
# user = line[0..7]
|
78
|
+
# pid = line[9..13]
|
79
|
+
# cpu = line[15..18]
|
80
|
+
# mem = line[20..23]
|
81
|
+
# command = line[25..-1]
|
82
|
+
# results[pid] = {
|
83
|
+
# "user" => user,
|
84
|
+
# "cpu" => cpu,
|
85
|
+
# "mem" => mem,
|
86
|
+
# "command" => command
|
87
|
+
# }
|
88
|
+
#end
|
89
|
+
#write_cache('ps', results)
|
90
|
+
|
91
|
+
#str = `ssh #{@hostname} 'ps auxw'`
|
92
|
+
str = ssh_str('ps auxw')
|
93
|
+
results = {}
|
94
|
+
lines = str.split("\n")
|
95
|
+
lines.shift # titles of items
|
96
|
+
lines.each do |line|
|
97
|
+
items = line.split
|
98
|
+
user = items[0]
|
99
|
+
pid = items[1]
|
100
|
+
cpu = items[2]
|
101
|
+
mem = items[3]
|
102
|
+
command = items[10]
|
103
|
+
|
104
|
+
results[pid] = {
|
105
|
+
"user" => user,
|
106
|
+
"cpu" => cpu,
|
107
|
+
"mem" => mem,
|
108
|
+
"command" => command
|
109
|
+
}
|
110
|
+
end
|
111
|
+
write_cache('ps', results)
|
112
|
+
|
113
|
+
##str = `ssh #{@hostname} 'ps auxw'`
|
114
|
+
#str = ssh_str('ps auxw')
|
115
|
+
#results = {}
|
116
|
+
#lines = str.split("\n")
|
117
|
+
#lines.shift # titles of items
|
118
|
+
#lines.each do |line|
|
119
|
+
# user = line[0..7]
|
120
|
+
# pid = line[9..13]
|
121
|
+
# cpu = line[15..18]
|
122
|
+
# mem = line[20..23]
|
123
|
+
# #vsz = line[25..30]
|
124
|
+
# #rss = line[32..36]
|
125
|
+
# #tty = line[38..45]
|
126
|
+
# #stat = line[47..50]
|
127
|
+
# #start = line[52..56]
|
128
|
+
# #time = line[58..63]
|
129
|
+
# command = line[65..-1]
|
130
|
+
# results[pid] = {
|
131
|
+
# "user" => user,
|
132
|
+
# "cpu" => cpu,
|
133
|
+
# "mem" => mem,
|
134
|
+
# "command" => command
|
135
|
+
# }
|
136
|
+
#end
|
137
|
+
#write_cache('ps', results)
|
138
|
+
end
|
139
|
+
|
140
|
+
# dmesg ログ形式でつらい。
|
141
|
+
# /proc/cpuinfo コアごとにでるのでパースめんどう。
|
142
|
+
# lscpu これだと思ったら、CPU MHz がずれてる。ハードウェアで想定される値ではなく、
|
143
|
+
# 実際の速度で書かれるらしい。
|
144
|
+
# 負荷の有無で値がかわる。
|
145
|
+
def update_cpuinfo
|
146
|
+
#str = `ssh #{@hostname} 'cat /proc/cpuinfo'`
|
147
|
+
str = ssh_str('cat /proc/cpuinfo')
|
148
|
+
results = []
|
149
|
+
cur_index = 0
|
150
|
+
results[cur_index] = {}
|
151
|
+
lines = str.split("\n")
|
152
|
+
lines.each do |line|
|
153
|
+
if line =~ /^\s*$/
|
154
|
+
cur_index += 1
|
155
|
+
results[cur_index] = {}
|
156
|
+
next
|
157
|
+
end
|
158
|
+
key, value = line.split(/\s*:\s*/)
|
159
|
+
results[cur_index][key] = value
|
160
|
+
end
|
161
|
+
write_cache('cpuinfo', results)
|
162
|
+
end
|
163
|
+
|
164
|
+
def update_meminfo
|
165
|
+
#str = `ssh #{@hostname} 'cat /proc/meminfo'`
|
166
|
+
str = ssh_str('cat /proc/meminfo')
|
167
|
+
results = {}
|
168
|
+
lines = str.split("\n")
|
169
|
+
lines.each do |line|
|
170
|
+
key, value = line.split(/\s*:\s*/)
|
171
|
+
results[key] = value
|
172
|
+
end
|
173
|
+
write_cache('meminfo', results)
|
174
|
+
end
|
175
|
+
|
176
|
+
############################################################
|
177
|
+
## common
|
178
|
+
#Return from cached ping data.
|
179
|
+
def fetch(name)
|
180
|
+
load_cache(name)
|
181
|
+
end
|
182
|
+
|
183
|
+
def time_updated(name)
|
184
|
+
ping_file = "#{@cache_dir}/#{name}.yaml"
|
185
|
+
if File.exist? ping_file
|
186
|
+
return File.mtime(ping_file)
|
187
|
+
else
|
188
|
+
return nil
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
private
|
193
|
+
|
194
|
+
# 先に ping を打ち、返事がなければ 空文字列 を返す。
|
195
|
+
def ssh_str(command)
|
196
|
+
#pp command
|
197
|
+
update_ping
|
198
|
+
if fetch('ping')
|
199
|
+
return `ssh #{@hostname} #{command}`
|
200
|
+
else
|
201
|
+
return ''
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
def write_cache(name, value)
|
206
|
+
FileUtils.mkdir_p @cache_dir
|
207
|
+
File.open("#{@cache_dir}/#{name}.yaml", "w") do |io|
|
208
|
+
YAML.dump(value, io)
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
def load_cache(name)
|
213
|
+
#return nil unless File.exist? "#{@cache_dir}/#{name}.yaml"
|
214
|
+
cache_file = "#{@cache_dir}/#{name}.yaml"
|
215
|
+
unless File.exist? cache_file
|
216
|
+
raise NoUpdateFile, "#{cache_file} not found."
|
217
|
+
end
|
218
|
+
|
219
|
+
YAML.load_file("#{@cache_dir}/#{name}.yaml")
|
220
|
+
end
|
221
|
+
|
222
|
+
end
|
3
223
|
|
4
|
-
module Comana::HostInspector; end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
|
4
|
+
#
|
5
|
+
#
|
6
|
+
#
|
7
|
+
class Comana::QueueManager
|
8
|
+
#
|
9
|
+
def initialize()
|
10
|
+
end
|
11
|
+
|
12
|
+
#
|
13
|
+
def queues
|
14
|
+
`qconf -sql`.split("\n")
|
15
|
+
end
|
16
|
+
|
17
|
+
# return a queue name with less tasks.
|
18
|
+
def light_queue
|
19
|
+
queues.each do |queue|
|
20
|
+
hostlist(queue)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
def qhost
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
end
|
34
|
+
|
@@ -4,6 +4,8 @@
|
|
4
4
|
require "fileutils"
|
5
5
|
#require "comana/computationmanager.rb"
|
6
6
|
#require "comana/clustersetting.rb"
|
7
|
+
#
|
8
|
+
#For Torque. This class will be obsoleted.
|
7
9
|
|
8
10
|
#
|
9
11
|
#
|
@@ -53,7 +55,7 @@ class Comana::QueueSubmitter < Comana::ComputationManager
|
|
53
55
|
script_path = "#{@dir}/#{SCRIPT}"
|
54
56
|
File.open(script_path, "w") { |io| dump_script(io) }
|
55
57
|
|
56
|
-
#
|
58
|
+
# exec
|
57
59
|
system("cd #{@dir}; qsub -l prologue=#{prologue_path} -l epilogue=#{epilogue_path} #{script_path} > jobid.log")
|
58
60
|
end
|
59
61
|
|
data/lib/comana.rb
CHANGED
@@ -9,5 +9,5 @@ require "comana/clustersetting.rb"
|
|
9
9
|
require "comana/hostselector.rb"
|
10
10
|
require "comana/queuesubmitter.rb"
|
11
11
|
require "comana/hostinspector.rb"
|
12
|
-
require "comana/
|
13
|
-
require "comana/
|
12
|
+
require "comana/queuemanager.rb"
|
13
|
+
require "comana/gridenginescript.rb"
|
@@ -0,0 +1 @@
|
|
1
|
+
var
|
@@ -0,0 +1,112 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
|
4
|
+
require "helper"
|
5
|
+
#require "test/unit"
|
6
|
+
#require "pkg/klass.rb"
|
7
|
+
|
8
|
+
|
9
|
+
class Comana::HostInspector
|
10
|
+
CACHE_DIR = "test/hostinspector/var"
|
11
|
+
end
|
12
|
+
|
13
|
+
class TC_HostInspector < Test::Unit::TestCase
|
14
|
+
CACHE_DIR = Comana::HostInspector::CACHE_DIR
|
15
|
+
|
16
|
+
def setup
|
17
|
+
@h00 = Comana::HostInspector.new("localhost")
|
18
|
+
@h01 = Comana::HostInspector.new("__not_exist_host__")
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_update_ping
|
22
|
+
ping_file = "#{CACHE_DIR}/#{@h00.hostname}/ping.yaml"
|
23
|
+
#FileUtils.rm_rf "#{CACHE_DIR}/#{@h00.hostname}"
|
24
|
+
FileUtils.rm ping_file if File.exist?(ping_file)
|
25
|
+
assert_equal(false, File.exist?(ping_file))
|
26
|
+
@h00.update_ping
|
27
|
+
assert_equal(true, File.exist?(ping_file))
|
28
|
+
assert_equal(true, YAML.load_file(ping_file))
|
29
|
+
|
30
|
+
ping_file = "#{CACHE_DIR}/#{@h01.hostname}/ping.yaml"
|
31
|
+
FileUtils.rm ping_file if File.exist?(ping_file)
|
32
|
+
assert_equal(false, File.exist?(ping_file))
|
33
|
+
@h01.update_ping
|
34
|
+
assert_equal(true, File.exist?(ping_file))
|
35
|
+
assert_equal(false, YAML.load_file(ping_file))
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_update_cwd
|
39
|
+
cwd_file = "#{CACHE_DIR}/#{@h00.hostname}/cwd.yaml"
|
40
|
+
FileUtils.rm cwd_file if File.exist?(cwd_file)
|
41
|
+
assert_equal(false, File.exist?(cwd_file))
|
42
|
+
@h00.update_cwd
|
43
|
+
assert_equal(true, File.exist?(cwd_file))
|
44
|
+
assert_equal(Hash, YAML.load_file(cwd_file).class)
|
45
|
+
|
46
|
+
#cwd_file = "#{CACHE_DIR}/#{@h01.hostname}/cwd.yaml"
|
47
|
+
#FileUtils.rm cwd_file if File.exist?(cwd_file)
|
48
|
+
#assert_equal(false, File.exist?(cwd_file))
|
49
|
+
#@h01.update_cwd
|
50
|
+
#assert_equal(true, File.exist?(cwd_file))
|
51
|
+
#assert_equal(Hash, YAML.load_file(cwd_file).class)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_update_ps
|
55
|
+
ps_file = "#{CACHE_DIR}/#{@h00.hostname}/ps.yaml"
|
56
|
+
FileUtils.rm ps_file if File.exist?(ps_file)
|
57
|
+
assert_equal(false, File.exist?(ps_file))
|
58
|
+
@h00.update_ps
|
59
|
+
assert_equal(true, File.exist?(ps_file))
|
60
|
+
assert_equal(Hash, YAML.load_file(ps_file).class)
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_update_cpuinfo
|
64
|
+
cpuinfo_file = "#{CACHE_DIR}/#{@h00.hostname}/cpuinfo.yaml"
|
65
|
+
FileUtils.rm cpuinfo_file if File.exist?(cpuinfo_file)
|
66
|
+
assert_equal(false, File.exist?(cpuinfo_file))
|
67
|
+
@h00.update_cpuinfo
|
68
|
+
assert_equal(true, File.exist?(cpuinfo_file))
|
69
|
+
|
70
|
+
results = YAML.load_file(cpuinfo_file)
|
71
|
+
assert_equal(Array, results.class)
|
72
|
+
assert_equal(Hash, results[0].class)
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_update_meminfo
|
76
|
+
meminfo_file = "#{CACHE_DIR}/#{@h00.hostname}/meminfo.yaml"
|
77
|
+
FileUtils.rm meminfo_file if File.exist?(meminfo_file)
|
78
|
+
assert_equal(false, File.exist?(meminfo_file))
|
79
|
+
@h00.update_meminfo
|
80
|
+
assert_equal(true, File.exist?(meminfo_file))
|
81
|
+
|
82
|
+
results = YAML.load_file(meminfo_file)
|
83
|
+
assert_equal(Hash, results.class)
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_fetch
|
87
|
+
@h00.update_ping
|
88
|
+
assert_equal(true, @h00.fetch('ping'))
|
89
|
+
|
90
|
+
@h01.update_ping
|
91
|
+
assert_equal(false, @h01.fetch('ping'))
|
92
|
+
|
93
|
+
ping_file = "#{CACHE_DIR}/#{@h00.hostname}/ping.yaml"
|
94
|
+
FileUtils.rm ping_file if File.exist?(ping_file)
|
95
|
+
assert_raise(Comana::HostInspector::NoUpdateFile) do
|
96
|
+
@h00.fetch('ping')
|
97
|
+
end
|
98
|
+
@h00.update_ping
|
99
|
+
assert_equal(true, @h00.fetch('ping'))
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_time_ping
|
103
|
+
time = Time.local(2015, 5, 29, 22, 00, 17)
|
104
|
+
ping_file = "#{CACHE_DIR}/#{@h00.hostname}/ping.yaml"
|
105
|
+
#pp File.mtime(ping_file)
|
106
|
+
File::utime(time, time, ping_file)
|
107
|
+
#pp File.mtime(ping_file)
|
108
|
+
assert_equal(time, File.mtime(ping_file))
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
|
4
|
+
require "helper"
|
5
|
+
#require "test/unit"
|
6
|
+
#require "pkg/klass.rb"
|
7
|
+
|
8
|
+
class TC_QueueManager < Test::Unit::TestCase
|
9
|
+
def setup
|
10
|
+
@qm00 = Comana::QueueManager.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_qhost
|
14
|
+
@qm00.qhost
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
metadata
CHANGED
@@ -1,103 +1,109 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: comana
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- ippei94da
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2016-03-04 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: test-unit
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.1'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.1'
|
14
27
|
- !ruby/object:Gem::Dependency
|
15
28
|
name: rdoc
|
16
29
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
30
|
requirements:
|
19
|
-
- - ~>
|
31
|
+
- - "~>"
|
20
32
|
- !ruby/object:Gem::Version
|
21
|
-
version: 4.
|
33
|
+
version: '4.2'
|
22
34
|
type: :development
|
23
35
|
prerelease: false
|
24
36
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
37
|
requirements:
|
27
|
-
- - ~>
|
38
|
+
- - "~>"
|
28
39
|
- !ruby/object:Gem::Version
|
29
|
-
version: 4.
|
40
|
+
version: '4.2'
|
30
41
|
- !ruby/object:Gem::Dependency
|
31
42
|
name: bundler
|
32
43
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
44
|
requirements:
|
35
|
-
- - ~>
|
45
|
+
- - "~>"
|
36
46
|
- !ruby/object:Gem::Version
|
37
|
-
version: 1.
|
47
|
+
version: '1.11'
|
38
48
|
type: :development
|
39
49
|
prerelease: false
|
40
50
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
51
|
requirements:
|
43
|
-
- - ~>
|
52
|
+
- - "~>"
|
44
53
|
- !ruby/object:Gem::Version
|
45
|
-
version: 1.
|
54
|
+
version: '1.11'
|
46
55
|
- !ruby/object:Gem::Dependency
|
47
56
|
name: jeweler
|
48
57
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
58
|
requirements:
|
51
|
-
- -
|
59
|
+
- - "~>"
|
52
60
|
- !ruby/object:Gem::Version
|
53
|
-
version: 2.0
|
61
|
+
version: '2.0'
|
54
62
|
type: :development
|
55
63
|
prerelease: false
|
56
64
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
65
|
requirements:
|
59
|
-
- -
|
66
|
+
- - "~>"
|
60
67
|
- !ruby/object:Gem::Version
|
61
|
-
version: 2.0
|
68
|
+
version: '2.0'
|
62
69
|
- !ruby/object:Gem::Dependency
|
63
70
|
name: simplecov
|
64
71
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
72
|
requirements:
|
67
|
-
- -
|
73
|
+
- - "~>"
|
68
74
|
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
75
|
+
version: '0.11'
|
70
76
|
type: :development
|
71
77
|
prerelease: false
|
72
78
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
79
|
requirements:
|
75
|
-
- -
|
80
|
+
- - "~>"
|
76
81
|
- !ruby/object:Gem::Version
|
77
|
-
version: '0'
|
82
|
+
version: '0.11'
|
78
83
|
- !ruby/object:Gem::Dependency
|
79
84
|
name: tefil
|
80
85
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
86
|
requirements:
|
83
|
-
- -
|
87
|
+
- - ">="
|
84
88
|
- !ruby/object:Gem::Version
|
85
|
-
version: 0.
|
89
|
+
version: '0.1'
|
86
90
|
type: :development
|
87
91
|
prerelease: false
|
88
92
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
93
|
requirements:
|
91
|
-
- -
|
94
|
+
- - ">="
|
92
95
|
- !ruby/object:Gem::Version
|
93
|
-
version: 0.
|
94
|
-
description:
|
96
|
+
version: '0.1'
|
97
|
+
description: "Comana, COmputation MANAger,\n is a software to provide a framework
|
95
98
|
of\n managing scientific computing.\n Researchers on computing have to check
|
96
99
|
calculation and\n generate new calculation and execute, repeatedly.\n The
|
97
100
|
abstract class that this gem provide would help the work.\n "
|
98
101
|
email: ippei94da@gmail.com
|
99
102
|
executables:
|
103
|
+
- genqsub
|
104
|
+
- hostinfo
|
100
105
|
- machinestatus
|
106
|
+
- queueinfo
|
101
107
|
- scpall
|
102
108
|
- sshall
|
103
109
|
extensions: []
|
@@ -105,28 +111,33 @@ extra_rdoc_files:
|
|
105
111
|
- LICENSE.txt
|
106
112
|
- README.rdoc
|
107
113
|
files:
|
108
|
-
- .document
|
109
|
-
- .rspec
|
114
|
+
- ".document"
|
115
|
+
- ".rspec"
|
110
116
|
- CHANGES
|
111
117
|
- Gemfile
|
112
118
|
- LICENSE.txt
|
113
119
|
- README.rdoc
|
114
120
|
- Rakefile
|
115
121
|
- VERSION
|
122
|
+
- bin/genqsub
|
123
|
+
- bin/hostinfo
|
116
124
|
- bin/machinestatus
|
125
|
+
- bin/queueinfo
|
117
126
|
- bin/scpall
|
118
127
|
- bin/sshall
|
128
|
+
- comana.gemspec
|
119
129
|
- example/dot.clustersetting
|
120
130
|
- lib/comana.rb
|
121
131
|
- lib/comana/clustersetting.rb
|
122
132
|
- lib/comana/computationmanager.rb
|
133
|
+
- lib/comana/gridenginescript.rb
|
123
134
|
- lib/comana/hostinspector.rb
|
124
|
-
- lib/comana/hostinspector/pbsnodes.rb
|
125
|
-
- lib/comana/hostinspector/ping.rb
|
126
135
|
- lib/comana/hostselector.rb
|
136
|
+
- lib/comana/queuemanager.rb
|
127
137
|
- lib/comana/queuesubmitter.rb
|
128
138
|
- memo.txt
|
129
139
|
- test/helper.rb
|
140
|
+
- test/hostinspector/.gitignore
|
130
141
|
- test/locked/input_a
|
131
142
|
- test/locked/input_b
|
132
143
|
- test/locked/lock_comana/dummy
|
@@ -149,36 +160,33 @@ files:
|
|
149
160
|
- test/queuesubmitter/unlocked/dummy
|
150
161
|
- test/test_clustersetting.rb
|
151
162
|
- test/test_computationmanager.rb
|
152
|
-
- test/
|
153
|
-
- test/
|
163
|
+
- test/test_gridenginescript.rb
|
164
|
+
- test/test_hostinspector.rb
|
154
165
|
- test/test_hostselector.rb
|
166
|
+
- test/test_queuemanager.rb
|
155
167
|
- test/test_queuesubmitter.rb
|
156
168
|
homepage: http://github.com/ippei94da/comana
|
157
169
|
licenses:
|
158
170
|
- MIT
|
171
|
+
metadata: {}
|
159
172
|
post_install_message:
|
160
173
|
rdoc_options: []
|
161
174
|
require_paths:
|
162
175
|
- lib
|
163
176
|
required_ruby_version: !ruby/object:Gem::Requirement
|
164
|
-
none: false
|
165
177
|
requirements:
|
166
|
-
- -
|
178
|
+
- - ">="
|
167
179
|
- !ruby/object:Gem::Version
|
168
180
|
version: '0'
|
169
|
-
segments:
|
170
|
-
- 0
|
171
|
-
hash: -3582063889889649984
|
172
181
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
|
-
none: false
|
174
182
|
requirements:
|
175
|
-
- -
|
183
|
+
- - ">="
|
176
184
|
- !ruby/object:Gem::Version
|
177
185
|
version: '0'
|
178
186
|
requirements: []
|
179
187
|
rubyforge_project:
|
180
|
-
rubygems_version:
|
188
|
+
rubygems_version: 2.2.3
|
181
189
|
signing_key:
|
182
|
-
specification_version:
|
190
|
+
specification_version: 4
|
183
191
|
summary: Manager for scientific computing
|
184
192
|
test_files: []
|