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.
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