vizir 0.2.3 → 0.2.4
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.
- data/VERSION +1 -1
- data/bin/vizir +17 -5
- data/lib/vizir.rb +19 -18
- data/test/test_vizir.rb +11 -10
- data/vizir.gemspec +4 -5
- metadata +6 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.4
|
data/bin/vizir
CHANGED
@@ -4,6 +4,7 @@ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
|
4
4
|
|
5
5
|
require 'eventmachine'
|
6
6
|
require 'growl'
|
7
|
+
require 'logger'
|
7
8
|
require 'net/ssh/gateway'
|
8
9
|
require 'optparse'
|
9
10
|
require 'rest_client'
|
@@ -11,6 +12,9 @@ require 'vizir'
|
|
11
12
|
|
12
13
|
$alert_period = 60
|
13
14
|
$refresh_period = 3600
|
15
|
+
$log = Logger.new(STDOUT)
|
16
|
+
$log.datetime_format = "%H:%M:%S"
|
17
|
+
$log.level = Logger::WARN
|
14
18
|
|
15
19
|
def setup_ssh_tunnel
|
16
20
|
gateway = Net::SSH::Gateway.new('access.grenoble.grid5000.fr', $login)
|
@@ -27,8 +31,8 @@ def setup_growl
|
|
27
31
|
$growl.register('Vizir', ['Job ending soon'])
|
28
32
|
end
|
29
33
|
|
30
|
-
def notify_via_growl(jobid, site_name, time
|
31
|
-
$growl.notify('Job ending soon', 'OAR job terminating soon', "Job #{jobid} in #{site_name} ending
|
34
|
+
def notify_via_growl(jobid, site_name, time)
|
35
|
+
$growl.notify('Job ending soon', 'OAR job terminating soon', "Job #{jobid} in #{site_name} ending #{time}.", :sticky => true)
|
32
36
|
end
|
33
37
|
|
34
38
|
$login = nil
|
@@ -45,13 +49,21 @@ opts = OptionParser.new do |opts|
|
|
45
49
|
end
|
46
50
|
opts.on('-l', '--login LOGIN', String, "User login on Grid\'5000") { |str| $login = str }
|
47
51
|
opts.on('-m', '--min-job-time TIME', Integer, "Minimum job time (seconds), default: #{$refresh_period}") { |t| $refresh_period = t }
|
52
|
+
opts.on('-v', '--verbose', "Print debugging messages") { $log.level = Logger::INFO }
|
48
53
|
end
|
49
54
|
|
50
|
-
|
55
|
+
begin
|
56
|
+
opts.parse!(ARGV)
|
57
|
+
rescue
|
58
|
+
puts "Error: " + $!
|
59
|
+
puts "\n" + opts.to_s
|
60
|
+
exit 1
|
61
|
+
end
|
51
62
|
|
52
63
|
if $login == nil
|
53
|
-
puts
|
54
|
-
|
64
|
+
puts "Error: login is required"
|
65
|
+
puts "\n" + opts.to_s
|
66
|
+
exit 1
|
55
67
|
end
|
56
68
|
|
57
69
|
gateway, port = setup_ssh_tunnel
|
data/lib/vizir.rb
CHANGED
@@ -7,21 +7,24 @@ module Vizir
|
|
7
7
|
FIRST_ALERT_TIME = 600
|
8
8
|
|
9
9
|
def Vizir.humanize_time(time)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
10
|
+
return "now" if time <= 0
|
11
|
+
|
12
|
+
time_units = []
|
13
|
+
minutes = time / 60
|
14
|
+
if minutes != 0
|
15
|
+
s = "#{minutes} minute"
|
16
|
+
s += "s" if minutes > 1
|
17
|
+
time_units.push(s)
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
|
20
|
+
seconds = time % 60
|
21
|
+
if seconds != 0
|
22
|
+
s = "#{seconds} second"
|
23
|
+
s += "s" if seconds > 1
|
24
|
+
time_units.push(s)
|
22
25
|
end
|
23
26
|
|
24
|
-
return
|
27
|
+
return "in " + time_units.join(" and ")
|
25
28
|
end
|
26
29
|
|
27
30
|
def Vizir.get_remaining_time(end_time, now)
|
@@ -71,7 +74,9 @@ module Vizir
|
|
71
74
|
jobid = job_details['Job_Id']
|
72
75
|
# If we don't yet know the job, record it in $jobs
|
73
76
|
if $jobs[jobid].nil?
|
74
|
-
|
77
|
+
ending_time = Time.at(Integer(job_details['startTime']) + Integer(job_details['walltime']))
|
78
|
+
$jobs[jobid] = Vizir::Job.new(jobid, ending_time, site_name.capitalize)
|
79
|
+
$log.info("learned job #{jobid} in #{site_name.capitalize} ending on #{ending_time.strftime('%b %d')} at #{ending_time.strftime('%H:%M:%S')}")
|
75
80
|
end
|
76
81
|
end
|
77
82
|
end
|
@@ -98,12 +103,8 @@ module Vizir
|
|
98
103
|
next
|
99
104
|
end
|
100
105
|
remaining_sec = Vizir.get_remaining_time(job.end_time, Time.now)
|
101
|
-
|
102
|
-
|
103
|
-
next
|
104
|
-
end
|
105
|
-
remaining_time, remaining_time_unit = Vizir.humanize_time(remaining_sec)
|
106
|
-
notify_via_growl(jobid, job.site_name, remaining_time, remaining_time_unit)
|
106
|
+
remaining_time = Vizir.humanize_time(remaining_sec)
|
107
|
+
notify_via_growl(jobid, job.site_name, remaining_time)
|
107
108
|
end
|
108
109
|
end
|
109
110
|
end
|
data/test/test_vizir.rb
CHANGED
@@ -2,20 +2,21 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class VizirTest < Test::Unit::TestCase
|
4
4
|
TIMES = [
|
5
|
-
[
|
6
|
-
[1,
|
7
|
-
[
|
8
|
-
[
|
9
|
-
[
|
10
|
-
[
|
11
|
-
[
|
5
|
+
[-119, "now"],
|
6
|
+
[-1, "now"],
|
7
|
+
[0, "now"],
|
8
|
+
[1, "in 1 second"],
|
9
|
+
[30, "in 30 seconds"],
|
10
|
+
[59, "in 59 seconds"],
|
11
|
+
[60, "in 1 minute"],
|
12
|
+
[61, "in 1 minute and 1 second"],
|
13
|
+
[119, "in 1 minute and 59 seconds"],
|
14
|
+
[120, "in 2 minutes"]
|
12
15
|
]
|
13
16
|
def test_humanize_time
|
14
17
|
TIMES.each do |seconds, result|
|
15
18
|
assert_equal(result, Vizir.humanize_time(seconds))
|
16
19
|
end
|
17
|
-
e = assert_raise(RuntimeError) { Vizir.humanize_time(-1) }
|
18
|
-
assert_equal("Can't humanize negative period", e.message)
|
19
20
|
end
|
20
21
|
|
21
22
|
def test_learn_sites
|
@@ -34,7 +35,7 @@ class VizirTest < Test::Unit::TestCase
|
|
34
35
|
"uri" => "/sites/luxembourg"
|
35
36
|
}]
|
36
37
|
json = JSON.generate(o)
|
37
|
-
FakeWeb.register_uri(:get, "#{Vizir::APIURL}/sites?structure=simple", :
|
38
|
+
FakeWeb.register_uri(:get, "#{Vizir::APIURL}/sites?structure=simple", :body => json)
|
38
39
|
api = Vizir.get_api(Vizir::APIURL)
|
39
40
|
sites = o.delete_if { |hash| hash["site"] == "luxembourg" }
|
40
41
|
ignored_sites = ["luxembourg", "portoalegre"]
|
data/vizir.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{vizir}
|
5
|
-
s.version = "0.2.
|
5
|
+
s.version = "0.2.4"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Pierre Riteau"]
|
9
|
-
s.date = %q{2009-
|
9
|
+
s.date = %q{2009-07-13}
|
10
10
|
s.default_executable = %q{vizir}
|
11
11
|
s.email = %q{pierre.riteau@gmail.com}
|
12
12
|
s.executables = ["vizir"]
|
@@ -27,12 +27,11 @@ Gem::Specification.new do |s|
|
|
27
27
|
"test/test_vizir.rb",
|
28
28
|
"vizir.gemspec"
|
29
29
|
]
|
30
|
-
s.has_rdoc = true
|
31
30
|
s.homepage = %q{http://github.com/priteau/vizir}
|
32
31
|
s.rdoc_options = ["--charset=UTF-8"]
|
33
32
|
s.require_paths = ["lib"]
|
34
33
|
s.rubyforge_project = %q{vizir}
|
35
|
-
s.rubygems_version = %q{1.3.
|
34
|
+
s.rubygems_version = %q{1.3.4}
|
36
35
|
s.summary = %q{Growl notifications for Grid'5000 jobs}
|
37
36
|
s.test_files = [
|
38
37
|
"test/test_helper.rb",
|
@@ -41,7 +40,7 @@ Gem::Specification.new do |s|
|
|
41
40
|
|
42
41
|
if s.respond_to? :specification_version then
|
43
42
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
44
|
-
s.specification_version =
|
43
|
+
s.specification_version = 3
|
45
44
|
|
46
45
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
47
46
|
s.add_runtime_dependency(%q<eventmachine>, [">= 0"])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vizir
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pierre Riteau
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-07-13 00:00:00 +02:00
|
13
13
|
default_executable: vizir
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -85,6 +85,8 @@ files:
|
|
85
85
|
- vizir.gemspec
|
86
86
|
has_rdoc: true
|
87
87
|
homepage: http://github.com/priteau/vizir
|
88
|
+
licenses: []
|
89
|
+
|
88
90
|
post_install_message:
|
89
91
|
rdoc_options:
|
90
92
|
- --charset=UTF-8
|
@@ -105,9 +107,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
107
|
requirements: []
|
106
108
|
|
107
109
|
rubyforge_project: vizir
|
108
|
-
rubygems_version: 1.3.
|
110
|
+
rubygems_version: 1.3.4
|
109
111
|
signing_key:
|
110
|
-
specification_version:
|
112
|
+
specification_version: 3
|
111
113
|
summary: Growl notifications for Grid'5000 jobs
|
112
114
|
test_files:
|
113
115
|
- test/test_helper.rb
|