class Mamiya::Master

Constants

MASTER_EVENTS

Attributes

agent_monitor[R]

Public Class Methods

new(*) click to toggle source
Calls superclass method Mamiya::Agent::new
# File lib/mamiya/master.rb, line 9
def initialize(*)
  super

  @agent_monitor = AgentMonitor.new(self)
  @events_only ||= []
  @events_only << MASTER_EVENTS
end

Public Instance Methods

applications() click to toggle source
# File lib/mamiya/master.rb, line 49
def applications
  config.storage_class.find(
    config[:storage]
  ).keys
end
labels() click to toggle source
# File lib/mamiya/master.rb, line 59
def labels
  []
end
start() click to toggle source
# File lib/mamiya/master.rb, line 29
def start
  # Override and stop starting task_queue
  web_start
  serf_start
  monitor_start
end
status(packages: false) click to toggle source
# File lib/mamiya/master.rb, line 55
def status(packages: false)
  {name: serf.name, master: true}
end
storage(app) click to toggle source
# File lib/mamiya/master.rb, line 41
def storage(app)
  config.storage_class.new(
    config[:storage].merge(
      application: app
    )
  )
end
terminate() click to toggle source
Calls superclass method Mamiya::Agent#terminate
# File lib/mamiya/master.rb, line 36
def terminate
  @agent_monitor.stop!
  super
end
web() click to toggle source
# File lib/mamiya/master.rb, line 19
def web
  logger = self.logger
  this = self

  @web ||= Rack::Builder.new do
    use AppBridge, logger, this
    run Web
  end
end

Private Instance Methods

init_serf() click to toggle source
Calls superclass method Mamiya::Agent#init_serf
# File lib/mamiya/master.rb, line 65
def init_serf
  super.tap do |serf|
    serf.on_user_event do |event|
      monitor_commit_event(event)
    end

    serf.on_member_join do |event|
      @agent_monitor.refresh(node: event.members.map { |_| _[:name] })
    end
  end
end
monitor_commit_event(event) click to toggle source
# File lib/mamiya/master.rb, line 77
def monitor_commit_event(event)
  @agent_monitor.commit_event(event)
rescue Exception => e
  logger.fatal("Error during commiting event: #{e.inspect}")
  e.backtrace.each do |line|
    logger.fatal "\t#{line}"
  end
end
monitor_start() click to toggle source
# File lib/mamiya/master.rb, line 105
def monitor_start
  logger.debug "Starting agent_monitor..."
  @agent_monitor.start!
  logger.debug "agent_monitor became ready"
end
web_start() click to toggle source
# File lib/mamiya/master.rb, line 86
def web_start
  @web_thread = Thread.new do
    options = config[:web] || {}
    rack_options = {
      app: self.web,
      Port: options[:port] ? options[:port].to_i : 7761,
      Host: options[:bind] || '0.0.0.0', # TODO: IPv6
      environment: options[:environment] || 'development',
      server: options[:server],
      Logger: logger['web']
    }
    server = Rack::Server.new(rack_options)
    # To disable trap(:INT) and trap(:TERM)
    server.define_singleton_method(:trap) { |*args| }
    server.start
  end
  @web_thread.abort_on_exception = true
end