lobster 0.1.2 → 0.2.0

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/Gemfile.lock CHANGED
@@ -1,13 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lobster (0.1.1.pre)
4
+ lobster (0.1.3.wip)
5
5
  daemons (>= 1.1.4)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
- daemons (1.1.4)
10
+ daemons (1.1.8)
11
11
 
12
12
  PLATFORMS
13
13
  ruby
data/README.md CHANGED
@@ -43,9 +43,6 @@ Two environment variables are used (with defaults):
43
43
  - `LOBSTER_ENV` is a variable used to handle different environments (default:
44
44
  development)
45
45
 
46
- You need write permission to `/var/run/lobster/` for pids, this path is
47
- configurable.
48
-
49
46
  - `lobster run` will run in the console
50
47
  - or `lobster start` as a deamon
51
48
 
data/bin/lobster CHANGED
@@ -13,7 +13,9 @@ config = Lobster::Configuration.new(lobster_dir, lobster_env)
13
13
  #puts "Config: #{config}"
14
14
 
15
15
  log_dir = config[:log_dir]
16
- Dir.mkdir log_dir unless Dir.exist?(log_dir) || ARGV.first == "run"
16
+ pid_dir = config[:pid_dir]
17
+ Dir.mkdir log_dir unless Dir.exist?(log_dir) || ARGV.first == 'run'
18
+ Dir.mkdir pid_dir unless Dir.exist?(pid_dir)
17
19
 
