eclipsed 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +0 -1
- data/eclipsed.gemspec +2 -2
- data/lib/eclipsed/version.rb +1 -1
- data/lib/eclipsed.rb +34 -162
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9fd1e98568770cf285cb13945ba524ae9652b3b8
|
4
|
+
data.tar.gz: e5bcc5c59817d7256912c5b28e061d10ea85f718
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e06b946cc75b2c6b584b4c318360205311193afe4248a1961d40999e17cd486a49c0a08161a045945d10541e8e1d33a8475178f7e87c078c4fa1d8f397b38ccd
|
7
|
+
data.tar.gz: 972b98d0c24c3855c4d0a9d1d2cfd9627a718321e6e05b07b20eee195b4ab18a84a235d898580e644231be636cb801f476f1f72a816f62010b0ee9a3793e8a20
|
data/Gemfile
CHANGED
@@ -3,7 +3,6 @@ source 'https://rubygems.org'
|
|
3
3
|
# Specify your gem's dependencies in eclipsed.gemspec
|
4
4
|
gemspec
|
5
5
|
|
6
|
-
gem 'ffi' # For loading C functions, in this case the hash functions
|
7
6
|
gem 'awesome_print' # Pretty-printer
|
8
7
|
gem 'table_print' # Pretty-printer
|
9
8
|
gem 'pry' # Pretty-printer
|
data/eclipsed.gemspec
CHANGED
@@ -13,8 +13,8 @@ Gem::Specification.new do |spec|
|
|
13
13
|
#spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com' to prevent pushes to rubygems.org, or delete to allow pushes to any server."
|
14
14
|
end
|
15
15
|
|
16
|
-
spec.summary = %q{
|
17
|
-
spec.description = %q{Controls
|
16
|
+
spec.summary = %q{EclipseDFS governor}
|
17
|
+
spec.description = %q{Controls EclipseDFS.}
|
18
18
|
spec.homepage = "http://dicl.unist.ac.kr"
|
19
19
|
spec.license = "MIT"
|
20
20
|
|
data/lib/eclipsed/version.rb
CHANGED
data/lib/eclipsed.rb
CHANGED
@@ -1,17 +1,10 @@
|
|
1
1
|
require "eclipsed/version"
|
2
2
|
require 'optparse' # For parsing the options
|
3
3
|
require 'json' #
|
4
|
-
require 'ffi' # For loading C functions, in this case the hash functions
|
5
4
|
require 'awesome_print' # Pretty-printer
|
6
5
|
require 'table_print' # Pretty-printer
|
7
6
|
|
8
7
|
module Eclipsed
|
9
|
-
module EclipseAPI #{{{
|
10
|
-
extend FFI::Library
|
11
|
-
ffi_lib "libecfs.so"
|
12
|
-
attach_function :hash_ruby, [ :string ], :uint32
|
13
|
-
end
|
14
|
-
#}}}
|
15
8
|
# print_async {{{
|
16
9
|
def print_async(msg)
|
17
10
|
Thread.new(msg) do |m|
|
@@ -36,9 +29,6 @@ module Eclipsed
|
|
36
29
|
@verbose = false
|
37
30
|
end
|
38
31
|
|
39
|
-
# }}}
|
40
|
-
# set_fs_variables {{{
|
41
|
-
|
42
32
|
# }}}
|
43
33
|
# find_confpath {{{
|
44
34
|
def find_confpath
|
@@ -55,15 +45,31 @@ module Eclipsed
|
|
55
45
|
# launch {{{
|
56
46
|
def launch
|
57
47
|
thr = print_async "Initializing framework..."
|
58
|
-
`master &>/dev/null &`
|
59
|
-
sleep 1
|
60
48
|
@nodelist.each do |node|
|
61
|
-
|
49
|
+
cmd = "ssh #{node} 'export PATH=\"#{ENV['PATH']}\"; nohup eclipse_node </dev/null &>/dev/null &'"
|
50
|
+
puts cmd if @verbose
|
51
|
+
system cmd
|
62
52
|
end
|
63
53
|
thr.exit
|
64
54
|
print "\r"
|
65
55
|
end
|
66
56
|
|
57
|
+
#}}}
|
58
|
+
# debug_at {{{
|
59
|
+
def debug_at(index)
|
60
|
+
i = 0
|
61
|
+
@nodelist.each do |node|
|
62
|
+
if i != index.to_i then
|
63
|
+
cmd = "ssh #{node} 'export PATH=\"#{ENV['PATH']}\"; nohup eclipse_node </dev/null &>/dev/null & exit'"
|
64
|
+
puts cmd
|
65
|
+
system cmd
|
66
|
+
end
|
67
|
+
i = i + 1
|
68
|
+
end
|
69
|
+
cmd = "ssh #{@nodelist[index.to_i]} \'export PATH=\"#{ENV['PATH']}\"; gdb --args eclipse_node \'"
|
70
|
+
puts cmd
|
71
|
+
exec cmd
|
72
|
+
end
|
67
73
|
#}}}
|
68
74
|
# show {{{
|
69
75
|
def show
|
@@ -72,13 +78,17 @@ module Eclipsed
|
|
72
78
|
instance = [ ]
|
73
79
|
in_english = { true => "Running", false => "Stopped" }
|
74
80
|
|
75
|
-
|
76
|
-
puts cmd if @verbose
|
77
|
-
status = in_english[system cmd]
|
78
|
-
instance << { :host => "localhost", :status => status, :role => "master" }
|
79
|
-
|
81
|
+
status = nil
|
80
82
|
@nodelist.each do |node|
|
81
|
-
|
83
|
+
out = nil
|
84
|
+
cmd = "ssh #{node} \'pgrep -x eclipse_node &>/dev/null; echo $\'"
|
85
|
+
puts cmd if @verbose
|
86
|
+
if `#{cmd}`.chomp == '0'
|
87
|
+
out = true
|
88
|
+
else
|
89
|
+
out = false
|
90
|
+
end
|
91
|
+
mr_status = in_english[out]
|
82
92
|
instance << { :host => node, :status => mr_status, :role => "worker" }
|
83
93
|
end
|
84
94
|
|
@@ -91,20 +101,12 @@ module Eclipsed
|
|
91
101
|
# close {{{
|
92
102
|
def close
|
93
103
|
thr = print_async "Stopping framework..."
|
94
|
-
`pkill -u #{`whoami`.chomp} master`
|
95
104
|
@nodelist.each do |node|
|
96
|
-
`ssh #{node} pkill -u #{`whoami`.chomp}
|
105
|
+
`ssh #{node} pkill -u #{`whoami`.chomp} eclipse_node`
|
97
106
|
end
|
98
107
|
thr.exit
|
99
108
|
print "\r"
|
100
109
|
end #}}}
|
101
|
-
# submit {{{
|
102
|
-
def submit(input)
|
103
|
-
# @instance[:app]= input
|
104
|
-
# File.open(@fs_tmpfile, 'w') { |f| f.write(JSON.generate(@instance)) }
|
105
|
-
|
106
|
-
system input.join(' ')
|
107
|
-
end #}}}
|
108
110
|
# kill {{{
|
109
111
|
def kill(input)
|
110
112
|
@nodelist.each do |node|
|
@@ -120,163 +122,33 @@ module Eclipsed
|
|
120
122
|
end #}}}
|
121
123
|
end
|
122
124
|
|
123
|
-
class
|
124
|
-
include EclipseAPI
|
125
|
-
def initialize #{{{
|
126
|
-
@files = {}
|
127
|
-
@config = File.open(find_confpath) { |f| JSON.parse(f.read) }
|
128
|
-
@fs_path = @config['path']['filesystem']
|
129
|
-
@fs_scratch_path = @config['path']['scratch']
|
130
|
-
@fs_tmpfile = @fs_path + "/.list"
|
131
|
-
@files = File.open(@fs_tmpfile) { |f| JSON.parse(f.read) } if File.exist? @fs_tmpfile
|
132
|
-
alias :hash :hash_ruby
|
133
|
-
super()
|
134
|
-
end
|
135
|
-
|
136
|
-
def node_containing(fn); @nodelist[hash(fn) % @nodelist.length] end
|
137
|
-
|
138
|
-
#}}}
|
139
|
-
# put {{{
|
140
|
-
def put(input)
|
141
|
-
input.each do |fn|
|
142
|
-
node = node_containing(fn)
|
143
|
-
@files[fn] = node
|
144
|
-
|
145
|
-
File.open(@fs_tmpfile, 'w') { |f| f.write(JSON.generate(@files)) }
|
146
|
-
cmd = "scp #{@fs_path}/#{fn} #{node}:#{@fs_scratch_path}/#{fn}"
|
147
|
-
puts cmd if @verbose
|
148
|
-
system cmd
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
#}}}
|
153
|
-
# cat {{{
|
154
|
-
def cat(input)
|
155
|
-
input.each do |fn|
|
156
|
-
system "ssh #{node_containing(fn)} cat #{@fs_scratch_path}/#{fn}"
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
#}}}
|
161
|
-
# get {{{
|
162
|
-
def get(input)
|
163
|
-
input.each do |fn|
|
164
|
-
cmd = "scp #{node_containing(fn)}:#{@fs_scratch_path}/#{fn} ."
|
165
|
-
puts cmd if @verbose
|
166
|
-
system cmd
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
#}}}
|
171
|
-
# rm {{{
|
172
|
-
def rm(input)
|
173
|
-
input = @files.keys.grep(%r[#{@regex}]) if @regex
|
174
|
-
|
175
|
-
input.each do |fn|
|
176
|
-
# raise "\'#{fn}\' not found in Eclipse FS" unless @files[fn]
|
177
|
-
|
178
|
-
node = node_containing(fn)
|
179
|
-
pathtofile = @fs_scratch_path + "/" + fn
|
180
|
-
cmd = "ssh #{node} rm -f #{pathtofile}"
|
181
|
-
puts cmd if @verbose
|
182
|
-
system cmd
|
183
|
-
@files.delete(fn)
|
184
|
-
File.open(@fs_tmpfile, 'w') { |f| f.write(JSON.generate(@files)) }
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
#}}}
|
189
|
-
def list #{{{
|
190
|
-
thr = print_async "Collecting information..."
|
191
|
-
output = [ ]
|
192
|
-
@files.each{|k, v| output << { :filename => k, :location => v} }
|
193
|
-
|
194
|
-
@nodelist.each do |node|
|
195
|
-
`ssh #{node} ls #{@fs_scratch_path}`.each_line do |l|
|
196
|
-
l.chomp!
|
197
|
-
output << { :filename => l, :location => node} unless @files.has_key?(l)
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
thr.exit
|
202
|
-
print "\r\e[K"
|
203
|
-
tp output, :filename, :location
|
204
|
-
end
|
205
|
-
|
206
|
-
#}}}
|
207
|
-
def config #{{{
|
208
|
-
ap self.instance_variables.map{|var| [var, self.instance_variable_get(var)]}.to_h
|
209
|
-
end #}}}
|
210
|
-
# compile {{{
|
211
|
-
def compile(input)
|
212
|
-
sources = input.join(' ')
|
213
|
-
raise 'Need to specify output file (-o File)' unless @outputfile
|
214
|
-
|
215
|
-
cmd = "#{CXX} -static -o #{@outputfile} #{sources} -l ecfs"
|
216
|
-
puts cmd if @verbose
|
217
|
-
system cmd
|
218
|
-
end
|
219
|
-
|
220
|
-
#}}}
|
221
|
-
def clear #{{{
|
222
|
-
rm @files.keys
|
223
|
-
@nodelist.each do |node|
|
224
|
-
cmd = "ssh #{node} rm -rf #{@fs_scratch_path}/.job* #{@fs_scratch_path}/*"
|
225
|
-
puts cmd if @verbose
|
226
|
-
system cmd
|
227
|
-
end
|
228
|
-
end
|
229
|
-
#}}}
|
230
|
-
end
|
231
|
-
|
232
|
-
class CLI_driver < Fs
|
125
|
+
class CLI_driver < Core
|
233
126
|
def initialize input: #{{{
|
234
127
|
@options = {}
|
235
128
|
super()
|
236
129
|
OptionParser.new do |opts|
|
237
|
-
opts.banner = "
|
238
|
-
"Usage:
|
130
|
+
opts.banner = "eclipsed (Eclipse Daemon controler) is an script to manage the EclipseDFS\n" +
|
131
|
+
"Usage: eclipsed [options] <actions> [FILE]..."
|
239
132
|
opts.version = 1.0
|
240
133
|
opts.program_name = "Eclipse Launcher"
|
241
134
|
opts.separator "Core actions"
|
242
135
|
opts.separator " launch Create new Eclipse network"
|
243
136
|
opts.separator " close Close the network"
|
244
137
|
opts.separator " status Check the status of the network"
|
245
|
-
opts.separator " submit Submit application"
|
246
138
|
opts.separator " kill kill application in each node"
|
247
139
|
opts.separator ""
|
248
|
-
opts.separator "Filesystem actions"
|
249
|
-
opts.separator " put FILE... insert FILE..."
|
250
|
-
opts.separator " get FILE... copy the FILES to the current directory"
|
251
|
-
opts.separator " rm FILE... remove FILE..."
|
252
|
-
opts.separator " cat FILE... \'cat\' the FILE..."
|
253
|
-
opts.separator " clear remove all the files in the FS"
|
254
|
-
opts.separator " ls list all the files in the FS"
|
255
|
-
opts.separator " config list all the internal variables"
|
256
|
-
opts.separator " cc -o OUTPUT INPUT... Compile file with EclipseFS API using OUTPUT name"
|
257
|
-
opts.separator ""
|
258
140
|
opts.separator "Options"
|
259
141
|
opts.on_tail("-h", "--help" , "recursive this") { puts opts; exit}
|
260
142
|
opts.on_tail("-v", "--verbose" , "printout verbose info") { @verbose = true }
|
261
143
|
opts.on_tail("-V", "--version" , "printout version") { puts opts.ver; exit }
|
262
|
-
opts.on_tail("-o FILE", "output file, for mcc") { |f| @outputfile = f }
|
263
|
-
opts.on_tail("-r REGEX", "regex for remove or ls") { |r| @regex = r }
|
264
144
|
end.parse! input
|
265
145
|
|
266
146
|
case input.shift
|
267
147
|
when 'launch' then launch
|
268
148
|
when 'close' then close
|
269
149
|
when 'status' then show
|
270
|
-
when 'submit' then submit input
|
271
150
|
when 'kill' then kill input
|
272
|
-
when '
|
273
|
-
when 'get' then get input
|
274
|
-
when 'cat' then cat input
|
275
|
-
when 'rm' then rm input
|
276
|
-
when 'clear' then clear
|
277
|
-
when 'ls' then list
|
278
|
-
when 'config' then config
|
279
|
-
when 'cc' then compile(input)
|
151
|
+
when 'debug_at' then debug_at input[0]
|
280
152
|
when 'pry' then pry
|
281
153
|
else raise "Not action given"
|
282
154
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eclipsed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vicente Adolfo Bolea Sanchez
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,7 +38,7 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
|
-
description: Controls
|
41
|
+
description: Controls EclipseDFS.
|
42
42
|
email:
|
43
43
|
- vicente.bolea@gmail.com
|
44
44
|
executables:
|
@@ -77,8 +77,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
77
|
version: '0'
|
78
78
|
requirements: []
|
79
79
|
rubyforge_project:
|
80
|
-
rubygems_version: 2.4.
|
80
|
+
rubygems_version: 2.4.3
|
81
81
|
signing_key:
|
82
82
|
specification_version: 4
|
83
|
-
summary:
|
83
|
+
summary: EclipseDFS governor
|
84
84
|
test_files: []
|