require 'xp5k'
myxp = XP5K::XP.new
myxp.define_job({
:resources => ["nodes=50, walltime=1:00:00"],
:site => 'lyon',
:types => ["allow_classic_ssh"],
:name => "iruby notebook" ,
:roles => [XP5K::Role.new({:name => 'mynode', :size => 50})],
:command => "sleep 86400"
})
submit is asynchronous, wait_for_jobs will wait for all the resources to be ready.
myxp.submit
myxp.wait_for_jobs
#<Proc:0x007fabaf947098@/Users/msimonin/msimonin@github.com/xp5k/lib/xp5k/xp.rb:118>
xp5k/rake include some helpers to run commands on the nodes of your reservation.
require 'xp5k/rake'
h = on roles('mynode'), {:user => 'msimonin', :capture => true} do
cmd = ['uptime -s']
end
Connected to sagittaire-18.lyon.grid5000.fr... Connected to sagittaire-20.lyon.grid5000.fr... Connected to sagittaire-2.lyon.grid5000.fr... Connected to sagittaire-22.lyon.grid5000.fr... Connected to sagittaire-28.lyon.grid5000.fr... Connected to sagittaire-3.lyon.grid5000.fr... Connected to sagittaire-29.lyon.grid5000.fr... Connected to sagittaire-30.lyon.grid5000.fr... Connected to sagittaire-24.lyon.grid5000.fr... Connected to sagittaire-19.lyon.grid5000.fr... Connected to sagittaire-33.lyon.grid5000.fr... Connected to sagittaire-31.lyon.grid5000.fr... Connected to sagittaire-32.lyon.grid5000.fr... Connected to sagittaire-34.lyon.grid5000.fr... Connected to sagittaire-46.lyon.grid5000.fr... Connected to sagittaire-47.lyon.grid5000.fr... Connected to sagittaire-5.lyon.grid5000.fr... Connected to sagittaire-50.lyon.grid5000.fr... Connected to sagittaire-53.lyon.grid5000.fr... Connected to sagittaire-55.lyon.grid5000.fr... Connected to sagittaire-56.lyon.grid5000.fr... Connected to sagittaire-57.lyon.grid5000.fr... Connected to sagittaire-58.lyon.grid5000.fr... Connected to sagittaire-59.lyon.grid5000.fr... Connected to sagittaire-6.lyon.grid5000.fr... Connected to sagittaire-64.lyon.grid5000.fr... Connected to sagittaire-66.lyon.grid5000.fr... Connected to sagittaire-65.lyon.grid5000.fr... Connected to sagittaire-67.lyon.grid5000.fr... Connected to sagittaire-69.lyon.grid5000.fr... Connected to sagittaire-7.lyon.grid5000.fr... Connected to sagittaire-71.lyon.grid5000.fr... Connected to sagittaire-72.lyon.grid5000.fr... Connected to sagittaire-74.lyon.grid5000.fr... Connected to sagittaire-75.lyon.grid5000.fr... Connected to sagittaire-77.lyon.grid5000.fr... Connected to sagittaire-78.lyon.grid5000.fr... Connected to sagittaire-9.lyon.grid5000.fr... [stdout][sagittaire-3.lyon.grid5000.fr] 2016-01-13 23:33:27 [command][sagittaire-31.lyon.grid5000.fr] uptime -s [command][sagittaire-42.lyon.grid5000.fr] uptime -s [command][sagittaire-45.lyon.grid5000.fr] uptime -s [stdout][sagittaire-31.lyon.grid5000.fr] 2016-01-13 23:33:48 [command][sagittaire-46.lyon.grid5000.fr] uptime -s [stdout][sagittaire-34.lyon.grid5000.fr] 2016-01-13 23:33:28 [command][sagittaire-48.lyon.grid5000.fr] uptime -s [stdout][sagittaire-33.lyon.grid5000.fr] 2016-01-13 23:33:47 [command][sagittaire-49.lyon.grid5000.fr] uptime -s [stdout][sagittaire-38.lyon.grid5000.fr] 2016-01-13 23:33:29 [command][sagittaire-5.lyon.grid5000.fr] uptime -s [stdout][sagittaire-39.lyon.grid5000.fr] 2016-01-13 23:33:30 [command][sagittaire-50.lyon.grid5000.fr] uptime -s [stdout][sagittaire-4.lyon.grid5000.fr] 2016-01-13 23:33:27 [command][sagittaire-52.lyon.grid5000.fr] uptime -s [stdout][sagittaire-42.lyon.grid5000.fr] 2016-01-13 22:36:21 [command][sagittaire-53.lyon.grid5000.fr] uptime -s [stdout][sagittaire-48.lyon.grid5000.fr] 2016-01-13 23:33:29 [command][sagittaire-58.lyon.grid5000.fr] uptime -s [stdout][sagittaire-56.lyon.grid5000.fr] 2016-01-13 23:33:34 [command][sagittaire-67.lyon.grid5000.fr] uptime -s [stdout][sagittaire-57.lyon.grid5000.fr] 2016-01-13 23:33:33 [command][sagittaire-69.lyon.grid5000.fr] uptime -s [stdout][sagittaire-58.lyon.grid5000.fr] 2016-01-13 23:33:34 [command][sagittaire-7.lyon.grid5000.fr] uptime -s [stdout][sagittaire-6.lyon.grid5000.fr] 2016-01-13 23:33:27 [command][sagittaire-71.lyon.grid5000.fr] uptime -s [stdout][sagittaire-63.lyon.grid5000.fr] 2016-01-13 23:33:32 [stdout][sagittaire-64.lyon.grid5000.fr] 2016-01-13 23:33:33 [command][sagittaire-72.lyon.grid5000.fr] uptime -s [command][sagittaire-74.lyon.grid5000.fr] uptime -s [stdout][sagittaire-65.lyon.grid5000.fr] 2016-01-13 23:33:32 [command][sagittaire-75.lyon.grid5000.fr] uptime -s [command][sagittaire-77.lyon.grid5000.fr] uptime -s [stdout][sagittaire-59.lyon.grid5000.fr] 2016-01-13 23:33:33 [command][sagittaire-78.lyon.grid5000.fr] uptime -s [command][sagittaire-9.lyon.grid5000.fr] uptime -s [stdout][sagittaire-7.lyon.grid5000.fr] 2016-01-13 23:33:28 [stdout][sagittaire-71.lyon.grid5000.fr] 2016-01-13 23:33:49 [stdout][sagittaire-72.lyon.grid5000.fr] 2016-01-13 23:33:51 [stdout][sagittaire-74.lyon.grid5000.fr] 2016-01-13 19:25:06 [stdout][sagittaire-75.lyon.grid5000.fr] 2016-01-13 23:33:53 [stdout][sagittaire-77.lyon.grid5000.fr] 2016-01-13 23:33:50 [stdout][sagittaire-78.lyon.grid5000.fr] 2016-01-13 23:33:49 [stdout][sagittaire-9.lyon.grid5000.fr] 2016-01-13 23:33:29 ---- sagittaire-18.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 17:46:48"] ---- sagittaire-19.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:28"] ---- sagittaire-2.lyon.grid5000.fr ------------------------------------------------------------------ ["2016-01-13 17:47:00"] ---- sagittaire-20.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:28"] ---- sagittaire-22.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:40"] ---- sagittaire-24.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:28"] ---- sagittaire-28.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:31"] ---- sagittaire-29.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:32"] ---- sagittaire-3.lyon.grid5000.fr ------------------------------------------------------------------ ["2016-01-13 23:33:27"] ---- sagittaire-30.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:31"] ---- sagittaire-31.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:48"] ---- sagittaire-32.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:31"] ---- sagittaire-33.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:47"] ---- sagittaire-34.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:28"] ---- sagittaire-38.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:29"] ---- sagittaire-39.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:30"] ---- sagittaire-4.lyon.grid5000.fr ------------------------------------------------------------------ ["2016-01-13 23:33:27"] ---- sagittaire-42.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 22:36:21"] ---- sagittaire-43.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:28"] ---- sagittaire-45.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:29"] ---- sagittaire-46.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:29"] ---- sagittaire-47.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:30"] ---- sagittaire-48.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:29"] ---- sagittaire-49.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 19:17:10"] ---- sagittaire-5.lyon.grid5000.fr ------------------------------------------------------------------ ["2016-01-13 23:33:27"] ---- sagittaire-50.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:29"] ---- sagittaire-52.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:29"] ---- sagittaire-53.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:30"] ---- sagittaire-54.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:31"] ---- sagittaire-55.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:33"] ---- sagittaire-56.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:34"] ---- sagittaire-57.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:33"] ---- sagittaire-58.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:34"] ---- sagittaire-59.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:33"] ---- sagittaire-6.lyon.grid5000.fr ------------------------------------------------------------------ ["2016-01-13 23:33:27"] ---- sagittaire-61.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:34"] ---- sagittaire-63.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:32"] ---- sagittaire-64.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:33"] ---- sagittaire-65.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:32"] ---- sagittaire-66.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:33"] ---- sagittaire-67.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:32"] ---- sagittaire-69.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:33"] ---- sagittaire-7.lyon.grid5000.fr ------------------------------------------------------------------ ["2016-01-13 23:33:28"] ---- sagittaire-71.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:49"] ---- sagittaire-72.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:51"] ---- sagittaire-74.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 19:25:06"] ---- sagittaire-75.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:53"] ---- sagittaire-77.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:50"] ---- sagittaire-78.lyon.grid5000.fr ----------------------------------------------------------------- ["2016-01-13 23:33:49"] ---- sagittaire-9.lyon.grid5000.fr ------------------------------------------------------------------ ["2016-01-13 23:33:29"] Closing ssh connections...
{"sagittaire-3.lyon.grid5000.fr"=>["2016-01-13 23:33:27"], "sagittaire-2.lyon.grid5000.fr"=>["2016-01-13 17:47:00"], "sagittaire-18.lyon.grid5000.fr"=>["2016-01-13 17:46:48"], "sagittaire-22.lyon.grid5000.fr"=>["2016-01-13 23:33:40"], "sagittaire-28.lyon.grid5000.fr"=>["2016-01-13 23:33:31"], "sagittaire-30.lyon.grid5000.fr"=>["2016-01-13 23:33:31"], "sagittaire-24.lyon.grid5000.fr"=>["2016-01-13 23:33:28"], "sagittaire-20.lyon.grid5000.fr"=>["2016-01-13 23:33:28"], "sagittaire-19.lyon.grid5000.fr"=>["2016-01-13 23:33:28"], "sagittaire-29.lyon.grid5000.fr"=>["2016-01-13 23:33:32"], "sagittaire-31.lyon.grid5000.fr"=>["2016-01-13 23:33:48"], "sagittaire-34.lyon.grid5000.fr"=>["2016-01-13 23:33:28"], "sagittaire-32.lyon.grid5000.fr"=>["2016-01-13 23:33:31"], "sagittaire-33.lyon.grid5000.fr"=>["2016-01-13 23:33:47"], "sagittaire-38.lyon.grid5000.fr"=>["2016-01-13 23:33:29"], "sagittaire-39.lyon.grid5000.fr"=>["2016-01-13 23:33:30"], "sagittaire-4.lyon.grid5000.fr"=>["2016-01-13 23:33:27"], "sagittaire-42.lyon.grid5000.fr"=>["2016-01-13 22:36:21"], "sagittaire-45.lyon.grid5000.fr"=>["2016-01-13 23:33:29"], "sagittaire-43.lyon.grid5000.fr"=>["2016-01-13 23:33:28"], "sagittaire-46.lyon.grid5000.fr"=>["2016-01-13 23:33:29"], "sagittaire-47.lyon.grid5000.fr"=>["2016-01-13 23:33:30"], "sagittaire-48.lyon.grid5000.fr"=>["2016-01-13 23:33:29"], "sagittaire-49.lyon.grid5000.fr"=>["2016-01-13 19:17:10"], "sagittaire-5.lyon.grid5000.fr"=>["2016-01-13 23:33:27"], "sagittaire-52.lyon.grid5000.fr"=>["2016-01-13 23:33:29"], "sagittaire-50.lyon.grid5000.fr"=>["2016-01-13 23:33:29"], "sagittaire-53.lyon.grid5000.fr"=>["2016-01-13 23:33:30"], "sagittaire-54.lyon.grid5000.fr"=>["2016-01-13 23:33:31"], "sagittaire-55.lyon.grid5000.fr"=>["2016-01-13 23:33:33"], "sagittaire-56.lyon.grid5000.fr"=>["2016-01-13 23:33:34"], "sagittaire-57.lyon.grid5000.fr"=>["2016-01-13 23:33:33"], "sagittaire-58.lyon.grid5000.fr"=>["2016-01-13 23:33:34"], "sagittaire-6.lyon.grid5000.fr"=>["2016-01-13 23:33:27"], "sagittaire-63.lyon.grid5000.fr"=>["2016-01-13 23:33:32"], "sagittaire-64.lyon.grid5000.fr"=>["2016-01-13 23:33:33"], "sagittaire-65.lyon.grid5000.fr"=>["2016-01-13 23:33:32"], "sagittaire-66.lyon.grid5000.fr"=>["2016-01-13 23:33:33"], "sagittaire-61.lyon.grid5000.fr"=>["2016-01-13 23:33:34"], "sagittaire-59.lyon.grid5000.fr"=>["2016-01-13 23:33:33"], "sagittaire-67.lyon.grid5000.fr"=>["2016-01-13 23:33:32"], "sagittaire-69.lyon.grid5000.fr"=>["2016-01-13 23:33:33"], "sagittaire-7.lyon.grid5000.fr"=>["2016-01-13 23:33:28"], "sagittaire-71.lyon.grid5000.fr"=>["2016-01-13 23:33:49"], "sagittaire-72.lyon.grid5000.fr"=>["2016-01-13 23:33:51"], "sagittaire-74.lyon.grid5000.fr"=>["2016-01-13 19:25:06"], "sagittaire-75.lyon.grid5000.fr"=>["2016-01-13 23:33:53"], "sagittaire-77.lyon.grid5000.fr"=>["2016-01-13 23:33:50"], "sagittaire-78.lyon.grid5000.fr"=>["2016-01-13 23:33:49"], "sagittaire-9.lyon.grid5000.fr"=>["2016-01-13 23:33:29"]}
The output of the above command is a map :
e.g : 'sagittaire-1.lyon.grid5000.fr' => ['out1', ... , 'outn']
The following code compute the time since last reboot in minute.
require 'nyaplot'
require 'time'
now = Time.now.to_i
plot = Nyaplot::Plot.new
df = Nyaplot::DataFrame.new({
host: h.keys
.map{|x| x.split('.').first},
uptime: h.values
.map{|x| x.first}
.map{|x| ((now - Time.parse(x).to_f)/60).round(2)}
})
| host | uptime |
|---|---|
| sagittaire-3 | 39.43 |
| sagittaire-2 | 385.88 |
| sagittaire-18 | 386.08 |
| sagittaire-22 | 39.22 |
| sagittaire-28 | 39.37 |
| sagittaire-30 | 39.37 |
| sagittaire-24 | 39.42 |
| sagittaire-20 | 39.42 |
| sagittaire-19 | 39.42 |
| sagittaire-29 | 39.35 |
| sagittaire-31 | 39.08 |
| sagittaire-34 | 39.42 |
| sagittaire-32 | 39.37 |
| sagittaire-33 | 39.1 |
| sagittaire-38 | 39.4 |
| sagittaire-39 | 39.38 |
| ... | ... |
| sagittaire-9 | 39.4 |
plot=Nyaplot::Plot.new
plot.add_with_df(df, :bar, :host, :uptime)
plot.configure do
x_label('')
y_label('Uptime (min)')
rotate_x_label(-90)
end
myxp.clean