18
20
  daemon_options = {
19
21
  :multiple => false,
data/bin/lobsterize CHANGED
@@ -60,8 +60,8 @@ unless File.exist?(schedule)
60
60
  ## Job named my_job
61
61
  #job 'my_job' do
62
62
  #
63
- ## will just sleep for 5 seconds, this command is run from the
64
- ## LOBSTER_DIR directory, so you can use relative paths from here.
63
+ ## will just sleep for 5 seconds, you can use relative paths
64
+ ## from the directory defined with the "directory" command
65
65
  # command 'sleep 5'
66
66
  #
67
67
  ## the user my_user will be use to run the command, Lobster needs
@@ -71,6 +71,9 @@ unless File.exist?(schedule)
71
71
  ## Lobster will wait 2 minutes between 2 runs
72
72
  # delay 2
73
73
  #
74
+ ## will run the command from this directory. Defaults to LOBSTER_DIR
75
+ # directory '/my_directory/here/'
76
+ #
74
77
  ## end of job definition
75
78
  #end
76
79
  EOF
@@ -3,10 +3,14 @@ require 'yaml'
3
3
  module Lobster
4
4
  class Configuration
5
5
  def initialize(dir, env)
6
+ reload(dir,env)
7
+ end
8
+
9
+ def reload(dir, env)
6
10
  @config = {
7
11
  :monitor => true,
8
12
  :log_dir => 'log',
9
- :pid_dir => File.join('/', 'var', 'run', 'lobster'),
13
+ :pid_dir => 'pids',
10
14
  :schedule_file => File.join('config', 'schedule.rb')
11
15
  }
12
16
 
@@ -14,7 +18,8 @@ module Lobster
14
18
  if File.exist? config_file_path
15
19
  config_file = YAML.load_file(config_file_path)
16
20
  @config.keys.each do |key|
17
- val = config_file[env][key.to_s] # environment-specific override
21
+ # environment-specific override
22
+ val = config_file[env][key.to_s] if config_file[env]
18
23
  val = config_file[key.to_s] if val.nil?
19
24
  @config[key] = val unless val.nil? # keep default if no config
20
25
  end
data/lib/lobster/job.rb CHANGED
@@ -8,10 +8,11 @@ module Lobster
8
8
  @pid = nil
9
9
  end
10
10
 
11
- def reload(options)
11
+ def reload(options, lobster_dir)
12
12
  options[:delay] ||= 10
13
+ options[:directory] ||= lobster_dir
13
14
 
14
- [:command, :delay, :user].each do |opt|
15
+ [:command, :delay, :user, :directory].each do |opt|
15
16
  val = instance_variable_get "@#{opt}"
16
17
  if options[opt] != val
17
18
  Lobster.logger.info "Job #{opt} updated for #{@name}, was \"#{val}\", now \"#{options[opt]}\"" if val
@@ -21,7 +22,7 @@ module Lobster
21
22
  end
22
23
  end
23
24
 
24
- @name ||= "<unnamed_job_#{command.hash.abs}>"
25
+ @name ||= "<unnamed_job_#{@command.hash.abs}>"
25
26
  @next_run ||= Time.now + rand(@delay*60)
26
27
  end
27
28
 
@@ -37,12 +38,12 @@ module Lobster
37
38
  end
38
39
  end
39
40
 
40
- def run(out,err,dir)
41
+ def run(out,err)
41
42
  Lobster.logger.info "Starting job #{@name}"
42
- command_line = @user ? "sudo -inu #{@user} \"cd $PWD ; #{@command}\"" : @command
43
+ command_line = @user ? "sudo -snu #{@user} '#{@command}'" : @command
43
44
 
44
45
  begin
45
- @pid = spawn(command_line, :out=>out, :err=>err, :chdir=>dir)
46
+ @pid = spawn(command_line, :out=>out, :err=>err, :chdir=> @directory)
46
47
  rescue Exception => e
47
48
  Lobster.logger.error "#{e}: error when starting job #{@name}"
48
49
  @next_run = Time.now + 10
@@ -2,8 +2,8 @@ module Lobster
2
2
  class JobList
3
3
  attr_accessor :jobs
4
4
 
5
- def initialize(file)
6
- @file = file
5
+ def initialize(config)
6
+ @config = config
7
7
  @current_options = nil
8
8
  @jobs = {}
9
9
  end
@@ -11,7 +11,8 @@ module Lobster
11
11
  def reload
12
12
  @new_jobs = {}
13
13
 
14
- instance_eval(File.read(@file),@file)
14
+ file = @config[:schedule_file]
15
+ instance_eval(File.read(file),file)
15
16
 
16
17
  # purely for logging
17
18
  @jobs.each do |name, job|
@@ -25,11 +26,11 @@ module Lobster
25
26
  @current_options = {}
26
27
  yield
27
28
  @new_jobs[name] ||= @jobs[name] || Job.new(name)
28
- @new_jobs[name].reload(@current_options)
29
+ @new_jobs[name].reload(@current_options, @config[:lobster_dir])
29
30
  @current_options = nil
30
31
  end
31
32
 
32
- [:command, :delay, :user].each do |opt|
33
+ [:command, :delay, :user, :directory].each do |opt|
33
34
  define_method opt do |value|
34
35
  @current_options[opt] = value
35
36
  end
@@ -39,5 +40,10 @@ module Lobster
39
40
  def cmd(command)
40
41
  @current_options[:command] = command
41
42
  end
43
+
44
+ # config data
45
+ def environment
46
+ @config[:environment]
47
+ end
42
48
  end
43
49
  end
@@ -31,7 +31,7 @@ module Lobster
31
31
 
32
32
  trap 'HUP' do
33
33
  begin
34
- @config = Configuration.new(@config[:lobster_dir], @config[:environment])
34
+ @config.reload(@config[:lobster_dir], @config[:environment])
35
35
  rescue Exception => e
36
36
  Lobster.logger.error "Cannot reload conf, Exception: #{e}"
37
37
  break
@@ -64,16 +64,21 @@ module Lobster
64
64
 
65
65
  @job_list.jobs.each_value do |job|
66
66
  if not job.running? and now >= job.next_run
67
- job.run(@wout, @werr, @config[:lobster_dir])
67
+ job.run(@wout, @werr)
68
68
  end
69
69
  end
70
70
  @sleeping = true
71
- sleep @poll_delay
71
+ begin
72
+ sleep @poll_delay
73
+ rescue Exception => e
74
+ Lobster.logger.info "Sleep caught exception: #{e}"
75
+ break
76
+ end
72
77
  end
73
78
  end
74
79
 
75
80
  def reload_schedule
76
- @job_list ||= JobList.new(@config[:schedule_file])
81
+ @job_list ||= JobList.new(@config)
77
82
  begin
78
83
  @job_list.reload
79
84
  rescue Exception => e
@@ -1,3 +1,3 @@
1
1
  module Lobster
2
- VERSION = '0.1.2'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lobster
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-19 00:00:00.000000000 Z
12
+ date: 2012-03-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: daemons
16
- requirement: &75477200 !ruby/object:Gem::Requirement
16
+ requirement: &78818160 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 1.1.4
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *75477200
24
+ version_requirements: *78818160
25
25
  description: ''
26
26
  email:
27
27
  - m.brugidou@criteo.com