Class: Stormtroopers::Manager

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/stormtroopers/manager.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.logger(*args) ⇒ Object



84
85
86
# File 'lib/stormtroopers/manager.rb', line 84

def logger(*args)
  instance.logger(*args)
end

Instance Method Details

#armiesObject



47
48
49
50
51
# File 'lib/stormtroopers/manager.rb', line 47

def armies
  @armies ||= config[:armies].map do |army_config|
    Army.new(army_config)
  end
end

#configObject



53
54
55
# File 'lib/stormtroopers/manager.rb', line 53

def config
  @config ||= HashWithIndifferentAccess.new(YAML.load_file(config_file))
end

#config_fileObject



65
66
67
# File 'lib/stormtroopers/manager.rb', line 65

def config_file
  File.join(working_directory, "config", "stormtroopers.yml")
end

#loggerObject



69
70
71
72
73
# File 'lib/stormtroopers/manager.rb', line 69

def logger
  log_directory = File.join(working_directory, "log")
  Dir.mkdir(log_directory) unless File.directory?(log_directory)
  @logger ||= Logger.new(File.join(working_directory, "log", "stormtroopers.log"))
end

#manageObject

Raises:



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/stormtroopers/manager.rb', line 13

def manage
  raise AlreadyRunning if managing?
  @managing = true

  Signal.trap("INT") do
    logger.info "Stopping, waiting for running jobs to complete"
    @managing = false
  end

  logger.info "Starting"

  if config[:speed] == "ludicrous"
    logger.info "Ludicrous speed? Sir! we have never gone that fast before, I dont know if the ship can take it! Whats the matter Colonel Sanders? CHICKEN?!"
    puts "Ludicrous speed? Sir! we have never gone that fast before, I dont know if the ship can take it! Whats the matter Colonel Sanders? CHICKEN?!"
    Delayed::Backend::Mongoid::Job.class_eval do
      def self.reserve(worker, max_run_time = Delayed::Worker.max_run_time)
        where(failed_at: nil, locked_at: nil).find_and_modify({"$set" => {locked_at: db_time_now, locked_by: worker.name}}, new: true)
      end
    end
  end

  while managing? do
    assigned = armies.map(&:manage)
    sleep timeout(assigned.include?(true)) 
  end

  armies.each(&:finish)
  logger.info "Stopped, all running jobs completed"
end

#managing?Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/stormtroopers/manager.rb', line 43

def managing?
  @managing || false
end

#working_directoryObject



57
58
59
60
61
62
63
# File 'lib/stormtroopers/manager.rb', line 57

def working_directory
  if defined?(Rails)
    Rails.root
  else
    Dir.getwd
  end
end