Getting resources

We use xp5k to manage the interaction with the Grid resources.

We create a new XP and define a new job.

Note that resources are the same as those given in a oarsub command line.

In [1]:
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"
    })

Submission

submit is asynchronous, wait_for_jobs will wait for all the resources to be ready.

In [2]:
myxp.submit
myxp.wait_for_jobs
Out[2]:
#<Proc:0x007fabaf947098@/Users/msimonin/msimonin@github.com/xp5k/lib/xp5k/xp.rb:118>

Run command

xp5k/rake include some helpers to run commands on the nodes of your reservation.

In [3]:
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...
Out[3]:
{"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"]}

Draw the bar plot

The output of the above command is a map :

  • each key is a server name
  • a value is the outputs of the commands run on this server

e.g : 'sagittaire-1.lyon.grid5000.fr' => ['out1', ... , 'outn']

The following code compute the time since last reboot in minute.

In [4]:
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)}
    })
Out[4]:
Out[4]:
hostuptime
sagittaire-339.43
sagittaire-2385.88
sagittaire-18386.08
sagittaire-2239.22
sagittaire-2839.37
sagittaire-3039.37
sagittaire-2439.42
sagittaire-2039.42
sagittaire-1939.42
sagittaire-2939.35
sagittaire-3139.08
sagittaire-3439.42
sagittaire-3239.37
sagittaire-3339.1
sagittaire-3839.4
sagittaire-3939.38
......
sagittaire-939.4
In [5]:
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
Out[5]:
In [ ]:
myxp.clean
In [ ]: