vizir 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. data/VERSION +1 -1
  2. data/bin/vizir +17 -5
  3. data/lib/vizir.rb +19 -18
  4. data/test/test_vizir.rb +11 -10
  5. data/vizir.gemspec +4 -5
  6. metadata +6 -4
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.3
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, time_unit)
31
- $growl.notify('Job ending soon', 'OAR job terminating soon', "Job #{jobid} in #{site_name} ending in #{time} #{time_unit}.", :sticky => true)
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
- opts.parse!(ARGV)
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 opts
54
- exit
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
- fail "Can't humanize negative period" if time < 0
11
-
12
- if time >= 60
13
- remaining_time = time / 60
14
- remaining_time_unit = "minute"
15
- else
16
- remaining_time = time
17
- remaining_time_unit = "second"
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
- if remaining_time > 1
21
- remaining_time_unit += "s"
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 remaining_time, remaining_time_unit
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
- $jobs[jobid] = Vizir::Job.new(jobid, Time.at(Integer(job_details['startTime']) + Integer(job_details['walltime'])), site_name.capitalize)
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
- if remaining_sec < 0
102
- $stderr.puts "Error: negative time"
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
- [0, [0, "second"]],
6
- [1, [1, "second"]],
7
- [30, [30, "seconds"]],
8
- [59, [59, "seconds"]],
9
- [60, [1, "minute"]],
10
- [119, [1, "minute"]],
11
- [120, [2, "minutes"]]
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", :string => json)
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.3"
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-06-19}
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.1}
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 = 2
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.3
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-06-19 00:00:00 +02:00
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.1
110
+ rubygems_version: 1.3.4
109
111
  signing_key:
110
- specification_version: 2
112
+ specification_version: 3
111
113
  summary: Growl notifications for Grid'5000 jobs
112
114
  test_files:
113
115
  - test/test_helper.rb